From 1e8e5604a90458e1b0be28fa299c75507ffe9f6b Mon Sep 17 00:00:00 2001 From: goodloving <953370874@qq.com> Date: Sun, 25 Nov 2018 13:25:08 +0800 Subject: [PATCH] 2018/11/25 --- ...0\345\217\221\346\211\213\345\206\214.chw" | Bin 0 -> 594468 bytes ...7\346\211\213\345\206\214(2015.07.17).chw" | Bin 0 -> 1246725 bytes .../commons-beanutils-1.8.3/LICENSE.txt | 202 + .../commons-beanutils-1.8.3/NOTICE.txt | 5 + .../commons-beanutils-1.8.3/RELEASE-NOTES.txt | 58 + .../apidocs/allclasses-frame.html | 232 + .../apidocs/allclasses-noframe.html | 232 + .../apidocs/constant-values.html | 199 + .../apidocs/deprecated-list.html | 562 ++ .../apidocs/help-doc.html | 224 + .../apidocs/index-all.html | 4582 +++++++++++++++++ .../apidocs/index.html | 40 + .../commons-beanutils-1.8.3/apidocs/options | 30 + .../commons/beanutils/BasicDynaBean.html | 703 +++ .../commons/beanutils/BasicDynaClass.html | 678 +++ .../BeanAccessLanguageException.html | 276 + .../commons/beanutils/BeanComparator.html | 485 ++ .../commons/beanutils/BeanMap.Entry.html | 326 ++ .../org/apache/commons/beanutils/BeanMap.html | 1226 +++++ .../commons/beanutils/BeanPredicate.html | 386 ++ .../BeanPropertyValueChangeClosure.html | 459 ++ .../BeanPropertyValueEqualsPredicate.html | 520 ++ .../BeanToPropertyValueTransformer.html | 416 ++ .../apache/commons/beanutils/BeanUtils.html | 939 ++++ .../commons/beanutils/BeanUtilsBean.html | 1076 ++++ .../commons/beanutils/BeanUtilsBean2.html | 315 ++ .../commons/beanutils/ConstructorUtils.html | 556 ++ .../beanutils/ContextClassLoaderLocal.html | 437 ++ .../beanutils/ConversionException.html | 367 ++ .../commons/beanutils/ConvertUtils.html | 898 ++++ .../commons/beanutils/ConvertUtilsBean.html | 1018 ++++ .../commons/beanutils/ConvertUtilsBean2.html | 345 ++ .../apache/commons/beanutils/Converter.html | 245 + .../beanutils/ConvertingWrapDynaBean.html | 320 ++ .../apache/commons/beanutils/DynaBean.html | 473 ++ .../beanutils/DynaBeanMapDecorator.html | 739 +++ .../apache/commons/beanutils/DynaClass.html | 324 ++ .../commons/beanutils/DynaProperty.html | 601 +++ .../commons/beanutils/LazyDynaBean.html | 1317 +++++ .../commons/beanutils/LazyDynaClass.html | 797 +++ .../commons/beanutils/LazyDynaList.html | 842 +++ .../apache/commons/beanutils/LazyDynaMap.html | 1001 ++++ .../beanutils/MappedPropertyDescriptor.html | 481 ++ .../apache/commons/beanutils/MethodUtils.html | 1105 ++++ .../commons/beanutils/MutableDynaClass.html | 407 ++ .../beanutils/NestedNullException.html | 273 + .../commons/beanutils/PropertyUtils.html | 1504 ++++++ .../commons/beanutils/PropertyUtilsBean.html | 1589 ++++++ .../commons/beanutils/ResultSetDynaClass.html | 867 ++++ .../commons/beanutils/ResultSetIterator.html | 699 +++ .../commons/beanutils/RowSetDynaClass.html | 1021 ++++ .../commons/beanutils/WrapDynaBean.html | 685 +++ .../commons/beanutils/WrapDynaClass.html | 674 +++ .../beanutils/class-use/BasicDynaBean.html | 145 + .../beanutils/class-use/BasicDynaClass.html | 185 + .../BeanAccessLanguageException.html | 186 + .../beanutils/class-use/BeanComparator.html | 145 + .../beanutils/class-use/BeanMap.Entry.html | 145 + .../commons/beanutils/class-use/BeanMap.html | 202 + .../beanutils/class-use/BeanPredicate.html | 145 + .../BeanPropertyValueChangeClosure.html | 145 + .../BeanPropertyValueEqualsPredicate.html | 145 + .../BeanToPropertyValueTransformer.html | 145 + .../beanutils/class-use/BeanUtils.html | 182 + .../beanutils/class-use/BeanUtilsBean.html | 249 + .../beanutils/class-use/BeanUtilsBean2.html | 145 + .../beanutils/class-use/ConstructorUtils.html | 145 + .../class-use/ContextClassLoaderLocal.html | 145 + .../class-use/ConversionException.html | 145 + .../beanutils/class-use/ConvertUtils.html | 145 + .../beanutils/class-use/ConvertUtilsBean.html | 261 + .../class-use/ConvertUtilsBean2.html | 145 + .../beanutils/class-use/Converter.html | 858 +++ .../class-use/ConvertingWrapDynaBean.html | 145 + .../commons/beanutils/class-use/DynaBean.html | 324 ++ .../class-use/DynaBeanMapDecorator.html | 145 + .../beanutils/class-use/DynaClass.html | 368 ++ .../beanutils/class-use/DynaProperty.html | 372 ++ .../beanutils/class-use/LazyDynaBean.html | 186 + .../beanutils/class-use/LazyDynaClass.html | 145 + .../beanutils/class-use/LazyDynaList.html | 145 + .../beanutils/class-use/LazyDynaMap.html | 145 + .../class-use/MappedPropertyDescriptor.html | 145 + .../beanutils/class-use/MethodUtils.html | 145 + .../beanutils/class-use/MutableDynaClass.html | 211 + .../class-use/NestedNullException.html | 145 + .../beanutils/class-use/PropertyUtils.html | 145 + .../class-use/PropertyUtilsBean.html | 237 + .../class-use/ResultSetDynaClass.html | 185 + .../class-use/ResultSetIterator.html | 145 + .../beanutils/class-use/RowSetDynaClass.html | 145 + .../beanutils/class-use/WrapDynaBean.html | 187 + .../beanutils/class-use/WrapDynaClass.html | 203 + .../converters/AbstractArrayConverter.html | 470 ++ .../converters/AbstractConverter.html | 628 +++ .../beanutils/converters/ArrayConverter.html | 656 +++ .../converters/BigDecimalConverter.html | 331 ++ .../converters/BigIntegerConverter.html | 331 ++ .../converters/BooleanArrayConverter.html | 468 ++ .../converters/BooleanConverter.html | 498 ++ .../converters/ByteArrayConverter.html | 338 ++ .../beanutils/converters/ByteConverter.html | 331 ++ .../converters/CalendarConverter.html | 327 ++ .../converters/CharacterArrayConverter.html | 338 ++ .../converters/CharacterConverter.html | 375 ++ .../beanutils/converters/ClassConverter.html | 379 ++ .../beanutils/converters/ConverterFacade.html | 318 ++ .../beanutils/converters/DateConverter.html | 327 ++ .../converters/DateTimeConverter.html | 650 +++ .../converters/DoubleArrayConverter.html | 338 ++ .../beanutils/converters/DoubleConverter.html | 331 ++ .../beanutils/converters/FileConverter.html | 348 ++ .../converters/FloatArrayConverter.html | 338 ++ .../beanutils/converters/FloatConverter.html | 331 ++ .../converters/IntegerArrayConverter.html | 338 ++ .../converters/IntegerConverter.html | 331 ++ .../converters/LongArrayConverter.html | 338 ++ .../beanutils/converters/LongConverter.html | 331 ++ .../beanutils/converters/NumberConverter.html | 567 ++ .../converters/ShortArrayConverter.html | 338 ++ .../beanutils/converters/ShortConverter.html | 331 ++ .../converters/SqlDateConverter.html | 331 ++ .../converters/SqlTimeConverter.html | 360 ++ .../converters/SqlTimestampConverter.html | 360 ++ .../converters/StringArrayConverter.html | 361 ++ .../beanutils/converters/StringConverter.html | 364 ++ .../beanutils/converters/URLConverter.html | 346 ++ .../class-use/AbstractArrayConverter.html | 249 + .../class-use/AbstractConverter.html | 376 ++ .../converters/class-use/ArrayConverter.html | 145 + .../class-use/BigDecimalConverter.html | 145 + .../class-use/BigIntegerConverter.html | 145 + .../class-use/BooleanArrayConverter.html | 145 + .../class-use/BooleanConverter.html | 202 + .../class-use/ByteArrayConverter.html | 145 + .../converters/class-use/ByteConverter.html | 145 + .../class-use/CalendarConverter.html | 145 + .../class-use/CharacterArrayConverter.html | 145 + .../class-use/CharacterConverter.html | 145 + .../converters/class-use/ClassConverter.html | 145 + .../converters/class-use/ConverterFacade.html | 145 + .../converters/class-use/DateConverter.html | 145 + .../class-use/DateTimeConverter.html | 222 + .../class-use/DoubleArrayConverter.html | 145 + .../converters/class-use/DoubleConverter.html | 145 + .../converters/class-use/FileConverter.html | 145 + .../class-use/FloatArrayConverter.html | 145 + .../converters/class-use/FloatConverter.html | 145 + .../class-use/IntegerArrayConverter.html | 145 + .../class-use/IntegerConverter.html | 145 + .../class-use/LongArrayConverter.html | 145 + .../converters/class-use/LongConverter.html | 145 + .../converters/class-use/NumberConverter.html | 249 + .../class-use/ShortArrayConverter.html | 145 + .../converters/class-use/ShortConverter.html | 145 + .../class-use/SqlDateConverter.html | 145 + .../class-use/SqlTimeConverter.html | 145 + .../class-use/SqlTimestampConverter.html | 145 + .../class-use/StringArrayConverter.html | 145 + .../converters/class-use/StringConverter.html | 145 + .../converters/class-use/URLConverter.html | 145 + .../beanutils/converters/package-frame.html | 99 + .../beanutils/converters/package-summary.html | 339 ++ .../beanutils/converters/package-tree.html | 165 + .../beanutils/converters/package-use.html | 203 + .../beanutils/expression/DefaultResolver.html | 495 ++ .../beanutils/expression/Resolver.html | 455 ++ .../expression/class-use/DefaultResolver.html | 145 + .../expression/class-use/Resolver.html | 232 + .../beanutils/expression/package-frame.html | 44 + .../beanutils/expression/package-summary.html | 191 + .../beanutils/expression/package-tree.html | 160 + .../beanutils/expression/package-use.html | 196 + .../beanutils/locale/BaseLocaleConverter.html | 602 +++ .../locale/LocaleBeanUtils.Descriptor.html | 466 ++ .../beanutils/locale/LocaleBeanUtils.html | 1189 +++++ .../LocaleBeanUtilsBean.Descriptor.html | 468 ++ .../beanutils/locale/LocaleBeanUtilsBean.html | 1316 +++++ .../beanutils/locale/LocaleConvertUtils.html | 797 +++ .../locale/LocaleConvertUtilsBean.html | 838 +++ .../beanutils/locale/LocaleConverter.html | 247 + .../locale/class-use/BaseLocaleConverter.html | 359 ++ .../class-use/LocaleBeanUtils.Descriptor.html | 182 + .../locale/class-use/LocaleBeanUtils.html | 145 + .../LocaleBeanUtilsBean.Descriptor.html | 184 + .../locale/class-use/LocaleBeanUtilsBean.html | 197 + .../locale/class-use/LocaleConvertUtils.html | 145 + .../class-use/LocaleConvertUtilsBean.html | 211 + .../locale/class-use/LocaleConverter.html | 448 ++ .../converters/BigDecimalLocaleConverter.html | 595 +++ .../converters/BigIntegerLocaleConverter.html | 595 +++ .../converters/ByteLocaleConverter.html | 593 +++ .../converters/DateLocaleConverter.html | 637 +++ .../converters/DecimalLocaleConverter.html | 597 +++ .../converters/DoubleLocaleConverter.html | 593 +++ .../converters/FloatLocaleConverter.html | 594 +++ .../converters/IntegerLocaleConverter.html | 593 +++ .../converters/LongLocaleConverter.html | 595 +++ .../converters/ShortLocaleConverter.html | 595 +++ .../converters/SqlDateLocaleConverter.html | 602 +++ .../converters/SqlTimeLocaleConverter.html | 602 +++ .../SqlTimestampLocaleConverter.html | 602 +++ .../converters/StringLocaleConverter.html | 592 +++ .../class-use/BigDecimalLocaleConverter.html | 145 + .../class-use/BigIntegerLocaleConverter.html | 145 + .../class-use/ByteLocaleConverter.html | 145 + .../class-use/DateLocaleConverter.html | 216 + .../class-use/DecimalLocaleConverter.html | 281 + .../class-use/DoubleLocaleConverter.html | 145 + .../class-use/FloatLocaleConverter.html | 145 + .../class-use/IntegerLocaleConverter.html | 145 + .../class-use/LongLocaleConverter.html | 145 + .../class-use/ShortLocaleConverter.html | 145 + .../class-use/SqlDateLocaleConverter.html | 145 + .../class-use/SqlTimeLocaleConverter.html | 145 + .../SqlTimestampLocaleConverter.html | 145 + .../class-use/StringLocaleConverter.html | 145 + .../locale/converters/package-frame.html | 59 + .../locale/converters/package-summary.html | 303 ++ .../locale/converters/package-tree.html | 161 + .../locale/converters/package-use.html | 191 + .../beanutils/locale/package-frame.html | 54 + .../beanutils/locale/package-summary.html | 216 + .../beanutils/locale/package-tree.html | 166 + .../commons/beanutils/locale/package-use.html | 233 + .../commons/beanutils/package-frame.html | 129 + .../commons/beanutils/package-summary.html | 1354 +++++ .../commons/beanutils/package-tree.html | 222 + .../apache/commons/beanutils/package-use.html | 370 ++ .../commons/collections/ArrayStack.html | 584 +++ .../apache/commons/collections/Buffer.html | 288 ++ .../collections/BufferUnderflowException.html | 329 ++ .../commons/collections/FastHashMap.html | 864 ++++ .../collections/class-use/ArrayStack.html | 145 + .../commons/collections/class-use/Buffer.html | 185 + .../class-use/BufferUnderflowException.html | 145 + .../collections/class-use/FastHashMap.html | 262 + .../commons/collections/package-frame.html | 57 + .../commons/collections/package-summary.html | 216 + .../commons/collections/package-tree.html | 188 + .../commons/collections/package-use.html | 219 + .../apidocs/overview-frame.html | 53 + .../apidocs/overview-summary.html | 193 + .../apidocs/overview-tree.html | 254 + .../apidocs/package-list | 6 + .../commons-beanutils-1.8.3/apidocs/packages | 6 + .../apidocs/resources/inherit.gif | Bin 0 -> 57 bytes .../apidocs/serialized-form.html | 1215 +++++ .../commons/beanutils/BasicDynaBean.html | 501 ++ .../commons/beanutils/BasicDynaClass.html | 370 ++ .../BeanAccessLanguageException.html | 114 + .../commons/beanutils/BeanComparator.html | 281 + .../commons/beanutils/BeanMap.Entry.html | 933 ++++ .../org/apache/commons/beanutils/BeanMap.html | 933 ++++ .../commons/beanutils/BeanPredicate.html | 191 + .../BeanPropertyValueChangeClosure.html | 305 ++ .../BeanPropertyValueEqualsPredicate.html | 356 ++ .../BeanToPropertyValueTransformer.html | 284 + .../apache/commons/beanutils/BeanUtils.html | 571 ++ .../commons/beanutils/BeanUtilsBean.html | 1177 +++++ .../commons/beanutils/BeanUtilsBean2.html | 141 + .../commons/beanutils/ConstructorUtils.html | 502 ++ .../beanutils/ContextClassLoaderLocal.html | 282 + .../beanutils/ConversionException.html | 160 + .../commons/beanutils/ConvertUtils.html | 427 ++ .../commons/beanutils/ConvertUtilsBean.html | 942 ++++ .../commons/beanutils/ConvertUtilsBean2.html | 141 + .../apache/commons/beanutils/Converter.html | 124 + .../beanutils/ConvertingWrapDynaBean.html | 148 + .../apache/commons/beanutils/DynaBean.html | 240 + .../beanutils/DynaBeanMapDecorator.html | 460 ++ .../apache/commons/beanutils/DynaClass.html | 161 + .../commons/beanutils/DynaProperty.html | 435 ++ .../commons/beanutils/LazyDynaBean.html | 998 ++++ .../commons/beanutils/LazyDynaClass.html | 423 ++ .../commons/beanutils/LazyDynaList.html | 759 +++ .../apache/commons/beanutils/LazyDynaMap.html | 547 ++ .../beanutils/MappedPropertyDescriptor.html | 601 +++ .../apache/commons/beanutils/MethodUtils.html | 1428 +++++ .../commons/beanutils/MutableDynaClass.html | 190 + .../beanutils/NestedNullException.html | 113 + .../commons/beanutils/PropertyUtils.html | 960 ++++ .../commons/beanutils/PropertyUtilsBean.html | 2317 +++++++++ .../commons/beanutils/ResultSetDynaClass.html | 315 ++ .../commons/beanutils/ResultSetIterator.html | 422 ++ .../commons/beanutils/RowSetDynaClass.html | 381 ++ .../commons/beanutils/WrapDynaBean.html | 447 ++ .../commons/beanutils/WrapDynaClass.html | 485 ++ .../converters/AbstractArrayConverter.html | 282 + .../converters/AbstractConverter.html | 524 ++ .../beanutils/converters/ArrayConverter.html | 550 ++ .../converters/BigDecimalConverter.html | 135 + .../converters/BigIntegerConverter.html | 135 + .../converters/BooleanArrayConverter.html | 311 ++ .../converters/BooleanConverter.html | 307 ++ .../converters/ByteArrayConverter.html | 212 + .../beanutils/converters/ByteConverter.html | 133 + .../converters/CalendarConverter.html | 133 + .../converters/CharacterArrayConverter.html | 213 + .../converters/CharacterConverter.html | 153 + .../beanutils/converters/ClassConverter.html | 169 + .../beanutils/converters/ConverterFacade.html | 140 + .../beanutils/converters/DateConverter.html | 133 + .../converters/DateTimeConverter.html | 694 +++ .../converters/DoubleArrayConverter.html | 212 + .../beanutils/converters/DoubleConverter.html | 133 + .../beanutils/converters/FileConverter.html | 142 + .../converters/FloatArrayConverter.html | 213 + .../beanutils/converters/FloatConverter.html | 133 + .../converters/IntegerArrayConverter.html | 213 + .../converters/IntegerConverter.html | 133 + .../converters/LongArrayConverter.html | 213 + .../beanutils/converters/LongConverter.html | 133 + .../beanutils/converters/NumberConverter.html | 623 +++ .../converters/ShortArrayConverter.html | 213 + .../beanutils/converters/ShortConverter.html | 133 + .../converters/SqlDateConverter.html | 135 + .../converters/SqlTimeConverter.html | 159 + .../converters/SqlTimestampConverter.html | 158 + .../converters/StringArrayConverter.html | 236 + .../beanutils/converters/StringConverter.html | 159 + .../beanutils/converters/URLConverter.html | 142 + .../beanutils/expression/DefaultResolver.html | 339 ++ .../beanutils/expression/Resolver.html | 231 + .../beanutils/locale/BaseLocaleConverter.html | 311 ++ .../locale/LocaleBeanUtils.Descriptor.html | 841 +++ .../beanutils/locale/LocaleBeanUtils.html | 841 +++ .../LocaleBeanUtilsBean.Descriptor.html | 1125 ++++ .../beanutils/locale/LocaleBeanUtilsBean.html | 1125 ++++ .../beanutils/locale/LocaleConvertUtils.html | 414 ++ .../locale/LocaleConvertUtilsBean.html | 632 +++ .../beanutils/locale/LocaleConverter.html | 113 + .../converters/BigDecimalLocaleConverter.html | 298 ++ .../converters/BigIntegerLocaleConverter.html | 303 ++ .../converters/ByteLocaleConverter.html | 290 ++ .../converters/DateLocaleConverter.html | 450 ++ .../converters/DecimalLocaleConverter.html | 321 ++ .../converters/DoubleLocaleConverter.html | 293 ++ .../converters/FloatLocaleConverter.html | 292 ++ .../converters/IntegerLocaleConverter.html | 290 ++ .../converters/LongLocaleConverter.html | 292 ++ .../converters/ShortLocaleConverter.html | 299 ++ .../converters/SqlDateLocaleConverter.html | 287 ++ .../converters/SqlTimeLocaleConverter.html | 286 + .../SqlTimestampLocaleConverter.html | 285 + .../converters/StringLocaleConverter.html | 357 ++ .../commons/collections/ArrayStack.html | 266 + .../apache/commons/collections/Buffer.html | 135 + .../collections/BufferUnderflowException.html | 143 + .../commons/collections/FastHashMap.html | 786 +++ .../apidocs/stylesheet.css | 29 + .../commons-beanutils-1.8.3-javadoc.jar | Bin 0 -> 1342391 bytes .../commons-beanutils-1.8.3-sources.jar | Bin 0 -> 296761 bytes .../commons-beanutils-1.8.3.jar | Bin 0 -> 232019 bytes ...mmons-beanutils-bean-collections-1.8.3.jar | Bin 0 -> 26574 bytes .../commons-beanutils-core-1.8.3.jar | Bin 0 -> 206711 bytes .../commons-logging-1.1.1/LICENSE.txt | 202 + .../commons-logging-1.1.1/NOTICE.txt | 6 + .../commons-logging-1.1.1/RELEASE-NOTES.txt | 166 + .../commons-logging-1.1.1-javadoc.jar | Bin 0 -> 141401 bytes .../commons-logging-1.1.1-sources.jar | Bin 0 -> 74976 bytes .../commons-logging-1.1.1.jar | Bin 0 -> 60841 bytes .../commons-logging-adapters-1.1.1.jar | Bin 0 -> 26520 bytes .../commons-logging-api-1.1.1.jar | Bin 0 -> 52313 bytes .../commons-logging-tests.jar | Bin 0 -> 111279 bytes .../site/RELEASE-NOTES.txt | 166 + .../site/apidocs/allclasses-frame.html | 57 + .../site/apidocs/allclasses-noframe.html | 57 + .../site/apidocs/constant-values.html | 323 ++ .../site/apidocs/deprecated-list.html | 189 + .../site/apidocs/help-doc.html | 194 + .../site/apidocs/index-all.html | 1248 +++++ .../site/apidocs/index.html | 27 + .../site/apidocs/options | 16 + .../org/apache/commons/logging/Log.html | 662 +++ .../logging/LogConfigurationException.html | 369 ++ .../apache/commons/logging/LogFactory.html | 1246 +++++ .../org/apache/commons/logging/LogSource.html | 511 ++ .../apache/commons/logging/class-use/Log.html | 350 ++ .../class-use/LogConfigurationException.html | 308 ++ .../commons/logging/class-use/LogFactory.html | 248 + .../commons/logging/class-use/LogSource.html | 137 + .../commons/logging/impl/AvalonLogger.html | 834 +++ .../logging/impl/Jdk13LumberjackLogger.html | 803 +++ .../commons/logging/impl/Jdk14Logger.html | 803 +++ .../commons/logging/impl/Log4JLogger.html | 776 +++ .../commons/logging/impl/LogFactoryImpl.html | 1066 ++++ .../commons/logging/impl/LogKitLogger.html | 785 +++ .../apache/commons/logging/impl/NoOpLog.html | 716 +++ .../logging/impl/ServletContextCleaner.html | 313 ++ .../commons/logging/impl/SimpleLog.html | 1292 +++++ .../commons/logging/impl/WeakHashtable.html | 608 +++ .../logging/impl/class-use/AvalonLogger.html | 137 + .../impl/class-use/Jdk13LumberjackLogger.html | 137 + .../logging/impl/class-use/Jdk14Logger.html | 137 + .../logging/impl/class-use/Log4JLogger.html | 137 + .../impl/class-use/LogFactoryImpl.html | 137 + .../logging/impl/class-use/LogKitLogger.html | 137 + .../logging/impl/class-use/NoOpLog.html | 137 + .../impl/class-use/ServletContextCleaner.html | 137 + .../logging/impl/class-use/SimpleLog.html | 137 + .../logging/impl/class-use/WeakHashtable.html | 137 + .../commons/logging/impl/package-frame.html | 51 + .../commons/logging/impl/package-summary.html | 218 + .../commons/logging/impl/package-tree.html | 161 + .../commons/logging/impl/package-use.html | 137 + .../apache/commons/logging/package-frame.html | 57 + .../commons/logging/package-summary.html | 433 ++ .../apache/commons/logging/package-tree.html | 158 + .../apache/commons/logging/package-use.html | 214 + .../site/apidocs/overview-frame.html | 45 + .../site/apidocs/overview-summary.html | 154 + .../site/apidocs/overview-tree.html | 172 + .../site/apidocs/package-list | 2 + .../site/apidocs/packages | 2 + .../site/apidocs/packages.html | 38 + .../site/apidocs/resources/inherit.gif | Bin 0 -> 57 bytes .../site/apidocs/serialized-form.html | 429 ++ .../site/apidocs/stylesheet.css | 29 + .../commons-logging-1.1.1/site/building.html | 378 ++ .../site/clirr-report.html | 352 ++ .../site/css/maven-base.css | 148 + .../site/css/maven-theme.css | 921 ++++ .../commons-logging-1.1.1/site/css/print.css | 7 + .../commons-logging-1.1.1/site/css/site.css | 16 + .../commons-logging-1.1.1/site/cvs-usage.html | 351 ++ .../site/dependencies.html | 357 ++ .../commons-logging-1.1.1/site/guide.html | 1150 +++++ .../site/images/collapsed.gif | Bin 0 -> 53 bytes .../site/images/expanded.gif | Bin 0 -> 52 bytes .../site/images/external-classic.png | Bin 0 -> 956 bytes .../site/images/help_logo.gif | Bin 0 -> 2113 bytes .../images/icon_arrowfolderclosed1_sml.gif | Bin 0 -> 441 bytes .../site/images/icon_arrowfolderopen2_sml.gif | Bin 0 -> 664 bytes .../site/images/icon_arrowwaste1_sml.gif | Bin 0 -> 606 bytes .../site/images/icon_arrowwaste2_sml.gif | Bin 0 -> 609 bytes .../site/images/icon_doc_lrg.gif | Bin 0 -> 1335 bytes .../site/images/icon_doc_sml.gif | Bin 0 -> 355 bytes .../site/images/icon_error_lrg.gif | Bin 0 -> 1531 bytes .../site/images/icon_error_sml.gif | Bin 0 -> 1010 bytes .../site/images/icon_folder_lrg.gif | Bin 0 -> 1548 bytes .../site/images/icon_folder_sml.gif | Bin 0 -> 634 bytes .../site/images/icon_help_sml.gif | Bin 0 -> 1019 bytes .../site/images/icon_info_lrg.gif | Bin 0 -> 1383 bytes .../site/images/icon_info_sml.gif | Bin 0 -> 606 bytes .../site/images/icon_members_lrg.gif | Bin 0 -> 1570 bytes .../site/images/icon_sortdown.gif | Bin 0 -> 117 bytes .../site/images/icon_sortup.gif | Bin 0 -> 117 bytes .../site/images/icon_success_lrg.gif | Bin 0 -> 1492 bytes .../site/images/icon_success_sml.gif | Bin 0 -> 990 bytes .../site/images/icon_usergroups_lrg.gif | Bin 0 -> 1520 bytes .../site/images/icon_warning_lrg.gif | Bin 0 -> 1491 bytes .../site/images/icon_warning_sml.gif | Bin 0 -> 576 bytes .../site/images/logo.png | Bin 0 -> 12258 bytes .../site/images/logos/maven-feather.png | Bin 0 -> 2907 bytes .../site/images/newwindow-classic.png | Bin 0 -> 951 bytes .../site/images/nw_maj_rond.gif | Bin 0 -> 51 bytes .../site/images/strich.gif | Bin 0 -> 43 bytes .../site/images/sw_maj_rond.gif | Bin 0 -> 51 bytes .../site/images/sw_med_rond.gif | Bin 0 -> 46 bytes .../commons-logging-1.1.1/site/index.html | 439 ++ .../site/integration.html | 356 ++ .../site/issue-tracking.html | 356 ++ .../site/jdepend-report.html | 352 ++ .../site/junit-report.html | 343 ++ .../commons-logging-1.1.1/site/license.html | 558 ++ .../site/mail-lists.html | 356 ++ .../site/project-info.html | 356 ++ .../site/project-reports.html | 352 ++ .../site/project-summary.html | 357 ++ .../commons-logging-1.1.1/site/proposal.html | 428 ++ .../site/rat-report.html | 542 ++ .../site/source-repository.html | 356 ++ .../site/surefire-report.html | 366 ++ .../commons-logging-1.1.1/site/team-list.html | 371 ++ .../commons-logging-1.1.1/site/tech.html | 949 ++++ .../site/troubleshooting.html | 767 +++ .../site/xref-test/allclasses-frame.html | 167 + .../site/xref-test/index.html | 24 + .../commons/logging/AbstractLogTest.html | 110 + .../apache/commons/logging/AltHashtable.html | 46 + .../commons/logging/AltHashtableTestCase.html | 108 + .../logging/BadHashtablePropertyTestCase.html | 49 + .../logging/BasicOperationsTestCase.html | 135 + .../commons/logging/DummyException.html | 43 + .../apache/commons/logging/LoadTestCase.html | 245 + .../apache/commons/logging/LogTestCase.html | 64 + .../logging/NullClassLoaderTestCase.html | 65 + .../commons/logging/PathableClassLoader.html | 451 ++ .../commons/logging/PathableTestSuite.html | 162 + .../commons/logging/SimpleLogTestCase.html | 60 + .../org/apache/commons/logging/UserClass.html | 57 + .../logging/avalon/AvalonLoggerTestCase.html | 62 + .../commons/logging/avalon/package-frame.html | 24 + .../logging/avalon/package-summary.html | 67 + .../config/FirstPriorityConfigTestCase.html | 139 + .../config/PriorityConfigTestCase.html | 144 + .../commons/logging/config/package-frame.html | 27 + .../logging/config/package-summary.html | 72 + .../logging/impl/WeakHashtableTest.html | 264 + .../commons/logging/impl/package-frame.html | 24 + .../commons/logging/impl/package-summary.html | 67 + .../jdk14/CustomConfigAPITestCase.html | 75 + .../jdk14/CustomConfigFullTestCase.html | 77 + .../logging/jdk14/CustomConfigTestCase.html | 412 ++ .../logging/jdk14/DefaultConfigTestCase.html | 206 + .../commons/logging/jdk14/TestHandler.html | 84 + .../commons/logging/jdk14/package-frame.html | 36 + .../logging/jdk14/package-summary.html | 87 + .../commons/logging/log4j/StandardTests.html | 230 + .../log4j12/ApiClasspathStandardTestCase.html | 65 + .../log4j12/AppClasspathStandardTestCase.html | 60 + .../ChildClasspathStandardTestCase.html | 63 + .../log4j/log4j12/Log4j12StandardTests.html | 56 + .../ParentClasspathStandardTestCase.html | 62 + .../logging/log4j/log4j12/TestAppender.html | 94 + .../logging/log4j/log4j12/package-frame.html | 39 + .../log4j/log4j12/package-summary.html | 92 + .../commons/logging/log4j/package-frame.html | 27 + .../logging/log4j/package-summary.html | 72 + .../logging/logkit/StandardTestCase.html | 180 + .../commons/logging/logkit/package-frame.html | 24 + .../logging/logkit/package-summary.html | 67 + .../commons/logging/noop/NoOpLogTestCase.html | 117 + .../commons/logging/noop/package-frame.html | 24 + .../commons/logging/noop/package-summary.html | 67 + .../apache/commons/logging/package-frame.html | 63 + .../commons/logging/package-summary.html | 132 + .../logging/pathable/ChildFirstTestCase.html | 331 ++ .../logging/pathable/GeneralTestCase.html | 134 + .../logging/pathable/ParentFirstTestCase.html | 322 ++ .../logging/pathable/package-frame.html | 30 + .../logging/pathable/package-summary.html | 77 + .../logging/security/MockSecurityManager.html | 152 + .../security/SecurityAllowedTestCase.html | 149 + .../security/SecurityForbiddenTestCase.html | 144 + .../logging/security/package-frame.html | 33 + .../logging/security/package-summary.html | 82 + .../logging/servlet/BasicServletTestCase.html | 86 + .../logging/servlet/package-frame.html | 24 + .../logging/servlet/package-summary.html | 67 + .../logging/simple/CustomConfigTestCase.html | 291 ++ .../simple/DateTimeCustomConfigTestCase.html | 119 + .../logging/simple/DecoratedSimpleLog.html | 115 + .../logging/simple/DefaultConfigTestCase.html | 263 + .../commons/logging/simple/LogRecord.html | 52 + .../commons/logging/simple/package-frame.html | 36 + .../logging/simple/package-summary.html | 87 + .../commons/logging/tccl/BadTCCLTestCase.html | 63 + .../logging/tccl/NullTCCLTestCase.html | 60 + .../commons/logging/tccl/custom/MyLog.html | 58 + .../logging/tccl/custom/MyLogFactoryImpl.html | 46 + .../logging/tccl/custom/package-frame.html | 27 + .../logging/tccl/custom/package-summary.html | 72 + .../tccl/log/TcclDisabledTestCase.html | 174 + .../logging/tccl/log/TcclEnabledTestCase.html | 169 + .../logging/tccl/log/package-frame.html | 27 + .../logging/tccl/log/package-summary.html | 72 + .../tccl/logfactory/TcclDisabledTestCase.html | 170 + .../tccl/logfactory/TcclEnabledTestCase.html | 161 + .../tccl/logfactory/package-frame.html | 27 + .../tccl/logfactory/package-summary.html | 72 + .../commons/logging/tccl/package-frame.html | 27 + .../commons/logging/tccl/package-summary.html | 72 + .../site/xref-test/overview-frame.html | 73 + .../site/xref-test/overview-summary.html | 144 + .../site/xref-test/stylesheet.css | 116 + .../site/xref/allclasses-frame.html | 68 + .../site/xref/index.html | 24 + .../xref/org/apache/commons/logging/Log.html | 260 + .../logging/LogConfigurationException.html | 112 + .../apache/commons/logging/LogFactory.html | 1838 +++++++ .../org/apache/commons/logging/LogSource.html | 276 + .../commons/logging/impl/AvalonLogger.html | 306 ++ .../logging/impl/Jdk13LumberjackLogger.html | 349 ++ .../commons/logging/impl/Jdk14Logger.html | 318 ++ .../commons/logging/impl/Log4JLogger.html | 356 ++ .../commons/logging/impl/LogFactoryImpl.html | 1514 ++++++ .../commons/logging/impl/LogKitLogger.html | 308 ++ .../apache/commons/logging/impl/NoOpLog.html | 121 + .../logging/impl/ServletContextCleaner.html | 152 + .../commons/logging/impl/SimpleLog.html | 735 +++ .../commons/logging/impl/WeakHashtable.html | 492 ++ .../commons/logging/impl/package-frame.html | 60 + .../commons/logging/impl/package-summary.html | 127 + .../apache/commons/logging/package-frame.html | 33 + .../commons/logging/package-summary.html | 82 + .../site/xref/overview-frame.html | 28 + .../site/xref/overview-summary.html | 69 + .../site/xref/stylesheet.css | 116 + store_v1.0.sql | 157 + 591 files changed, 176779 insertions(+) create mode 100644 "W3CSchool\345\205\250\345\245\227Web\345\274\200\345\217\221\346\211\213\345\206\214.chw" create mode 100644 "W3School\347\246\273\347\272\277\346\211\213\345\206\214(2015.07.17).chw" create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/LICENSE.txt create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/NOTICE.txt create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/RELEASE-NOTES.txt create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-noframe.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/constant-values.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/deprecated-list.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/help-doc.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index-all.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/options create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanAccessLanguageException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanComparator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.Entry.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPredicate.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean2.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConstructorUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ContextClassLoaderLocal.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConversionException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean2.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/Converter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertingWrapDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBeanMapDecorator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaProperty.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaList.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MappedPropertyDescriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MethodUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MutableDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/NestedNullException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetIterator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/RowSetDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanAccessLanguageException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanComparator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.Entry.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPredicate.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueChangeClosure.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueEqualsPredicate.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanToPropertyValueTransformer.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean2.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConstructorUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ContextClassLoaderLocal.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConversionException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean2.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/Converter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertingWrapDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBeanMapDecorator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaProperty.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaList.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MappedPropertyDescriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MethodUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MutableDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/NestedNullException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetIterator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/RowSetDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigDecimalConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigIntegerConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CalendarConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ClassConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ConverterFacade.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateTimeConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FileConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/NumberConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlDateConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimeConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimestampConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/URLConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigDecimalConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigIntegerConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CalendarConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ClassConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ConverterFacade.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateTimeConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FileConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/NumberConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlDateConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimeConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimestampConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/URLConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-use.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/DefaultResolver.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/Resolver.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/DefaultResolver.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/Resolver.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-use.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/BaseLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/BaseLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.Descriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.Descriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigDecimalLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigIntegerLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ByteLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DateLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DecimalLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DoubleLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/FloatLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/IntegerLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/LongLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ShortLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlDateLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimeLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimestampLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/StringLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-use.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-use.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-use.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/ArrayStack.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/Buffer.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/BufferUnderflowException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/FastHashMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/ArrayStack.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/Buffer.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/BufferUnderflowException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/FastHashMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-use.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-frame.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-summary.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-tree.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/package-list create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/packages create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/resources/inherit.gif create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/serialized-form.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanAccessLanguageException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanComparator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.Entry.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPredicate.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean2.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConstructorUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ContextClassLoaderLocal.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConversionException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean2.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/Converter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertingWrapDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBeanMapDecorator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaProperty.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaList.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MappedPropertyDescriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MethodUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MutableDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/NestedNullException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetIterator.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/RowSetDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaClass.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigDecimalConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigIntegerConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CalendarConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ClassConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ConverterFacade.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateTimeConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FileConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/NumberConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlDateConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimeConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimestampConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringArrayConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/URLConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/DefaultResolver.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/Resolver.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/BaseLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtils.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/ArrayStack.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/Buffer.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/BufferUnderflowException.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/FastHashMap.html create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/stylesheet.css create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3-javadoc.jar create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3-sources.jar create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3.jar create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-bean-collections-1.8.3.jar create mode 100644 beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-core-1.8.3.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/LICENSE.txt create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/NOTICE.txt create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/RELEASE-NOTES.txt create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1-javadoc.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1-sources.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-adapters-1.1.1.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-api-1.1.1.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-tests.jar create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/RELEASE-NOTES.txt create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-noframe.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/constant-values.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/deprecated-list.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/help-doc.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index-all.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/options create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/Log.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogConfigurationException.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogFactory.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogSource.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/Log.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogConfigurationException.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogFactory.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogSource.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/AvalonLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk14Logger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Log4JLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogKitLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/NoOpLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/ServletContextCleaner.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/SimpleLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/WeakHashtable.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/AvalonLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk13LumberjackLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk14Logger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Log4JLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogFactoryImpl.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogKitLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/NoOpLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/ServletContextCleaner.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/SimpleLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/WeakHashtable.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-tree.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-use.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-tree.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-use.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-tree.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/package-list create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/resources/inherit.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/serialized-form.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/stylesheet.css create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/building.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/clirr-report.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-base.css create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-theme.css create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/print.css create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/site.css create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/cvs-usage.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/dependencies.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/guide.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/collapsed.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/expanded.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/external-classic.png create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/help_logo.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowfolderclosed1_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowfolderopen2_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowwaste1_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowwaste2_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_doc_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_doc_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_error_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_error_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_folder_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_folder_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_help_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_info_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_info_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_members_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_sortdown.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_sortup.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_success_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_success_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_usergroups_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_warning_lrg.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_warning_sml.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/logo.png create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/logos/maven-feather.png create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/newwindow-classic.png create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/nw_maj_rond.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/strich.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/sw_maj_rond.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/sw_med_rond.gif create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/index.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/integration.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/issue-tracking.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/jdepend-report.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/junit-report.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/license.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/mail-lists.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-info.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-reports.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/proposal.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/rat-report.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/source-repository.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/surefire-report.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/team-list.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/tech.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/troubleshooting.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/allclasses-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/index.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AbstractLogTest.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtable.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtableTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BadHashtablePropertyTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BasicOperationsTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/DummyException.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LoadTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LogTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/NullClassLoaderTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableClassLoader.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableTestSuite.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/SimpleLogTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/UserClass.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/AvalonLoggerTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/FirstPriorityConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/PriorityConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/WeakHashtableTest.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigAPITestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigFullTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/DefaultConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/TestHandler.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/StandardTests.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ApiClasspathStandardTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/AppClasspathStandardTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ChildClasspathStandardTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/Log4j12StandardTests.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ParentClasspathStandardTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/TestAppender.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/StandardTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/NoOpLogTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ChildFirstTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/GeneralTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ParentFirstTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/MockSecurityManager.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityAllowedTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityForbiddenTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/BasicServletTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/CustomConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DateTimeCustomConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DecoratedSimpleLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DefaultConfigTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/LogRecord.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/BadTCCLTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/NullTCCLTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLogFactoryImpl.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclDisabledTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclEnabledTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclDisabledTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclEnabledTestCase.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/stylesheet.css create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/allclasses-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/index.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/Log.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogConfigurationException.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogFactory.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogSource.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/AvalonLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk14Logger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Log4JLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogFactoryImpl.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogKitLogger.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/NoOpLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/ServletContextCleaner.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/SimpleLog.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/WeakHashtable.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-frame.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-summary.html create mode 100644 beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/stylesheet.css create mode 100644 store_v1.0.sql diff --git "a/W3CSchool\345\205\250\345\245\227Web\345\274\200\345\217\221\346\211\213\345\206\214.chw" "b/W3CSchool\345\205\250\345\245\227Web\345\274\200\345\217\221\346\211\213\345\206\214.chw" new file mode 100644 index 0000000000000000000000000000000000000000..f629dca29eac3e9fb63dfdf39075389520289c64 GIT binary patch literal 594468 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%0Ds8h%;#5mi^ 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 A+yDRo literal 0 HcmV?d00001 diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/LICENSE.txt b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/NOTICE.txt b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/NOTICE.txt new file mode 100644 index 0000000..95f3878 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/NOTICE.txt @@ -0,0 +1,5 @@ +Apache Commons BeanUtils +Copyright 2000-2010 The Apache Software Foundation + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/RELEASE-NOTES.txt b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/RELEASE-NOTES.txt new file mode 100644 index 0000000..220841c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/RELEASE-NOTES.txt @@ -0,0 +1,58 @@ +$Id: RELEASE-NOTES.txt 926529 2010-03-23 11:44:24Z niallp $ + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Commons BeanUtils Package + Version 1.8.3 + Release Notes + +INTRODUCTION: +============ + +This document contains the release notes for this version of the Commons +BeanUtils package, and highlights changes since the previous version. + +For more information on Commons BeanUtils, see +o http://commons.apache.org/beanutils/ + +Compatibility with 1.8.2 +======================== +BeanUtils 1.8.3 is binary compatible release with Beanutils 1.8.2, containing only bug fixes. + +BeanUtils 1.8.3 requires a minimum of JDK 1.3. + +Memory Leak +=========== +A memory leak was found in BeanUtils 1.7.0 (see BEANUTILS-291) which was fixed +in BeanUtils 1.8.0 for JDK 1.5+. + +Testing of BeanUtils 1.8.1 revealed that the leak still appears to exist +in IBM's JDK 1.6 implementation. + + +see http://issues.apache.org/jira/browse/BEANUTILS-291 + http://issues.apache.org/jira/browse/BEANUTILS-366 + + +BUGS FIXED: +=========== + +The following is a list of the bugs fixed in this release, with their Jira issue number: + + * [BEANUTILS-373] - MethodUtils is not thread safe because WeakFastHashMap which uses WeakHashMap is not thread-safe + * [BEANUTILS-371] - Add constructors which have useColumnLabel parameter to ResultSetDynaClass and RowSetDynaClass + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-frame.html new file mode 100644 index 0000000..dbc0355 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-frame.html @@ -0,0 +1,232 @@ + + + + + + + +All Classes (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +All Classes +
+ + + + + +
AbstractArrayConverter +
+AbstractConverter +
+ArrayConverter +
+ArrayStack +
+BaseLocaleConverter +
+BasicDynaBean +
+BasicDynaClass +
+BeanAccessLanguageException +
+BeanComparator +
+BeanMap +
+BeanMap.Entry +
+BeanPredicate +
+BeanPropertyValueChangeClosure +
+BeanPropertyValueEqualsPredicate +
+BeanToPropertyValueTransformer +
+BeanUtils +
+BeanUtilsBean +
+BeanUtilsBean2 +
+BigDecimalConverter +
+BigDecimalLocaleConverter +
+BigIntegerConverter +
+BigIntegerLocaleConverter +
+BooleanArrayConverter +
+BooleanConverter +
+Buffer +
+BufferUnderflowException +
+ByteArrayConverter +
+ByteConverter +
+ByteLocaleConverter +
+CalendarConverter +
+CharacterArrayConverter +
+CharacterConverter +
+ClassConverter +
+ConstructorUtils +
+ContextClassLoaderLocal +
+ConversionException +
+Converter +
+ConverterFacade +
+ConvertingWrapDynaBean +
+ConvertUtils +
+ConvertUtilsBean +
+ConvertUtilsBean2 +
+DateConverter +
+DateLocaleConverter +
+DateTimeConverter +
+DecimalLocaleConverter +
+DefaultResolver +
+DoubleArrayConverter +
+DoubleConverter +
+DoubleLocaleConverter +
+DynaBean +
+DynaBeanMapDecorator +
+DynaClass +
+DynaProperty +
+FastHashMap +
+FileConverter +
+FloatArrayConverter +
+FloatConverter +
+FloatLocaleConverter +
+IntegerArrayConverter +
+IntegerConverter +
+IntegerLocaleConverter +
+LazyDynaBean +
+LazyDynaClass +
+LazyDynaList +
+LazyDynaMap +
+LocaleBeanUtils +
+LocaleBeanUtils.Descriptor +
+LocaleBeanUtilsBean +
+LocaleConverter +
+LocaleConvertUtils +
+LocaleConvertUtilsBean +
+LongArrayConverter +
+LongConverter +
+LongLocaleConverter +
+MappedPropertyDescriptor +
+MethodUtils +
+MutableDynaClass +
+NestedNullException +
+NumberConverter +
+PropertyUtils +
+PropertyUtilsBean +
+Resolver +
+ResultSetDynaClass +
+ResultSetIterator +
+RowSetDynaClass +
+ShortArrayConverter +
+ShortConverter +
+ShortLocaleConverter +
+SqlDateConverter +
+SqlDateLocaleConverter +
+SqlTimeConverter +
+SqlTimeLocaleConverter +
+SqlTimestampConverter +
+SqlTimestampLocaleConverter +
+StringArrayConverter +
+StringConverter +
+StringLocaleConverter +
+URLConverter +
+WrapDynaBean +
+WrapDynaClass +
+
+ + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-noframe.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-noframe.html new file mode 100644 index 0000000..51ab841 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/allclasses-noframe.html @@ -0,0 +1,232 @@ + + + + + + + +All Classes (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +All Classes +
+ + + + + +
AbstractArrayConverter +
+AbstractConverter +
+ArrayConverter +
+ArrayStack +
+BaseLocaleConverter +
+BasicDynaBean +
+BasicDynaClass +
+BeanAccessLanguageException +
+BeanComparator +
+BeanMap +
+BeanMap.Entry +
+BeanPredicate +
+BeanPropertyValueChangeClosure +
+BeanPropertyValueEqualsPredicate +
+BeanToPropertyValueTransformer +
+BeanUtils +
+BeanUtilsBean +
+BeanUtilsBean2 +
+BigDecimalConverter +
+BigDecimalLocaleConverter +
+BigIntegerConverter +
+BigIntegerLocaleConverter +
+BooleanArrayConverter +
+BooleanConverter +
+Buffer +
+BufferUnderflowException +
+ByteArrayConverter +
+ByteConverter +
+ByteLocaleConverter +
+CalendarConverter +
+CharacterArrayConverter +
+CharacterConverter +
+ClassConverter +
+ConstructorUtils +
+ContextClassLoaderLocal +
+ConversionException +
+Converter +
+ConverterFacade +
+ConvertingWrapDynaBean +
+ConvertUtils +
+ConvertUtilsBean +
+ConvertUtilsBean2 +
+DateConverter +
+DateLocaleConverter +
+DateTimeConverter +
+DecimalLocaleConverter +
+DefaultResolver +
+DoubleArrayConverter +
+DoubleConverter +
+DoubleLocaleConverter +
+DynaBean +
+DynaBeanMapDecorator +
+DynaClass +
+DynaProperty +
+FastHashMap +
+FileConverter +
+FloatArrayConverter +
+FloatConverter +
+FloatLocaleConverter +
+IntegerArrayConverter +
+IntegerConverter +
+IntegerLocaleConverter +
+LazyDynaBean +
+LazyDynaClass +
+LazyDynaList +
+LazyDynaMap +
+LocaleBeanUtils +
+LocaleBeanUtils.Descriptor +
+LocaleBeanUtilsBean +
+LocaleConverter +
+LocaleConvertUtils +
+LocaleConvertUtilsBean +
+LongArrayConverter +
+LongConverter +
+LongLocaleConverter +
+MappedPropertyDescriptor +
+MethodUtils +
+MutableDynaClass +
+NestedNullException +
+NumberConverter +
+PropertyUtils +
+PropertyUtilsBean +
+Resolver +
+ResultSetDynaClass +
+ResultSetIterator +
+RowSetDynaClass +
+ShortArrayConverter +
+ShortConverter +
+ShortLocaleConverter +
+SqlDateConverter +
+SqlDateLocaleConverter +
+SqlTimeConverter +
+SqlTimeLocaleConverter +
+SqlTimestampConverter +
+SqlTimestampLocaleConverter +
+StringArrayConverter +
+StringConverter +
+StringLocaleConverter +
+URLConverter +
+WrapDynaBean +
+WrapDynaClass +
+
+ + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/constant-values.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/constant-values.html new file mode 100644 index 0000000..0d017b2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/constant-values.html @@ -0,0 +1,199 @@ + + + + + + + +Constant Field Values (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+org.apache.*
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
org.apache.commons.beanutils.PropertyUtils
+public static final charINDEXED_DELIM91
+public static final charINDEXED_DELIM293
+public static final charMAPPED_DELIM40
+public static final charMAPPED_DELIM241
+public static final charNESTED_DELIM46
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/deprecated-list.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/deprecated-list.html new file mode 100644 index 0000000..b84ae97 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/deprecated-list.html @@ -0,0 +1,562 @@ + + + + + + + +Deprecated List (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Deprecated Classes
org.apache.commons.beanutils.converters.AbstractArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.BooleanArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.ByteArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.CharacterArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.DoubleArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.FloatArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.IntegerArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
+          moved into LocaleBeanUtils 
org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
+          Property name expressions are now processed by + the configured Resolver implementation and this class + is no longer used by BeanUtils. 
org.apache.commons.beanutils.converters.LongArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.ShortArrayConverter +
+          Replaced by the new ArrayConverter implementation 
org.apache.commons.beanutils.converters.StringArrayConverter +
+          Replaced by the new ArrayConverter implementation 
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Deprecated Fields
org.apache.commons.beanutils.WrapDynaClass.beanClass +
+          No longer initialized, use getBeanClass() method instead 
org.apache.commons.beanutils.BeanMap.defaultTransformers +
+          Use BeanMap.getTypeTransformer(Class) method 
org.apache.commons.beanutils.WrapDynaClass.dynaClasses +
+          The dynaClasses Map will be removed in a subsequent release 
org.apache.commons.beanutils.PropertyUtils.INDEXED_DELIM +
+          The notation used for property name expressions is now + dependant on the Resolver + implementation being used. 
org.apache.commons.beanutils.PropertyUtils.INDEXED_DELIM2 +
+          The notation used for property name expressions is now + dependant on the Resolver + implementation being used. 
org.apache.commons.beanutils.PropertyUtils.MAPPED_DELIM +
+          The notation used for property name expressions is now + dependant on the Resolver + implementation being used. 
org.apache.commons.beanutils.PropertyUtils.MAPPED_DELIM2 +
+          The notation used for property name expressions is now + dependant on the Resolver + implementation being used. 
org.apache.commons.beanutils.PropertyUtils.NESTED_DELIM +
+          The notation used for property name expressions is now + dependant on the Resolver + implementation being used. 
org.apache.commons.beanutils.converters.BooleanConverter.NO_DEFAULT +
+          Use constructors without default value. 
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Deprecated Methods
org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.calculate(Object, String) +
+          Property name expressions are now processed by + the configured Resolver implementation and this method + is no longer used by BeanUtils. 
org.apache.commons.beanutils.locale.LocaleBeanUtils.calculate(Object, String) +
+          moved into LocaleBeanUtilsBean 
org.apache.commons.beanutils.locale.LocaleConvertUtilsBean.create(Locale) +
+          This method will be modified to return a Map in the next release. 
org.apache.commons.beanutils.locale.LocaleConvertUtils.create(Locale) +
+          This method will be modified to return a Map in the next release. 
org.apache.commons.beanutils.PropertyUtils.getDebug() +
+          The debug static property is no longer used 
org.apache.commons.beanutils.BeanUtils.getDebug() +
+          BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class. 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultBoolean() +
+          Register replacement converters for Boolean.TYPE and + Boolean.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultBoolean() +
+          Register replacement converters for Boolean.TYPE and + Boolean.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultByte() +
+          Register replacement converters for Byte.TYPE and + Byte.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultByte() +
+          Register replacement converters for Byte.TYPE and + Byte.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultCharacter() +
+          Register replacement converters for Character.TYPE and + Character.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultCharacter() +
+          Register replacement converters for Character.TYPE and + Character.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultDouble() +
+          Register replacement converters for Double.TYPE and + Double.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultDouble() +
+          Register replacement converters for Double.TYPE and + Double.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultFloat() +
+          Register replacement converters for Float.TYPE and + Float.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultFloat() +
+          Register replacement converters for Float.TYPE and + Float.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultInteger() +
+          Register replacement converters for Integer.TYPE and + Integer.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultInteger() +
+          Register replacement converters for Integer.TYPE and + Integer.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultLong() +
+          Register replacement converters for Long.TYPE and + Long.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultLong() +
+          Register replacement converters for Long.TYPE and + Long.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.getDefaultShort() +
+          Register replacement converters for Short.TYPE and + Short.class instead 
org.apache.commons.beanutils.ConvertUtils.getDefaultShort() +
+          Register replacement converters for Short.TYPE and + Short.class instead 
org.apache.commons.beanutils.PropertyUtilsBean.getMappedPropertyDescriptors(Class) +
+          This method should not be exposed 
org.apache.commons.beanutils.PropertyUtils.getMappedPropertyDescriptors(Class) +
+          This method should not be exposed 
org.apache.commons.beanutils.PropertyUtilsBean.getMappedPropertyDescriptors(Object) +
+          This method should not be exposed 
org.apache.commons.beanutils.PropertyUtils.getMappedPropertyDescriptors(Object) +
+          This method should not be exposed 
org.apache.commons.beanutils.locale.LocaleConvertUtilsBean.lookup(Locale) +
+          This method will be modified to return a Map in the next release. 
org.apache.commons.beanutils.locale.LocaleConvertUtils.lookup(Locale) +
+          This method will be modified to return a Map in the next release. 
org.apache.commons.beanutils.PropertyUtils.setDebug(int) +
+          The debug static property is no longer used 
org.apache.commons.beanutils.BeanUtils.setDebug(int) +
+          BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class. 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultBoolean(boolean) +
+          Register replacement converters for Boolean.TYPE and + Boolean.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultBoolean(boolean) +
+          Register replacement converters for Boolean.TYPE and + Boolean.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultByte(byte) +
+          Register replacement converters for Byte.TYPE and + Byte.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultByte(byte) +
+          Register replacement converters for Byte.TYPE and + Byte.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultCharacter(char) +
+          Register replacement converters for Character.TYPE and + Character.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultCharacter(char) +
+          Register replacement converters for Character.TYPE and + Character.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultDouble(double) +
+          Register replacement converters for Double.TYPE and + Double.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultDouble(double) +
+          Register replacement converters for Double.TYPE and + Double.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultFloat(float) +
+          Register replacement converters for Float.TYPE and + Float.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultFloat(float) +
+          Register replacement converters for Float.TYPE and + Float.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultInteger(int) +
+          Register replacement converters for Integer.TYPE and + Integer.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultInteger(int) +
+          Register replacement converters for Integer.TYPE and + Integer.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultLong(long) +
+          Register replacement converters for Long.TYPE and + Long.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultLong(long) +
+          Register replacement converters for Long.TYPE and + Long.class instead 
org.apache.commons.beanutils.ConvertUtilsBean.setDefaultShort(short) +
+          Register replacement converters for Short.TYPE and + Short.class instead 
org.apache.commons.beanutils.ConvertUtils.setDefaultShort(short) +
+          Register replacement converters for Short.TYPE and + Short.class instead 
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/help-doc.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/help-doc.html new file mode 100644 index 0000000..7db4226 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/help-doc.html @@ -0,0 +1,224 @@ + + + + + + + +API Help (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Overview

+
+ +

+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Use

+
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index-all.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index-all.html new file mode 100644 index 0000000..8fcdbcf --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index-all.html @@ -0,0 +1,4582 @@ + + + + + + + +Index (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W
+

+A

+
+
AbstractArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
AbstractArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. Create a Converter that will throw a ConversionException + if a conversion error occurs. +
AbstractArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. Create a Converter that will return the specified default value + if a conversion error occurs. +
AbstractConverter - Class in org.apache.commons.beanutils.converters
Base Converter implementation that provides the structure + for handling conversion to and from a specified type.
AbstractConverter() - +Constructor for class org.apache.commons.beanutils.converters.AbstractConverter +
Construct a Converter that throws a + ConversionException if an error occurs. +
AbstractConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.AbstractConverter +
Construct a Converter that returns a default + value if an error occurs. +
add(String) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Add a new dynamic property with no restrictions on data type, + readability, or writeability. +
add(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability. +
add(String, Class, boolean, boolean) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Add a new dynamic property with the specified data type, readability, + and writeability. +
add(DynaProperty) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Add a new dynamic property. +
add(int, Object) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Insert an element at the specified index position. +
add(Object) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Add an element to the List. +
add(String) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Add a new dynamic property with no restrictions on data type, + readability, or writeability. +
add(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability. +
add(String, Class, boolean, boolean) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Add a new dynamic property with the specified data type, readability, + and writeability. +
add(DynaProperty) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Add a new dynamic property. +
add(String) - +Method in interface org.apache.commons.beanutils.MutableDynaClass +
Add a new dynamic property with no restrictions on data type, + readability, or writeability. +
add(String, Class) - +Method in interface org.apache.commons.beanutils.MutableDynaClass +
Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability. +
add(String, Class, boolean, boolean) - +Method in interface org.apache.commons.beanutils.MutableDynaClass +
Add a new dynamic property with the specified data type, readability, + and writeability. +
addAll(Collection) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Add all the elements from a Collection to the list. +
addAll(int, Collection) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Insert all the elements from a Collection into the + list at a specified position. +
advance() - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Advance the result set to the next row, if there is not a current + row (and if we are not already at eof). +
ArrayConverter - Class in org.apache.commons.beanutils.converters
Generic Converter implementaion that handles conversion + to and from array objects.
ArrayConverter(Class, Converter) - +Constructor for class org.apache.commons.beanutils.converters.ArrayConverter +
Construct an array Converter with the specified + component Converter that throws a + ConversionException if an error occurs. +
ArrayConverter(Class, Converter, int) - +Constructor for class org.apache.commons.beanutils.converters.ArrayConverter +
Construct an array Converter with the specified + component Converter that returns a default + array of the specified size (or null) if an error occurs. +
ArrayStack - Class in org.apache.commons.collections
An implementation of the Stack API that is based on an + ArrayList instead of a Vector, so it is not + synchronized to protect against multi-threaded access.
ArrayStack() - +Constructor for class org.apache.commons.collections.ArrayStack +
Constructs a new empty ArrayStack. +
ArrayStack(int) - +Constructor for class org.apache.commons.collections.ArrayStack +
Constructs a new empty ArrayStack with an initial size. +
+
+

+B

+
+
BaseLocaleConverter - Class in org.apache.commons.beanutils.locale
The base class for all standart type locale-sensitive converters.
BaseLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Create a LocaleConverter that will throw a ConversionException + if a conversion error occurs. +
BaseLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Create a LocaleConverter that will throw a ConversionException + if a conversion error occurs. +
BaseLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Create a LocaleConverter that will return the specified default value + if a conversion error occurs. +
BaseLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Create a LocaleConverter that will return the specified default value + if a conversion error occurs. +
BasicDynaBean - Class in org.apache.commons.beanutils
Minimal implementation of the DynaBean interface.
BasicDynaBean(DynaClass) - +Constructor for class org.apache.commons.beanutils.BasicDynaBean +
Construct a new DynaBean associated with the specified + DynaClass instance. +
BasicDynaClass - Class in org.apache.commons.beanutils
Minimal implementation of the DynaClass interface.
BasicDynaClass() - +Constructor for class org.apache.commons.beanutils.BasicDynaClass +
Construct a new BasicDynaClass with default parameters. +
BasicDynaClass(String, Class) - +Constructor for class org.apache.commons.beanutils.BasicDynaClass +
Construct a new BasicDynaClass with the specified parameters. +
BasicDynaClass(String, Class, DynaProperty[]) - +Constructor for class org.apache.commons.beanutils.BasicDynaClass +
Construct a new BasicDynaClass with the specified parameters. +
BeanAccessLanguageException - Exception in org.apache.commons.beanutils
Thrown to indicate that the Bean Access Language cannot execute query + against given bean.
BeanAccessLanguageException() - +Constructor for exception org.apache.commons.beanutils.BeanAccessLanguageException +
Constructs a BeanAccessLanguageException without a detail message. +
BeanAccessLanguageException(String) - +Constructor for exception org.apache.commons.beanutils.BeanAccessLanguageException +
Constructs a BeanAccessLanguageException without a detail message. +
beanClass - +Variable in class org.apache.commons.beanutils.WrapDynaClass +
Deprecated. No longer initialized, use getBeanClass() method instead +
BeanComparator - Class in org.apache.commons.beanutils
+ This comparator compares two beans by the specified bean property.
BeanComparator() - +Constructor for class org.apache.commons.beanutils.BeanComparator +
Constructs a Bean Comparator without a property set. +
BeanComparator(String) - +Constructor for class org.apache.commons.beanutils.BeanComparator +
Constructs a property-based comparator for beans. +
BeanComparator(String, Comparator) - +Constructor for class org.apache.commons.beanutils.BeanComparator +
Constructs a property-based comparator for beans. +
BeanMap - Class in org.apache.commons.beanutils
An implementation of Map for JavaBeans which uses introspection to + get and put properties in the bean.
BeanMap() - +Constructor for class org.apache.commons.beanutils.BeanMap +
Constructs a new empty BeanMap. +
BeanMap(Object) - +Constructor for class org.apache.commons.beanutils.BeanMap +
Constructs a new BeanMap that operates on the + specified bean. +
BeanMap.Entry - Class in org.apache.commons.beanutils
Map entry used by BeanMap.
BeanMap.Entry(BeanMap, Object, Object) - +Constructor for class org.apache.commons.beanutils.BeanMap.Entry +
Constructs a new Entry. +
BeanPredicate - Class in org.apache.commons.beanutils
Predicate implementation that applies the given Predicate + to the result of calling the given property getter.
BeanPredicate(String, Predicate) - +Constructor for class org.apache.commons.beanutils.BeanPredicate +
Constructs a BeanPredicate that applies the given + Predicate to the named property value. +
BeanPropertyValueChangeClosure - Class in org.apache.commons.beanutils
Closure that sets a property.
BeanPropertyValueChangeClosure(String, Object) - +Constructor for class org.apache.commons.beanutils.BeanPropertyValueChangeClosure +
Constructor which takes the name of the property to be changed, the new value to set + the property to, and assumes ignoreNull to be false. +
BeanPropertyValueChangeClosure(String, Object, boolean) - +Constructor for class org.apache.commons.beanutils.BeanPropertyValueChangeClosure +
Constructor which takes the name of the property to be changed, the new value to set + the property to and a boolean which determines whether null objects in the + property path will genenerate an IllegalArgumentException or not. +
BeanPropertyValueEqualsPredicate - Class in org.apache.commons.beanutils
Predicate that evaluates a property value against a specified value.
BeanPropertyValueEqualsPredicate(String, Object) - +Constructor for class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Constructor which takes the name of the property, its expected value to be used in evaluation, + and assumes ignoreNull to be false. +
BeanPropertyValueEqualsPredicate(String, Object, boolean) - +Constructor for class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Constructor which takes the name of the property, its expected value + to be used in evaluation, and a boolean which determines whether null objects in + the property path will genenerate an IllegalArgumentException or not. +
BeanToPropertyValueTransformer - Class in org.apache.commons.beanutils
Transformer that outputs a property value.
BeanToPropertyValueTransformer(String) - +Constructor for class org.apache.commons.beanutils.BeanToPropertyValueTransformer +
Constructs a Transformer which does not ignore nulls. +
BeanToPropertyValueTransformer(String, boolean) - +Constructor for class org.apache.commons.beanutils.BeanToPropertyValueTransformer +
Constructs a Transformer and sets ignoreNull. +
BeanUtils - Class in org.apache.commons.beanutils
Utility methods for populating JavaBeans properties via reflection.
BeanUtils() - +Constructor for class org.apache.commons.beanutils.BeanUtils +
  +
BeanUtilsBean - Class in org.apache.commons.beanutils
JavaBean property population methods.
BeanUtilsBean() - +Constructor for class org.apache.commons.beanutils.BeanUtilsBean +
Constructs an instance using new property + and conversion instances. +
BeanUtilsBean(ConvertUtilsBean) - +Constructor for class org.apache.commons.beanutils.BeanUtilsBean +
Constructs an instance using given conversion instances + and new PropertyUtilsBean instance. +
BeanUtilsBean(ConvertUtilsBean, PropertyUtilsBean) - +Constructor for class org.apache.commons.beanutils.BeanUtilsBean +
Constructs an instance using given property and conversion instances. +
BeanUtilsBean2 - Class in org.apache.commons.beanutils
BeanUtilsBean implementation that creates a + ConvertUtilsBean2 and delegates conversion to + ConvertUtilsBean.convert(Object, Class).
BeanUtilsBean2() - +Constructor for class org.apache.commons.beanutils.BeanUtilsBean2 +
Constructs an instance using new property + and conversion instances. +
BigDecimal_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
BigDecimal Zero +
BigDecimalConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.math.BigDecimal objects.
BigDecimalConverter() - +Constructor for class org.apache.commons.beanutils.converters.BigDecimalConverter +
Construct a java.math.BigDecimal Converter that throws + a ConversionException if an error occurs. +
BigDecimalConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.BigDecimalConverter +
Construct a java.math.BigDecimal Converter that returns + a default value if an error occurs. +
BigDecimalLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigDecimalLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigDecimalLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigDecimalLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigDecimalLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigDecimalLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigDecimalLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigDecimalLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigDecimalLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigDecimalLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigDecimalLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigDecimalLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigInteger_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
BigInteger Zero +
BigIntegerConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.math.BigInteger objects.
BigIntegerConverter() - +Constructor for class org.apache.commons.beanutils.converters.BigIntegerConverter +
Construct a java.math.BigInteger Converter that throws + a ConversionException if an error occurs. +
BigIntegerConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.BigIntegerConverter +
Construct a java.math.BigInteger Converter that returns + a default value if an error occurs. +
BigIntegerLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigIntegerLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigIntegerLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigIntegerLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigIntegerLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigIntegerLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
BigIntegerLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigIntegerLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigIntegerLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigIntegerLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigIntegerLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BigIntegerLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
BooleanArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
BooleanArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.BooleanArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
BooleanArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.BooleanArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
BooleanArrayConverter(BooleanConverter, Object) - +Constructor for class org.apache.commons.beanutils.converters.BooleanArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
booleanConverter - +Variable in class org.apache.commons.beanutils.converters.BooleanArrayConverter +
Deprecated. This object is used to perform the conversion of individual strings + into Boolean/boolean values. +
BooleanConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion that handles conversion + to and from Boolean objects.
BooleanConverter() - +Constructor for class org.apache.commons.beanutils.converters.BooleanConverter +
Create a Converter that will throw a ConversionException + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings. +
BooleanConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.BooleanConverter +
Create a Converter that will return the specified default value + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings. +
BooleanConverter(String[], String[]) - +Constructor for class org.apache.commons.beanutils.converters.BooleanConverter +
Create a Converter that will throw a ConversionException + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings. +
BooleanConverter(String[], String[], Object) - +Constructor for class org.apache.commons.beanutils.converters.BooleanConverter +
Create a Converter that will return + the specified default value if a conversion error occurs. +
Buffer - Interface in org.apache.commons.collections
Defines a collection that allows objects to be removed in some well-defined order.
BufferUnderflowException - Exception in org.apache.commons.collections
The BufferUnderflowException is used when the buffer is already empty.
BufferUnderflowException() - +Constructor for exception org.apache.commons.collections.BufferUnderflowException +
Constructs a new BufferUnderflowException. +
BufferUnderflowException(String) - +Constructor for exception org.apache.commons.collections.BufferUnderflowException +
Construct a new BufferUnderflowException. +
BufferUnderflowException(String, Throwable) - +Constructor for exception org.apache.commons.collections.BufferUnderflowException +
Construct a new BufferUnderflowException. +
Byte_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Byte Zero +
ByteArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
ByteArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.ByteArrayConverter +
Deprecated. Create a Converter that will + throw a ConversionException if a conversion error occurs. +
ByteArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.ByteArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
ByteConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.lang.Byte objects.
ByteConverter() - +Constructor for class org.apache.commons.beanutils.converters.ByteConverter +
Construct a java.lang.Byte Converter that throws + a ConversionException if an error occurs. +
ByteConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.ByteConverter +
Construct a java.lang.Byte Converter that returns + a default value if an error occurs. +
ByteLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
ByteLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ByteLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ByteLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ByteLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ByteLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ByteLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ByteLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ByteLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ByteLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ByteLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ByteLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ByteLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
+
+

+C

+
+
calculate(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Deprecated. moved into LocaleBeanUtilsBean +
calculate(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this method + is no longer used by BeanUtils. +
CalendarConverter - Class in org.apache.commons.beanutils.converters
DateTimeConverter implementation that handles conversion to + and from java.util.Calendar objects.
CalendarConverter() - +Constructor for class org.apache.commons.beanutils.converters.CalendarConverter +
Construct a java.util.Calendar Converter that throws + a ConversionException if an error occurs. +
CalendarConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.CalendarConverter +
Construct a java.util.Calendar Converter that returns + a default value if an error occurs. +
cause - +Variable in exception org.apache.commons.beanutils.ConversionException +
The root cause of this ConversionException, compatible with + JDK 1.4's extensions to java.lang.Throwable. +
Character_SPACE - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Character Space +
CharacterArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
CharacterArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.CharacterArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
CharacterArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.CharacterArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
CharacterConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion that handles conversion + to and from java.lang.Character objects.
CharacterConverter() - +Constructor for class org.apache.commons.beanutils.converters.CharacterConverter +
Construct a java.lang.Character Converter that throws + a ConversionException if an error occurs. +
CharacterConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.CharacterConverter +
Construct a java.lang.Character Converter that returns + a default value if an error occurs. +
ClassConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion that handles conversion + to and from java.lang.Class objects.
ClassConverter() - +Constructor for class org.apache.commons.beanutils.converters.ClassConverter +
Construct a java.lang.Class Converter that throws + a ConversionException if an error occurs. +
ClassConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.ClassConverter +
Construct a java.lang.Class Converter that returns + a default value if an error occurs. +
clear() - +Method in class org.apache.commons.beanutils.BeanMap +
This method reinitializes the bean map to have default values for the + bean's properties. +
clear() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
clear() operation is not supported. +
clear() - +Static method in class org.apache.commons.beanutils.WrapDynaClass +
Clear our cache of WrapDynaClass instances. +
clear() - +Method in class org.apache.commons.collections.FastHashMap +
Remove all mappings from this map. +
clearCache() - +Static method in class org.apache.commons.beanutils.MethodUtils +
Clear the method cache. +
clearDescriptors() - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Clear any cached property descriptors information for all classes + loaded by any class loaders. +
clearDescriptors() - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Clear any cached property descriptors information for all classes + loaded by any class loaders. +
clone() - +Method in class org.apache.commons.beanutils.BeanMap +
Clone this bean map using the following process: + + + If there is no underlying bean, return a cloned BeanMap without a + bean. +
clone() - +Method in class org.apache.commons.collections.FastHashMap +
Return a shallow copy of this FastHashMap instance. +
cloneBean(Object) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Clone a bean based on the available property getters and setters, + even if the bean class itself does not implement Cloneable. +
cloneBean(Object) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Clone a bean based on the available property getters and setters, + even if the bean class itself does not implement Cloneable. +
compare(Object, Object) - +Method in class org.apache.commons.beanutils.BeanComparator +
Compare two JavaBeans by their shared property. +
constructor - +Variable in class org.apache.commons.beanutils.BasicDynaClass +
The constructor of the dynaBeanClass that we will use + for creating new instances. +
constructorTypes - +Static variable in class org.apache.commons.beanutils.BasicDynaClass +
The method signature of the constructor we will use to create + new DynaBean instances. +
ConstructorUtils - Class in org.apache.commons.beanutils
Utility reflection methods focussed on constructors, modelled after MethodUtils.
ConstructorUtils() - +Constructor for class org.apache.commons.beanutils.ConstructorUtils +
  +
constructorValues - +Variable in class org.apache.commons.beanutils.BasicDynaClass +
The argument values to be passed to the constructore we will use + to create new DynaBean instances. +
contains(String, String) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Does the specified mapped property contain a value for the specified + key value? +
contains(String, String) - +Method in interface org.apache.commons.beanutils.DynaBean +
Does the specified mapped property contain a value for the specified + key value? +
contains(String, String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Does the specified mapped property contain a value for the specified + key value? +
contains(String, String) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Does the specified mapped property contain a value for the specified + key value? +
contains(String, String) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Does the specified mapped property contain a value for the specified + key value? +
containsKey(Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns true if the bean defines a property with the given name. +
containsKey(Object) - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Indicate whether the DynaBean contains a specified + value for one (or more) of its properties. +
containsKey(Object) - +Method in class org.apache.commons.collections.FastHashMap +
Return true if this map contains a mapping for the + specified key. +
containsValue(Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns true if the bean defines a property whose current value is + the given object. +
containsValue(Object) - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Indicates whether the decorated DynaBean contains + a specified value. +
containsValue(Object) - +Method in class org.apache.commons.collections.FastHashMap +
Return true if this map contains one or more keys mapping + to the specified value. +
contentType - +Variable in class org.apache.commons.beanutils.DynaProperty +
The (optional) type of content elements for indexed DynaProperty +
ContextClassLoaderLocal - Class in org.apache.commons.beanutils
An instance of this class represents a value that is provided per (thread) + context classloader.
ContextClassLoaderLocal() - +Constructor for class org.apache.commons.beanutils.ContextClassLoaderLocal +
Construct a context classloader instance +
ConversionException - Exception in org.apache.commons.beanutils
A ConversionException indicates that a call to + Converter.convert() has failed to complete successfully.
ConversionException(String) - +Constructor for exception org.apache.commons.beanutils.ConversionException +
Construct a new exception with the specified message. +
ConversionException(String, Throwable) - +Constructor for exception org.apache.commons.beanutils.ConversionException +
Construct a new exception with the specified message and root cause. +
ConversionException(Throwable) - +Constructor for exception org.apache.commons.beanutils.ConversionException +
Construct a new exception with the specified root cause. +
convert(Object, Class) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Convert the value to an object of the specified class (if + possible). +
convert(Object, Class) - +Method in class org.apache.commons.beanutils.BeanUtilsBean2 +
Convert the value to an object of the specified class (if + possible). +
convert(Class, Object) - +Method in interface org.apache.commons.beanutils.Converter +
Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Convert the input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.BooleanArrayConverter +
Deprecated. Convert the specified input object into an output object of type + array-of-boolean. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.ByteArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.CharacterArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.ConverterFacade +
Convert the input object into an output object of the + specified type by delegating to the underlying Converter + implementation. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.DoubleArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.FloatArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.IntegerArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.LongArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.ShortArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.converters.StringArrayConverter +
Deprecated. Convert the specified input object into an output object of the + specified type. +
convert(Object) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Convert the specified value into a String. +
convert(String, Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Convert the specified value to an object of the specified class (if + possible). +
convert(String[], Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Convert an array of specified values to an array of objects of the + specified class (if possible). +
convert(Object, Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Convert the value to an object of the specified class (if + possible). +
convert(Object) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Convert the specified value into a String. +
convert(String, Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Convert the specified value to an object of the specified class (if + possible). +
convert(String[], Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Convert an array of specified values to an array of objects of the + specified class (if possible). +
convert(Object, Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Convert the value to an object of the specified class (if + possible). +
convert(Object) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean2 +
Delegates to the new ConvertUtilsBean.convert(Object, Class) + method. +
convert(String, Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean2 +
Delegates to the new ConvertUtilsBean.convert(Object, Class) + method. +
convert(String[], Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean2 +
Delegates to the new ConvertUtilsBean.convert(Object, Class) + method. +
convert(Object) - +Method in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Convert the specified locale-sensitive input object into an output object. +
convert(Object, String) - +Method in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Convert the specified locale-sensitive input object into an output object. +
convert(Class, Object) - +Method in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
convert(Class, Object, String) - +Method in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
convert(Class, int, Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Convert the specified value to the required type using the + specified conversion pattern. +
convert(Class, int, Object) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Convert the specified value to the required type. +
convert(Class, int, Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Convert the specified value to the required type using the + specified conversion pattern. +
convert(Class, int, Object) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Convert the specified value to the required type. +
convert(Class, Object, String) - +Method in interface org.apache.commons.beanutils.locale.LocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
convert(Object) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert the specified locale-sensitive value into a String. +
convert(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert the specified locale-sensitive value into a String + using the conversion pattern. +
convert(Object, Locale, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert the specified locale-sensitive value into a String + using the paticular convertion pattern. +
convert(String, Class) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert the specified value to an object of the specified class (if + possible). +
convert(String, Class, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. +
convert(String, Class, Locale, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. +
convert(String[], Class, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern. +
convert(String[], Class) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert an array of specified values to an array of objects of the + specified class (if possible). +
convert(String[], Class, Locale, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern. +
convert(Object) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert the specified locale-sensitive value into a String. +
convert(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert the specified locale-sensitive value into a String + using the conversion pattern. +
convert(Object, Locale, String) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert the specified locale-sensitive value into a String + using the paticular convertion pattern. +
convert(String, Class) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert the specified value to an object of the specified class (if + possible). +
convert(String, Class, String) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. +
convert(String, Class, Locale, String) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. +
convert(String[], Class, String) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern. +
convert(String[], Class) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert an array of specified values to an array of objects of the + specified class (if possible) . +
convert(String[], Class, Locale, String) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern. +
convertArray(Object) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Return the first element from an Array (or Collection) + or the value unchanged if not an Array (or Collection). +
convertArray(Object) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Returns the value unchanged. +
Converter - Interface in org.apache.commons.beanutils
General purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
ConverterFacade - Class in org.apache.commons.beanutils.converters
Provides a facade for Converter implementations + preventing access to any public API in the implementation, + other than that specified by Converter.
ConverterFacade(Converter) - +Constructor for class org.apache.commons.beanutils.converters.ConverterFacade +
Construct a converter which delegates to the specified + Converter implementation. +
ConvertingWrapDynaBean - Class in org.apache.commons.beanutils
Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties, + though this implementation allows type conversion to occur when properties are set.
ConvertingWrapDynaBean(Object) - +Constructor for class org.apache.commons.beanutils.ConvertingWrapDynaBean +
Construct a new DynaBean associated with the specified + JavaBean instance. +
convertToCollection(Class, Object) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Converts non-array values to a Collection prior + to being converted either to an array or a String. +
convertToString(Object) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Convert the input object into a String. +
convertToString(Object) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Handles conversion to a String. +
convertToString(Object) - +Method in class org.apache.commons.beanutils.converters.CharacterConverter +
Convert a java.lang.Class or object into a String. +
convertToString(Object) - +Method in class org.apache.commons.beanutils.converters.ClassConverter +
Convert a java.lang.Class or object into a String. +
convertToString(Object) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Convert an input Date/Calendar object into a String. +
convertToString(Object) - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Convert an input Number object into a String. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Convert the input object into an output object of the + specified type. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Handles conversion to an array of the specified type. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.BooleanConverter +
Convert the specified input object into an output object of the + specified type. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.CharacterConverter +
Convert the input object into a java.lang.Character. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.ClassConverter +
Convert the input object into a java.lang.Class. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Convert the input object into a Date object of the + specified type. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.FileConverter +
Convert the input object into a java.io.File. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Convert the input object into a Number object of the + specified type. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.StringConverter +
Convert the specified input object into an output object of the + specified type. +
convertToType(Class, Object) - +Method in class org.apache.commons.beanutils.converters.URLConverter +
Convert a java.net.URL or object into a String. +
convertType(Class, Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Converts the given value to the given type. +
ConvertUtils - Class in org.apache.commons.beanutils
Utility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.
ConvertUtils() - +Constructor for class org.apache.commons.beanutils.ConvertUtils +
  +
ConvertUtilsBean - Class in org.apache.commons.beanutils
Utility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.
ConvertUtilsBean() - +Constructor for class org.apache.commons.beanutils.ConvertUtilsBean +
Construct a bean with standard converters registered +
ConvertUtilsBean2 - Class in org.apache.commons.beanutils
ConvertUtilsBean implementation that delegates convert() + methods to the new ConvertUtilsBean.convert(Object, Class) method.
ConvertUtilsBean2() - +Constructor for class org.apache.commons.beanutils.ConvertUtilsBean2 +
  +
copy(ResultSet) - +Method in class org.apache.commons.beanutils.RowSetDynaClass +
Copy the column values for each row in the specified + ResultSet into a newly created DynaBean, and add + this bean to the list of DynaBeans that will later by + returned by a call to getRows(). +
copyProperties(Object, Object) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Copy property values from the origin bean to the destination bean + for all cases where the property names are the same. +
copyProperties(Object, Object) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Copy property values from the origin bean to the destination bean + for all cases where the property names are the same. +
copyProperties(Object, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Copy property values from the "origin" bean to the "destination" bean + for all cases where the property names are the same (even though the + actual getter and setter methods might have been customized via + BeanInfo classes). +
copyProperties(Object, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Copy property values from the "origin" bean to the "destination" bean + for all cases where the property names are the same (even though the + actual getter and setter methods might have been customized via + BeanInfo classes). +
copyProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Copy the specified property value to the specified destination bean, + performing any type conversion that is required. +
copyProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Copy the specified property value to the specified destination bean, + performing any type conversion that is required. +
create(Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Deprecated. This method will be modified to return a Map in the next release. +
create(Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Deprecated. This method will be modified to return a Map in the next release. +
createCache() - +Static method in class org.apache.commons.beanutils.BeanUtils +
Create a cache. +
createDynaBean() - +Method in class org.apache.commons.beanutils.RowSetDynaClass +
Create and return a new DynaBean instance to be used for + representing a row in the underlying result set. +
createDynaBeanProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of a 'DynaBean' Property. +
createDynaClass(Class) - +Static method in class org.apache.commons.beanutils.WrapDynaClass +
Create (if necessary) and return a new WrapDynaClass + instance for the specified bean class. +
createIndexedProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of an 'Indexed' Property +
createMappedProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of a 'Mapped' Property +
createNumberProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of a java.lang.Number Property. +
createOtherProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of other Property types +
createPrimitiveProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of a 'Primitive' Property. +
createProperty(String, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Create a new Instance of a Property +
createWriteMethodArguments(Method, Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Creates an array of parameters to pass to the given mutator method. +
current - +Variable in class org.apache.commons.beanutils.ResultSetIterator +
Flag indicating whether the result set is currently positioned at a + row for which we have not yet returned an element in the iteration. +
+
+

+D

+
+
DateConverter - Class in org.apache.commons.beanutils.converters
DateTimeConverter implementation that handles conversion to + and from java.util.Date objects.
DateConverter() - +Constructor for class org.apache.commons.beanutils.converters.DateConverter +
Construct a java.util.Date Converter that throws + a ConversionException if an error occurs. +
DateConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.DateConverter +
Construct a java.util.Date Converter that returns + a default value if an error occurs. +
DateLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DateLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DateLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DateLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DateLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DateLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DateLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DateLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DateLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DateLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DateLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DateLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DateLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DateTimeConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion + that handles conversion to and from date/time objects.
DateTimeConverter() - +Constructor for class org.apache.commons.beanutils.converters.DateTimeConverter +
Construct a Date/Time Converter that throws a + ConversionException if an error occurs. +
DateTimeConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.DateTimeConverter +
Construct a Date/Time Converter that returns a default + value if an error occurs. +
DecimalLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DecimalLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DecimalLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DecimalLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DecimalLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DecimalLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DecimalLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DecimalLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DecimalLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DecimalLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DecimalLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DecimalLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DecimalLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
defaultIndexedProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Creates a new ArrayList for an 'indexed' property + which doesn't exist. +
defaultMappedProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Creates a new HashMap for a 'mapped' property + which doesn't exist. +
DefaultResolver - Class in org.apache.commons.beanutils.expression
Default Property Name Expression Resolver Implementation.
DefaultResolver() - +Constructor for class org.apache.commons.beanutils.expression.DefaultResolver +
Default Constructor. +
defaultTransformers - +Static variable in class org.apache.commons.beanutils.BeanMap +
Deprecated. Use BeanMap.getTypeTransformer(Class) method +
defaultValue - +Variable in class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. The default value specified to our Constructor, if any. +
definePropertyType(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Calculate the property type. +
definePropertyType(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Calculate the property type. +
deregister() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Remove all registered Converters, and re-establish the + standard Converters. +
deregister(Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Remove any registered Converter for the specified destination + Class. +
deregister() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Remove all registered Converters, and re-establish the + standard Converters. +
deregister(Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Remove any registered Converter for the specified destination + Class. +
deregister() - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Remove any registered LocaleConverter. +
deregister(Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Remove any registered LocaleConverter for the specified locale. +
deregister(Class, Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Remove any registered LocaleConverter for the specified locale and Class. +
deregister() - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Remove any registered LocaleConverter. +
deregister(Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Remove any registered LocaleConverter for the specified locale +
deregister(Class, Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Remove any registered LocaleConverter for the specified locale and Class. +
describe(Object) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the entire set of properties for which the specified bean + provides a read method. +
describe(Object) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the entire set of properties for which the specified bean + provides a read method. +
describe(Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the entire set of properties for which the specified bean + provides a read method. +
describe(Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the entire set of properties for which the specified bean + provides a read method. +
descriptors - +Variable in class org.apache.commons.beanutils.WrapDynaClass +
The set of PropertyDescriptors for this bean class. +
descriptorsMap - +Variable in class org.apache.commons.beanutils.WrapDynaClass +
The set of PropertyDescriptors for this bean class, keyed by the + property name. +
Double_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Double Zero +
DoubleArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
DoubleArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.DoubleArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
DoubleArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.DoubleArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
DoubleConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.lang.Double objects.
DoubleConverter() - +Constructor for class org.apache.commons.beanutils.converters.DoubleConverter +
Construct a java.lang.Double Converter that throws + a ConversionException if an error occurs. +
DoubleConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.DoubleConverter +
Construct a java.lang.Double Converter that returns + a default value if an error occurs. +
DoubleLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DoubleLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DoubleLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DoubleLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DoubleLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DoubleLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DoubleLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
DoubleLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DoubleLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DoubleLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DoubleLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DoubleLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DoubleLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
DynaBean - Interface in org.apache.commons.beanutils
A DynaBean is a Java object that supports properties + whose names and data types, as well as values, may be dynamically modified.
dynaBeanClass - +Variable in class org.apache.commons.beanutils.BasicDynaClass +
The DynaBean implementation class we will use for + creating new instances. +
DynaBeanMapDecorator - Class in org.apache.commons.beanutils
Decorates a DynaBean to provide Map behaviour.
DynaBeanMapDecorator(DynaBean) - +Constructor for class org.apache.commons.beanutils.DynaBeanMapDecorator +
Constructs a read only Map for the specified + DynaBean. +
DynaBeanMapDecorator(DynaBean, boolean) - +Constructor for class org.apache.commons.beanutils.DynaBeanMapDecorator +
Construct a Map for the specified DynaBean. +
dynaClass - +Variable in class org.apache.commons.beanutils.BasicDynaBean +
The DynaClass "base class" that this DynaBean + is associated with. +
DynaClass - Interface in org.apache.commons.beanutils
A DynaClass is a simulation of the functionality of + java.lang.Class for classes implementing the + DynaBean interface.
dynaClass - +Variable in class org.apache.commons.beanutils.LazyDynaBean +
The MutableDynaClass "base class" that this DynaBean + is associated with. +
dynaClass - +Variable in class org.apache.commons.beanutils.ResultSetIterator +
The ResultSetDynaClass we are associated with. +
dynaClass - +Variable in class org.apache.commons.beanutils.WrapDynaBean +
The DynaClass "base class" that this DynaBean + is associated with. +
dynaClasses - +Static variable in class org.apache.commons.beanutils.WrapDynaClass +
Deprecated. The dynaClasses Map will be removed in a subsequent release +
DynaProperty - Class in org.apache.commons.beanutils
The metadata describing an individual property of a DynaBean.
DynaProperty(String) - +Constructor for class org.apache.commons.beanutils.DynaProperty +
Construct a property that accepts any data type. +
DynaProperty(String, Class) - +Constructor for class org.apache.commons.beanutils.DynaProperty +
Construct a property of the specified data type. +
DynaProperty(String, Class, Class) - +Constructor for class org.apache.commons.beanutils.DynaProperty +
Construct an indexed or mapped DynaProperty that supports (pseudo)-introspection + of the content type. +
+
+

+E

+
+
empty() - +Method in class org.apache.commons.collections.ArrayStack +
Return true if this stack is currently empty. +
entryIterator() - +Method in class org.apache.commons.beanutils.BeanMap +
Convenience method for getting an iterator over the entries. +
entrySet() - +Method in class org.apache.commons.beanutils.BeanMap +
Gets a Set of MapEntry objects that are the mappings for this BeanMap. +
entrySet() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Returns the Set of the property/value mappings + in the decorated DynaBean. +
entrySet() - +Method in class org.apache.commons.collections.FastHashMap +
Return a collection view of the mappings contained in this map. +
eof - +Variable in class org.apache.commons.beanutils.ResultSetIterator +
Flag indicating whether the result set has indicated that there are + no further rows. +
equals(Object) - +Method in class org.apache.commons.beanutils.BeanComparator +
Two BeanComparator's are equals if and only if + the wrapped comparators and the property names to be compared + are equal. +
equals(Object) - +Method in class org.apache.commons.beanutils.DynaProperty +
Checks this instance against the specified Object for equality. +
equals(Object) - +Method in class org.apache.commons.collections.FastHashMap +
Compare the specified object with this list for equality. +
evaluate(Object) - +Method in class org.apache.commons.beanutils.BeanPredicate +
Evaluates the given object by applying the BeanPredicate.getPredicate() + to a property value named by BeanPredicate.getPropertyName(). +
evaluate(Object) - +Method in class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Evaulates the object provided against the criteria specified when this + BeanPropertyValueEqualsPredicate was constructed. +
evaluateValue(Object, Object) - +Method in class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Utility method which evaluates whether the actual property value equals the expected property + value. +
execute(Object) - +Method in class org.apache.commons.beanutils.BeanPropertyValueChangeClosure +
Updates the target object provided using the property update criteria provided when this + BeanPropertyValueChangeClosure was constructed. +
+
+

+F

+
+
fast - +Variable in class org.apache.commons.collections.FastHashMap +
Are we currently operating in "fast" mode? +
FastHashMap - Class in org.apache.commons.collections
A customized implementation of java.util.HashMap designed + to operate in a multithreaded environment where the large majority of + method calls are read-only, instead of structural changes.
FastHashMap() - +Constructor for class org.apache.commons.collections.FastHashMap +
Construct an empty map. +
FastHashMap(int) - +Constructor for class org.apache.commons.collections.FastHashMap +
Construct an empty map with the specified capacity. +
FastHashMap(int, float) - +Constructor for class org.apache.commons.collections.FastHashMap +
Construct an empty map with the specified capacity and load factor. +
FastHashMap(Map) - +Constructor for class org.apache.commons.collections.FastHashMap +
Construct a new map with the same mappings as the specified map. +
FileConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion that handles conversion + to and from java.io.File objects.
FileConverter() - +Constructor for class org.apache.commons.beanutils.converters.FileConverter +
Construct a java.io.File Converter that throws + a ConversionException if an error occurs. +
FileConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.FileConverter +
Construct a java.io.File Converter that returns + a default value if an error occurs. +
firePropertyChange(Object, Object, Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Called during a successful BeanMap.put(Object,Object) operation. +
Float_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Float Zero +
FloatArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
FloatArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.FloatArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
FloatArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.FloatArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
FloatConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.lang.Float objects.
FloatConverter() - +Constructor for class org.apache.commons.beanutils.converters.FloatConverter +
Construct a java.lang.Float Converter that throws + a ConversionException if an error occurs. +
FloatConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.FloatConverter +
Construct a java.lang.Float Converter that returns + a default value if an error occurs. +
FloatLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
FloatLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
FloatLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
FloatLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
FloatLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
FloatLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
FloatLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
FloatLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
FloatLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
FloatLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
FloatLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
FloatLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
FloatLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
+
+

+G

+
+
get(String) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Return the value of a simple property with the specified name. +
get(String, int) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Return the value of an indexed property with the specified name. +
get(String, String) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +
get(Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the value of the bean's property with the given name. +
get() - +Method in class org.apache.commons.beanutils.ContextClassLoaderLocal +
Gets the instance which provides the functionality for BeanUtils. +
get(String) - +Method in interface org.apache.commons.beanutils.DynaBean +
Return the value of a simple property with the specified name. +
get(String, int) - +Method in interface org.apache.commons.beanutils.DynaBean +
Return the value of an indexed property with the specified name. +
get(String, String) - +Method in interface org.apache.commons.beanutils.DynaBean +
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +
get(Object) - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Return the value for the specified key from + the decorated DynaBean. +
get(String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Return the value of a simple property with the specified name. +
get(String, int) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Return the value of an indexed property with the specified name. +
get(String, String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Return the value of a mapped property with the specified name. +
get(int) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Return the element at the specified position. +
get(String) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Return the value of a simple property with the specified name. +
get(String, int) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Return the value of an indexed property with the specified name. +
get(String, String) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +
get(String) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Return the value of a simple property with the specified name. +
get(String, int) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Return the value of an indexed property with the specified name. +
get(String, String) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +
get() - +Method in class org.apache.commons.collections.ArrayStack +
Returns the element on the top of the stack. +
get() - +Method in interface org.apache.commons.collections.Buffer +
Gets the next object from the buffer without removing it. +
get(Object) - +Method in class org.apache.commons.collections.FastHashMap +
Return the value to which this map maps the specified key. +
getAccessibleConstructor(Class, Class) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns a constructor with single argument. +
getAccessibleConstructor(Class, Class[]) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns a constructor given a class and signature. +
getAccessibleConstructor(Constructor) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns accessible version of the given constructor. +
getAccessibleMethod(Class, String, Class) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Return an accessible method (that is, one that can be invoked via + reflection) with given name and a single parameter. +
getAccessibleMethod(Class, String, Class[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Return an accessible method (that is, one that can be invoked via + reflection) with given name and parameters. +
getAccessibleMethod(Method) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Return an accessible method (that is, one that can be invoked via + reflection) that implements the specified Method. +
getAccessibleMethod(Class, Method) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Return an accessible method (that is, one that can be invoked via + reflection) that implements the specified Method. +
getApplyLocalized() - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Gets whether the pattern is localized or not. +
getApplyLocalized() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Is the pattern to be applied localized + (Indicate whether the pattern is localized or not) +
getApplyLocalized() - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Gets applyLocalized. +
getApplyLocalized() - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
getter for applyLocalized +
getArrayProperty(Object, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified array property of the specified + bean, as a String array. +
getArrayProperty(Object, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified array property of the specified + bean, as a String array. +
getBean() - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the bean currently being operated on. +
getBeanClass() - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Return the class of the underlying wrapped bean. +
getCacheFast(Map) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return whether a Map is fast +
getCause() - +Method in exception org.apache.commons.beanutils.ConversionException +
Return the root cause of this conversion exception. +
getCause() - +Method in exception org.apache.commons.collections.BufferUnderflowException +
Gets the root cause of the exception. +
getComparator() - +Method in class org.apache.commons.beanutils.BeanComparator +
Gets the Comparator being used to compare beans. +
getContentType() - +Method in class org.apache.commons.beanutils.DynaProperty +
Gets the (optional) type of the indexed content for DynaProperty's + that support this feature. +
getConvertUtils() - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Gets the ConvertUtilsBean instance used to perform the conversions. +
getDebug() - +Static method in class org.apache.commons.beanutils.BeanUtils +
Deprecated. BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class. +
getDebug() - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The debug static property is no longer used +
getDefault(Class) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Return the default value for conversions to the specified + type. +
getDefault(Class) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Return the default value for conversions to the specified + type. +
getDefaultBoolean() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +
getDefaultBoolean() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +
getDefaultByte() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +
getDefaultByte() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +
getDefaultCharacter() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +
getDefaultCharacter() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +
getDefaultDouble() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +
getDefaultDouble() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +
getDefaultFloat() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +
getDefaultFloat() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +
getDefaultInteger() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +
getDefaultInteger() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +
getDefaultLocale() - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Gets the locale used when no locale is passed. +
getDefaultLocale() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Gets the default Locale +
getDefaultLocale() - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Gets the Locale which will be used when + no Locale is passed to a method. +
getDefaultLocale() - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
getter for defaultLocale. +
getDefaultLong() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +
getDefaultLong() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +
getDefaultShort() - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +
getDefaultShort() - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.BigDecimalConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.BigIntegerConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.BooleanConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.ByteConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.CalendarConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.CharacterConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.ClassConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.DateConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.DoubleConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.FileConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.FloatConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.IntegerConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.LongConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.ShortConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.SqlDateConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.SqlTimeConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.SqlTimestampConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.StringConverter +
Return the default type this Converter handles. +
getDefaultType() - +Method in class org.apache.commons.beanutils.converters.URLConverter +
Return the default type this Converter handles. +
getDynaBean() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Provide access to the underlying DynaBean + this Map decorates. +
getDynaBeanClass() - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Return the Class object we will use to create new instances in the + newInstance() method. +
getDynaClass() - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +
getDynaClass() - +Method in interface org.apache.commons.beanutils.DynaBean +
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +
getDynaClass() - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +
getDynaClass() - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +
getDynaClass() - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +
getDynaProperties() - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. +
getDynaProperties() - +Method in interface org.apache.commons.beanutils.DynaClass +
Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. +
getDynaProperties() - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. +
getDynaProperties() - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. +
getDynaProperty(String) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Return the property descriptor for the specified property name. +
getDynaProperty(String) - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Return a property descriptor for the specified property, if it exists; + otherwise, return null. +
getDynaProperty(String) - +Method in interface org.apache.commons.beanutils.DynaClass +
Return a property descriptor for the specified property, if it exists; + otherwise, return null. +
getDynaProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Return a property descriptor for the specified property. +
getDynaProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Return a property descriptor for the specified property. +
getDynaProperty(String) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Return the property descriptor for the specified property name. +
getDynaProperty(String) - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Return a property descriptor for the specified property, if it exists; + otherwise, return null. +
getFast() - +Method in class org.apache.commons.collections.FastHashMap +
Returns true if this map is operating in fast mode. +
getFormat(Locale, TimeZone) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Return a DateFormat for the Locale. +
getFormat(Locale, TimeZone) - +Method in class org.apache.commons.beanutils.converters.SqlTimeConverter +
Return a DateFormat for the Locale. +
getFormat(Locale, TimeZone) - +Method in class org.apache.commons.beanutils.converters.SqlTimestampConverter +
Return a DateFormat for the Locale. +
getIndex(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Return the index value from the property expression or -1. +
getIndex(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Extract the index value from the property expression or -1. +
getIndex() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Return indexed property index. +
getIndex() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Return indexed property index. +
getIndexedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified indexed property of the specified + bean, as a String. +
getIndexedProperty(Object, String, int) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified indexed property of the specified + bean, as a String. +
getIndexedProperty(Object, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified indexed property of the specified + bean, as a String. +
getIndexedProperty(Object, String, int) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified indexed property of the specified + bean, as a String. +
getIndexedProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String. +
getIndexedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. +
getIndexedProperty(Object, String, int, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the specified conversion pattern. +
getIndexedProperty(Object, String, int) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. +
getIndexedProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String. +
getIndexedProperty(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. +
getIndexedProperty(Object, String, int, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the specified conversion pattern. +
getIndexedProperty(Object, String, int) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. +
getIndexedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the specified indexed property of the specified + bean, with no type conversions. +
getIndexedProperty(Object, String, int) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the specified indexed property of the specified + bean, with no type conversions. +
getIndexedProperty(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the specified indexed property of the specified + bean, with no type conversions. +
getIndexedProperty(Object, String, int) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the specified indexed property of the specified + bean, with no type conversions. +
getInstance() - +Static method in class org.apache.commons.beanutils.BeanUtilsBean +
Gets the instance which provides the functionality for BeanUtils. +
getInstance() - +Static method in class org.apache.commons.beanutils.ConvertUtilsBean +
Get singleton instance +
getInstance() - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Gets singleton instance. +
getInstance() - +Static method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the PropertyUtils bean instance. +
getInstance() - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Gets the bean instance wrapped by this DynaBean. +
getKey(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Return the map key from the property expression or null. +
getKey(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Extract the map key from the property expression or null. +
getKey() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Return the mapped property key. +
getKey() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Return the mapped property key. +
getLocale() - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Return the Locale for the Converter + (or null if none specified). +
getLocale() - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Return the Locale for the Converter + (or null if none specified). +
getLocaleBeanUtilsInstance() - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Gets singleton instance +
getLocaleConvertUtils() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Gets the bean instance used for conversions +
getMap() - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Return a Map representation of this DynaBean. +
getMap() - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Return a Map representation of this DynaBean. +
getMap() - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Return the underlying Map backing this DynaBean +
getMappedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified indexed property of the specified + bean, as a String. +
getMappedProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified mapped property of the specified + bean, as a String. +
getMappedProperty(Object, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified indexed property of the specified + bean, as a String. +
getMappedProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified mapped property of the specified + bean, as a String. +
getMappedProperty(Object, String, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String using the specified conversion pattern. +
getMappedProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String + The key is specified as a method parameter and must *not* be included + in the property name expression. +
getMappedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter. +
getMappedProperty(Object, String, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String using the specified conversion pattern. +
getMappedProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String + The key is specified as a method parameter and must *not* be included + in the property name expression +
getMappedProperty(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter. +
getMappedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the specified mapped property of the + specified bean, with no type conversions. +
getMappedProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the specified mapped property of the specified + bean, with no type conversions. +
getMappedProperty(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the specified mapped property of the + specified bean, with no type conversions. +
getMappedProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the specified mapped property of the specified + bean, with no type conversions. +
getMappedPropertyDescriptors(Class) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. This method should not be exposed +
getMappedPropertyDescriptors(Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. This method should not be exposed +
getMappedPropertyDescriptors(Class) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Deprecated. This method should not be exposed +
getMappedPropertyDescriptors(Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Deprecated. This method should not be exposed +
getMappedPropertyLocale(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the specified pattern. +
getMappedPropertyLocale(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the specified pattern. +
getMappedPropertyType() - +Method in class org.apache.commons.beanutils.MappedPropertyDescriptor +
Gets the Class object for the property values. +
getMappedReadMethod() - +Method in class org.apache.commons.beanutils.MappedPropertyDescriptor +
Gets the method that should be used to read one of the property value. +
getMappedWriteMethod() - +Method in class org.apache.commons.beanutils.MappedPropertyDescriptor +
Gets the method that should be used to write one of the property value. +
getMatchingAccessibleMethod(Class, String, Class[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Find an accessible method that matches the given name and has compatible parameters. +
getName() - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties. +
getName() - +Method in interface org.apache.commons.beanutils.DynaClass +
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties. +
getName() - +Method in class org.apache.commons.beanutils.DynaProperty +
Get the name of this property. +
getName() - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassgetName() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Return property name (includes indexed/mapped expr). +
getName() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Return property name (includes indexed/mapped expr). +
getName() - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties. +
getNestedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the (possibly nested) property of the specified + name, for the specified bean, as a String. +
getNestedProperty(Object, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the (possibly nested) property of the specified + name, for the specified bean, as a String. +
getNestedProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, + as a String using the specified pattern. +
getNestedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the (possibly nested) locale-sensitive property + of the specified name. +
getNestedProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, + as a String using the specified pattern. +
getNestedProperty(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter. +
getNestedProperty(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions. +
getNestedProperty(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions. +
getObjectFromResultSet(String) - +Method in class org.apache.commons.beanutils.ResultSetDynaClass +
Get a value from the ResultSet for the specified + property name. +
getPattern() - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Return the number format pattern used to convert + Numbers to/from a java.lang.String + (or null if none specified). +
getPatterns() - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Return the date format patterns used to convert + dates to/from a java.lang.String + (or null if none specified). +
getPredicate() - +Method in class org.apache.commons.beanutils.BeanPredicate +
Gets the Predicate to be applied to the value of the named property + during BeanPredicate.evaluate(java.lang.Object). +
getPrimitiveType(Class) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Gets the class for the primitive type corresponding to the primitive wrapper class given. +
getPrimitiveWrapper(Class) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Gets the wrapper object class for the given primitive type class. +
getProperty() - +Method in class org.apache.commons.beanutils.BeanComparator +
Gets the property attribute of the BeanComparator +
getProperty(Object, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified property of the specified bean, + no matter which property reference format is used, as a String. +
getProperty(Object, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified property of the specified bean, + no matter which property reference format is used, as a String. +
getProperty(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Return the property name from the property expression. +
getProperty(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Return the property name from the property expression. +
getProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensitive property + of the specified bean. +
getProperty(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified locale-sensitive property + of the specified bean. +
getProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensitive property + of the specified bean, no matter which property reference + format is used, as a String using the specified conversion pattern. +
getProperty(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified locale-sensitive property + of the specified bean, no matter which property reference + format is used, as a String using the default + conversion pattern of the corresponding LocaleConverter. +
getProperty(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions. +
getProperty(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions. +
getPropertyDescriptor(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Retrieve the property descriptor for the specified property of the + specified bean, or return null if there is no such + descriptor. +
getPropertyDescriptor(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Retrieve the property descriptor for the specified property of the + specified bean, or return null if there is no such + descriptor. +
getPropertyDescriptor(String) - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Return the PropertyDescriptor for the specified property name, if any; + otherwise return null. +
getPropertyDescriptors(Class) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Retrieve the property descriptors for the specified class, + introspecting and caching them the first time a particular bean class + is encountered. +
getPropertyDescriptors(Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Retrieve the property descriptors for the specified bean, + introspecting and caching them the first time a particular bean class + is encountered. +
getPropertyDescriptors(Class) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Retrieve the property descriptors for the specified class, + introspecting and caching them the first time a particular bean class + is encountered. +
getPropertyDescriptors(Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Retrieve the property descriptors for the specified bean, + introspecting and caching them the first time a particular bean class + is encountered. +
getPropertyEditorClass(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the Java Class repesenting the property editor class that has + been registered for this property (if any). +
getPropertyEditorClass(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the Java Class repesenting the property editor class that has + been registered for this property (if any). +
getPropertyName() - +Method in class org.apache.commons.beanutils.BeanPredicate +
Gets the name of the property whose value is to be predicated. +
getPropertyName() - +Method in class org.apache.commons.beanutils.BeanPropertyValueChangeClosure +
Returns the name of the property which will be updated when this Closure executes. +
getPropertyName() - +Method in class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Returns the name of the property which will be evaluated when this Predicate is + executed. +
getPropertyName() - +Method in class org.apache.commons.beanutils.BeanToPropertyValueTransformer +
Returns the name of the property that will be used in the transformation of the bean. +
getPropertyOfMapBean(Map, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
This method is called by getNestedProperty and setNestedProperty to + define what it means to get a property from an object which implements + Map. +
getPropertyType(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the Java Class representing the property type of the specified + property, or null if there is no such property for the + specified bean. +
getPropertyType(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the Java Class representing the property type of the specified + property, or null if there is no such property for the + specified bean. +
getPropertyUtils() - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Gets the PropertyUtilsBean instance used to access properties. +
getPropertyValue() - +Method in class org.apache.commons.beanutils.BeanPropertyValueChangeClosure +
Returns the value that the property specified by propertyName + will be updated to when this Closure executes. +
getPropertyValue() - +Method in class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Returns the value that the property specified by propertyName will be compared to + when this Predicate executes. +
getPropName() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Return the property name. +
getPropName() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Return the property name. +
getReadMethod(String) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the accessor for the property with the given name. +
getReadMethod(Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the accessor for the property with the given name. +
getReadMethod(PropertyDescriptor) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return an accessible property getter method for this property, + if there is one; otherwise return null. +
getReadMethod(PropertyDescriptor) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return an accessible property getter method for this property, + if there is one; otherwise return null. +
getResolver() - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the configured Resolver implementation used by BeanUtils. +
getRows() - +Method in class org.apache.commons.beanutils.RowSetDynaClass +
Return a List containing the DynaBeans that + represent the contents of each Row from the + ResultSet that was the basis of this + RowSetDynaClass instance. +
getSimpleProperty(Object, String) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Return the value of the specified simple property of the specified + bean, converted to a String. +
getSimpleProperty(Object, String) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Return the value of the specified simple property of the specified + bean, converted to a String. +
getSimpleProperty(Object, String, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the specified + conversion pattern. +
getSimpleProperty(Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the default + conversion pattern of the corresponding LocaleConverter. +
getSimpleProperty(Object, String, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the specified + conversion pattern. +
getSimpleProperty(Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the default + conversion pattern of the corresponding LocaleConverter. +
getSimpleProperty(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return the value of the specified simple property of the specified + bean, with no type conversions. +
getSimpleProperty(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return the value of the specified simple property of the specified + bean, with no type conversions. +
getTarget() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Return the target bean. +
getTarget() - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Return the target bean. +
getTimeZone() - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Return the Time Zone to use when converting dates + (or null if none specified. +
getType(String) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the type of the property with the given name. +
getType() - +Method in class org.apache.commons.beanutils.DynaProperty +
Gets the Java class representing the data type of the underlying property + values. +
getTypeTransformer(Class) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns a transformer for the given primitive type. +
getWriteMethod(String) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the mutator for the property with the given name. +
getWriteMethod(Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the mutator for the property with the given name. +
getWriteMethod(PropertyDescriptor) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return an accessible property setter method for this property, + if there is one; otherwise return null. +
getWriteMethod(PropertyDescriptor) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return an accessible property setter method for this property, + if there is one; otherwise return null. +
growIndexedProperty(String, Object, int) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Grow the size of an indexed property +
+
+

+H

+
+
handleError(Class, Object, Throwable) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Handle Conversion Errors. +
handleMissing(Class) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Handle missing values. +
hashCode() - +Method in class org.apache.commons.beanutils.BeanComparator +
Hashcode compatible with equals. +
hashCode() - +Method in class org.apache.commons.beanutils.DynaProperty +
  +
hashCode() - +Method in class org.apache.commons.collections.FastHashMap +
Return the hash code value for this map. +
hasNested(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Indicates whether or not the expression + contains nested property expressions or not. +
hasNested(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Indicates whether or not the expression + contains nested property expressions or not. +
hasNext() - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Return true if the iteration has more elements. +
+
+

+I

+
+
INDEXED_DELIM - +Static variable in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used. +
INDEXED_DELIM2 - +Static variable in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used. +
initCause(Throwable, Throwable) - +Static method in class org.apache.commons.beanutils.BeanUtils +
If we're running on JDK 1.4 or later, initialize the cause for the given throwable. +
initCause(Throwable, Throwable) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
If we're running on JDK 1.4 or later, initialize the cause for the given throwable. +
initialValue() - +Method in class org.apache.commons.beanutils.ContextClassLoaderLocal +
Returns the initial value for this ContextClassLoaderLocal + variable. +
instance - +Variable in class org.apache.commons.beanutils.WrapDynaBean +
The JavaBean instance wrapped by this WrapDynaBean. +
Integer_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Integer Zero +
IntegerArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
IntegerArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.IntegerArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
IntegerArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.IntegerArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
IntegerConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.lang.Integer objects.
IntegerConverter() - +Constructor for class org.apache.commons.beanutils.converters.IntegerConverter +
Construct a java.lang.Integer Converter that throws + a ConversionException if an error occurs. +
IntegerConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.IntegerConverter +
Construct a java.lang.Integer Converter that returns + a default value if an error occurs. +
IntegerLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
IntegerLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
IntegerLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
IntegerLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
IntegerLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
IntegerLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
IntegerLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
IntegerLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
IntegerLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
IntegerLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
IntegerLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
IntegerLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
IntegerLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
introspect() - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Introspect our bean class to identify the supported properties. +
invokeConstructor(Class, Object) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Convenience method returning new instance of klazz using a single argument constructor. +
invokeConstructor(Class, Object[]) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns new instance of klazz created using the actual arguments args. +
invokeConstructor(Class, Object[], Class[]) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns new instance of klazz created using constructor + with signature parameterTypes and actual arguments args. +
invokeExactConstructor(Class, Object) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Convenience method returning new instance of klazz using a single argument constructor. +
invokeExactConstructor(Class, Object[]) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns new instance of klazz created using the actual arguments args. +
invokeExactConstructor(Class, Object[], Class[]) - +Static method in class org.apache.commons.beanutils.ConstructorUtils +
Returns new instance of klazz created using constructor + with signature parameterTypes and actual arguments + args. +
invokeExactMethod(Object, String, Object) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a method whose parameter type matches exactly the object + type. +
invokeExactMethod(Object, String, Object[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a method whose parameter types match exactly the object + types. +
invokeExactMethod(Object, String, Object[], Class[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a method whose parameter types match exactly the parameter + types given. +
invokeExactStaticMethod(Class, String, Object[], Class[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a static method whose parameter types match exactly the parameter + types given. +
invokeExactStaticMethod(Class, String, Object) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a static method whose parameter type matches exactly the object + type. +
invokeExactStaticMethod(Class, String, Object[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a static method whose parameter types match exactly the object + types. +
invokeMethod(Object, String, Object) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a named method whose parameter type matches the object type. +
invokeMethod(Object, String, Object[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a named method whose parameter type matches the object type. +
invokeMethod(Object, String, Object[], Class[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a named method whose parameter type matches the object type. +
invokeSetter(Object, String, String, int, Object) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Invoke the setter method. +
invokeSetter(Object, String, String, int, Object) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Invoke the setter method. +
invokeStaticMethod(Class, String, Object) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a named static method whose parameter type matches the object type. +
invokeStaticMethod(Class, String, Object[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a named static method whose parameter type matches the object type. +
invokeStaticMethod(Class, String, Object[], Class[]) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Invoke a named static method whose parameter type matches the object type. +
isAllowDecimals() - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Return whether decimals are allowed in the number. +
isAssignable(Class, Class) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Is an object of the source class assignable to the destination class? +
isAssignable(Class, Class) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Is an object of the source class assignable to the destination class? +
isAssignmentCompatible(Class, Class) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Determine whether a type can be used as a parameter in a method invocation. +
isDynaProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Indicates if there is a property with the specified name. +
isDynaProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Indicate whether a property actually exists. +
isDynaProperty(String) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Indicate whether a property actually exists. +
isEmpty() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Indicate whether the decorated DynaBean has + any properties. +
isEmpty() - +Method in class org.apache.commons.collections.FastHashMap +
Return true if this map contains no mappings. +
isIgnoreNull() - +Method in class org.apache.commons.beanutils.BeanPropertyValueChangeClosure +
Returns the flag that determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +
isIgnoreNull() - +Method in class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +
Returns the flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +
isIgnoreNull() - +Method in class org.apache.commons.beanutils.BeanToPropertyValueTransformer +
Returns the flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +
isIndexed() - +Method in class org.apache.commons.beanutils.DynaProperty +
Does this property represent an indexed value (ie an array or List)? +
isIndexed(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Indicate whether the expression is for an indexed property or not. +
isIndexed(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Indicate whether the expression is for an indexed property or not. +
isLenient() - +Method in class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Returns whether date formatting is lenient. +
isMapped() - +Method in class org.apache.commons.beanutils.DynaProperty +
Does this property represent a mapped value (ie a Map)? +
isMapped(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Indicate whether the expression is for a mapped property or not. +
isMapped(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Indicate whether the expression is for a mapped property or not. +
isReadable(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return true if the specified property name identifies + a readable property on the specified bean; otherwise, return + false. +
isReadable(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return true if the specified property name identifies + a readable property on the specified bean; otherwise, return + false. +
isReadOnly() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Indicate whether the Map is read only. +
isRestricted() - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Is this DynaClass currently restricted. +
isRestricted() - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Is this DynaClass currently restricted. +
isRestricted() - +Method in interface org.apache.commons.beanutils.MutableDynaClass +
Is this DynaClass currently restricted, if so, no changes to the + existing registration of property names, data types, readability, or + writeability are allowed. +
isReturnNull() - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Should this DynaClass return a null from + the getDynaProperty(name) method if the property + doesn't exist. +
isReturnNull() - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Should this DynaClass return a null from + the getDynaProperty(name) method if the property + doesn't exist. +
isUseDefault() - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Indicates whether a default value will be returned or exception + thrown in the event of a conversion error. +
isWriteable(Object, String) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Return true if the specified property name identifies + a writeable property on the specified bean; otherwise, return + false. +
isWriteable(Object, String) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Return true if the specified property name identifies + a writeable property on the specified bean; otherwise, return + false. +
iterator() - +Method in class org.apache.commons.beanutils.ResultSetDynaClass +
Return an Iterator of DynaBean instances for + each row of the wrapped ResultSet, in "forward" order. +
+
+

+K

+
+
keyIterator() - +Method in class org.apache.commons.beanutils.BeanMap +
Convenience method for getting an iterator over the keys. +
keySet() - +Method in class org.apache.commons.beanutils.BeanMap +
Get the keys for this BeanMap. +
keySet() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Returns the Set of the property + names in the decorated DynaBean. +
keySet() - +Method in class org.apache.commons.collections.FastHashMap +
Return a set view of the keys contained in this map. +
+
+

+L

+
+
LazyDynaBean - Class in org.apache.commons.beanutils
DynaBean which automatically adds properties to the DynaClass + and provides Lazy List and Lazy Map features.
LazyDynaBean() - +Constructor for class org.apache.commons.beanutils.LazyDynaBean +
Construct a new LazyDynaBean with a LazyDynaClass instance. +
LazyDynaBean(String) - +Constructor for class org.apache.commons.beanutils.LazyDynaBean +
Construct a new LazyDynaBean with a LazyDynaClass instance. +
LazyDynaBean(DynaClass) - +Constructor for class org.apache.commons.beanutils.LazyDynaBean +
Construct a new DynaBean associated with the specified + DynaClass instance - if its not a MutableDynaClass + then a new LazyDynaClass is created and the properties copied. +
LazyDynaClass - Class in org.apache.commons.beanutils
DynaClass which implements the MutableDynaClass interface.
LazyDynaClass() - +Constructor for class org.apache.commons.beanutils.LazyDynaClass +
Construct a new LazyDynaClass with default parameters. +
LazyDynaClass(String) - +Constructor for class org.apache.commons.beanutils.LazyDynaClass +
Construct a new LazyDynaClass with the specified name. +
LazyDynaClass(String, Class) - +Constructor for class org.apache.commons.beanutils.LazyDynaClass +
Construct a new LazyDynaClass with the specified name and DynaBean class. +
LazyDynaClass(String, DynaProperty[]) - +Constructor for class org.apache.commons.beanutils.LazyDynaClass +
Construct a new LazyDynaClass with the specified name and properties. +
LazyDynaClass(String, Class, DynaProperty[]) - +Constructor for class org.apache.commons.beanutils.LazyDynaClass +
Construct a new LazyDynaClass with the specified name, DynaBean class and properties. +
LazyDynaList - Class in org.apache.commons.beanutils
Lazy DynaBean List.
LazyDynaList() - +Constructor for class org.apache.commons.beanutils.LazyDynaList +
Default Constructor. +
LazyDynaList(int) - +Constructor for class org.apache.commons.beanutils.LazyDynaList +
Construct a LazyDynaList with the + specified capacity. +
LazyDynaList(DynaClass) - +Constructor for class org.apache.commons.beanutils.LazyDynaList +
Construct a LazyDynaList with a + specified DynaClass for its elements. +
LazyDynaList(Class) - +Constructor for class org.apache.commons.beanutils.LazyDynaList +
Construct a LazyDynaList with a + specified type for its elements. +
LazyDynaList(Collection) - +Constructor for class org.apache.commons.beanutils.LazyDynaList +
Construct a LazyDynaList populated with the + elements of a Collection. +
LazyDynaList(Object[]) - +Constructor for class org.apache.commons.beanutils.LazyDynaList +
Construct a LazyDynaList populated with the + elements of an Array. +
LazyDynaMap - Class in org.apache.commons.beanutils
Provides a light weight DynaBean facade to a Map + with lazy map/list processing.
LazyDynaMap() - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Default Constructor. +
LazyDynaMap(String) - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Construct a new LazyDynaMap with the specified name. +
LazyDynaMap(Map) - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Construct a new LazyDynaMap with the specified Map. +
LazyDynaMap(String, Map) - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Construct a new LazyDynaMap with the specified name and Map. +
LazyDynaMap(DynaProperty[]) - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Construct a new LazyDynaMap with the specified properties. +
LazyDynaMap(String, DynaProperty[]) - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Construct a new LazyDynaMap with the specified name and properties. +
LazyDynaMap(DynaClass) - +Constructor for class org.apache.commons.beanutils.LazyDynaMap +
Construct a new LazyDynaMap based on an exisiting DynaClass +
limit - +Variable in class org.apache.commons.beanutils.RowSetDynaClass +
Limits the size of the returned list. +
loadClass(String) - +Method in class org.apache.commons.beanutils.ResultSetDynaClass +
Loads the class of the given name which by default uses the class loader used + to load this library. +
locale - +Variable in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
The locale specified to our Constructor, by default - system locale. +
LocaleBeanUtils - Class in org.apache.commons.beanutils.locale
Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
LocaleBeanUtils() - +Constructor for class org.apache.commons.beanutils.locale.LocaleBeanUtils +
  +
LocaleBeanUtils.Descriptor - Class in org.apache.commons.beanutils.locale
Deprecated. moved into LocaleBeanUtils
LocaleBeanUtils.Descriptor(Object, String, String, String, int) - +Constructor for class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Construct a descriptor instance for the target bean and property. +
LocaleBeanUtilsBean - Class in org.apache.commons.beanutils.locale
Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
LocaleBeanUtilsBean() - +Constructor for class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Construct instance with standard conversion bean +
LocaleBeanUtilsBean(LocaleConvertUtilsBean, ConvertUtilsBean, PropertyUtilsBean) - +Constructor for class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Construct instance that uses given locale conversion +
LocaleBeanUtilsBean(LocaleConvertUtilsBean) - +Constructor for class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Construct instance that uses given locale conversion +
LocaleBeanUtilsBean.Descriptor - Class in org.apache.commons.beanutils.locale
Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this class + is no longer used by BeanUtils.
LocaleBeanUtilsBean.Descriptor(Object, String, String, String, int) - +Constructor for class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Construct a descriptor instance for the target bean and property. +
LocaleConverter - Interface in org.apache.commons.beanutils.locale
General purpose locale-sensitive data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
LocaleConvertUtils - Class in org.apache.commons.beanutils.locale
Utility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.
LocaleConvertUtils() - +Constructor for class org.apache.commons.beanutils.locale.LocaleConvertUtils +
  +
LocaleConvertUtilsBean - Class in org.apache.commons.beanutils.locale
Utility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.
LocaleConvertUtilsBean() - +Constructor for class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Makes the state by default (deregisters all converters for all locales) + and then registers default locale converters. +
locPattern - +Variable in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
The flag indicating whether the given pattern string is localized or not. +
logInfo(Exception) - +Method in class org.apache.commons.beanutils.BeanMap +
Logs the given exception to System.out. +
logWarn(Exception) - +Method in class org.apache.commons.beanutils.BeanMap +
Logs the given exception to System.err. +
Long_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Long Zero +
LongArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
LongArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.LongArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
LongArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.LongArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
LongConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.lang.Long objects.
LongConverter() - +Constructor for class org.apache.commons.beanutils.converters.LongConverter +
Construct a java.lang.Long Converter that throws + a ConversionException if an error occurs. +
LongConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.LongConverter +
Construct a java.lang.Long Converter that returns + a default value if an error occurs. +
LongLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
LongLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
LongLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
LongLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
LongLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
LongLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
LongLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
LongLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
LongLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
LongLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
LongLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
LongLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
LongLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
lookup(Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null. +
lookup(Class, Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null. +
lookup(Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null. +
lookup(Class, Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null. +
lookup(Class, Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null. +
lookup(Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Deprecated. This method will be modified to return a Map in the next release. +
lookup(Class, Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null. +
lookup(Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Deprecated. This method will be modified to return a Map in the next release. +
+
+

+M

+
+
map - +Variable in class org.apache.commons.collections.FastHashMap +
The underlying map we are managing. +
MAPPED_DELIM - +Static variable in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used. +
MAPPED_DELIM2 - +Static variable in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used. +
MappedPropertyDescriptor - Class in org.apache.commons.beanutils
A MappedPropertyDescriptor describes one mapped property.
MappedPropertyDescriptor(String, Class) - +Constructor for class org.apache.commons.beanutils.MappedPropertyDescriptor +
Constructs a MappedPropertyDescriptor for a property that follows + the standard Java convention by having getFoo and setFoo + accessor methods, with the addition of a String parameter (the key). +
MappedPropertyDescriptor(String, Class, String, String) - +Constructor for class org.apache.commons.beanutils.MappedPropertyDescriptor +
This constructor takes the name of a mapped property, and method + names for reading and writing the property. +
MappedPropertyDescriptor(String, Method, Method) - +Constructor for class org.apache.commons.beanutils.MappedPropertyDescriptor +
This constructor takes the name of a mapped property, and Method + objects for reading and writing the property. +
MethodUtils - Class in org.apache.commons.beanutils
Utility reflection methods focussed on methods in general rather than properties in particular.
MethodUtils() - +Constructor for class org.apache.commons.beanutils.MethodUtils +
  +
MODEL - +Static variable in class org.apache.commons.beanutils.converters.BooleanArrayConverter +
Deprecated. Type which this class converts its input to. +
MutableDynaClass - Interface in org.apache.commons.beanutils
A specialized extension to DynaClass that allows properties + to be added or removed dynamically.
+
+

+N

+
+
name - +Variable in class org.apache.commons.beanutils.BasicDynaClass +
The "name" of this DynaBean class. +
name - +Variable in class org.apache.commons.beanutils.DynaProperty +
Property name +
name - +Variable in class org.apache.commons.beanutils.LazyDynaMap +
The name of this DynaClass (analogous to the + getName() method of java.lang.Class). +
NESTED_DELIM - +Static variable in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used. +
NestedNullException - Exception in org.apache.commons.beanutils
Thrown to indicate that the Bean Access Language cannot execute query + against given bean since a nested bean referenced is null.
NestedNullException() - +Constructor for exception org.apache.commons.beanutils.NestedNullException +
Constructs a NestedNullException without a detail message. +
NestedNullException(String) - +Constructor for exception org.apache.commons.beanutils.NestedNullException +
Constructs a NestedNullException without a detail message. +
newInstance() - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Instantiate and return a new DynaBean instance, associated + with this DynaClass. +
newInstance() - +Method in interface org.apache.commons.beanutils.DynaClass +
Instantiate and return a new DynaBean instance, associated + with this DynaClass. +
newInstance() - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Instantiate and return a new DynaBean instance, associated + with this DynaClass. +
newInstance() - +Method in class org.apache.commons.beanutils.WrapDynaClass +
Instantiates a new standard JavaBean instance associated with + this DynaClass and return it wrapped in a new WrapDynaBean + instance. +
newMap() - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Creates a new instance of the Map. +
next(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Extract the next property expression from the + current expression. +
next(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Extract the next property expression from the + current expression. +
next() - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Return the next element in the iteration. +
NO_DEFAULT - +Static variable in class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. This is a special reference that can be passed as the "default object" + to the constructor to indicate that no default is desired. +
NO_DEFAULT - +Static variable in class org.apache.commons.beanutils.converters.BooleanConverter +
Deprecated. Use constructors without default value. +
NULL_ARGUMENTS - +Static variable in class org.apache.commons.beanutils.BeanMap +
An empty array. +
NumberConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion that handles conversion + to and from java.lang.Number objects.
NumberConverter(boolean) - +Constructor for class org.apache.commons.beanutils.converters.NumberConverter +
Construct a java.lang.Number Converter + that throws a ConversionException if a error occurs. +
NumberConverter(boolean, Object) - +Constructor for class org.apache.commons.beanutils.converters.NumberConverter +
Construct a java.lang.Number Converter that returns + a default value if an error occurs. +
+
+

+O

+
+
org.apache.commons.beanutils - package org.apache.commons.beanutils
The Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties.
org.apache.commons.beanutils.converters - package org.apache.commons.beanutils.converters
Standard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time.
org.apache.commons.beanutils.expression - package org.apache.commons.beanutils.expression
Contains the +Resolver +interface and implementations.
org.apache.commons.beanutils.locale - package org.apache.commons.beanutils.locale
Locale-aware extensions of the standard beanutils classes.
org.apache.commons.beanutils.locale.converters - package org.apache.commons.beanutils.locale.converters
Standard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time.
org.apache.commons.collections - package org.apache.commons.collections
+This package contains a small number of collections classes that are needed for beanutils +to function.
+
+

+P

+
+
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +
Convert the specified locale-sensitive input object into an output object of + BigDecimal type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +
Convert the specified locale-sensitive input object into an output object of + BigInteger type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter +
Convert the specified locale-sensitive input object into an output + object of the specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.LongLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parse(Object, String) - +Method in class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Convert the specified locale-sensitive input object into an output object of the + specified type. +
parseElements(String) - +Method in class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. Parse an incoming String of the form similar to an array initializer + in the Java language into a List individual Strings + for each element, according to the following rules. +
pattern - +Variable in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
The default pattern specified to our Constructor, if any. +
peek() - +Method in class org.apache.commons.collections.ArrayStack +
Returns the top item off of this stack without removing it. +
peek(int) - +Method in class org.apache.commons.collections.ArrayStack +
Returns the n'th item down (zero-relative) from the top of this + stack without removing it. +
pop() - +Method in class org.apache.commons.collections.ArrayStack +
Pops the top item off of this stack and return it. +
populate(Object, Map) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Populate the JavaBeans properties of the specified bean, based on + the specified name/value pairs. +
populate(Object, Map) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Populate the JavaBeans properties of the specified bean, based on + the specified name/value pairs. +
properties - +Variable in class org.apache.commons.beanutils.BasicDynaClass +
The set of dynamic properties that are part of this DynaClass. +
properties - +Variable in class org.apache.commons.beanutils.WrapDynaClass +
The set of dynamic properties that are part of this DynaClass. +
propertiesMap - +Variable in class org.apache.commons.beanutils.BasicDynaClass +
The set of dynamic properties that are part of this DynaClass, + keyed by the property name. +
propertiesMap - +Variable in class org.apache.commons.beanutils.WrapDynaClass +
The set of dynamic properties that are part of this DynaClass, + keyed by the property name. +
PropertyUtils - Class in org.apache.commons.beanutils
Utility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.
PropertyUtils() - +Constructor for class org.apache.commons.beanutils.PropertyUtils +
  +
PropertyUtilsBean - Class in org.apache.commons.beanutils
Utility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.
PropertyUtilsBean() - +Constructor for class org.apache.commons.beanutils.PropertyUtilsBean +
Base constructor +
push(Object) - +Method in class org.apache.commons.collections.ArrayStack +
Pushes a new item onto the top of this stack. +
put(Object, Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Sets the bean property with the given name to the given value. +
put(Object, Object) - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Set the value for the specified property in + the decorated DynaBean. +
put(Object, Object) - +Method in class org.apache.commons.collections.FastHashMap +
Associate the specified value with the specified key in this map. +
putAll(Map) - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Copy the contents of a Map to the decorated DynaBean. +
putAll(Map) - +Method in class org.apache.commons.collections.FastHashMap +
Copy all of the mappings from the specified map to this one, replacing + any mappings with the same keys. +
putAllWriteable(BeanMap) - +Method in class org.apache.commons.beanutils.BeanMap +
Puts all of the writable properties from the given BeanMap into this + BeanMap. +
+
+

+R

+
+
register(Converter, Class) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Register a custom Converter for the specified destination + Class, replacing any previously registered Converter. +
register(boolean, boolean, int) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Register the provided converters with the specified defaults. +
register(Converter, Class) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Register a custom Converter for the specified destination + Class, replacing any previously registered Converter. +
register(LocaleConverter, Class, Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter. +
register(LocaleConverter, Class, Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter. +
reinitialise() - +Method in class org.apache.commons.beanutils.BeanMap +
Reinitializes this bean. +
remove(String, String) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Remove any existing value for the specified key on the + specified mapped property. +
remove(String, String) - +Method in interface org.apache.commons.beanutils.DynaBean +
Remove any existing value for the specified key on the + specified mapped property. +
remove(Object) - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
remove() operation is not supported. +
remove(String) - +Method in class org.apache.commons.beanutils.expression.DefaultResolver +
Remove the last property expresson from the + current expression. +
remove(String) - +Method in interface org.apache.commons.beanutils.expression.Resolver +
Remove the last property expresson from the + current expression. +
remove(String, String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Remove any existing value for the specified key on the + specified mapped property. +
remove(String) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class. +
remove(String) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class. +
remove(String) - +Method in interface org.apache.commons.beanutils.MutableDynaClass +
Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class. +
remove(String, String) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Remove any existing value for the specified key on the + specified mapped property. +
remove() - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Remove the current element from the iteration. +
remove(String, String) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Remove any existing value for the specified key on the + specified mapped property. +
remove() - +Method in class org.apache.commons.collections.ArrayStack +
Removes the element on the top of the stack. +
remove() - +Method in interface org.apache.commons.collections.Buffer +
Gets and removes the next object from the buffer. +
remove(Object) - +Method in class org.apache.commons.collections.FastHashMap +
Remove any mapping for this key, and return any previously + mapped value. +
Resolver - Interface in org.apache.commons.beanutils.expression
Property Name Expression Resolver.
restricted - +Variable in class org.apache.commons.beanutils.LazyDynaClass +
Controls whether changes to this DynaClass's properties are allowed. +
restricted - +Variable in class org.apache.commons.beanutils.LazyDynaMap +
Controls whether changes to this DynaClass's properties are allowed. +
resultSet - +Variable in class org.apache.commons.beanutils.ResultSetDynaClass +
The ResultSet we are wrapping. +
ResultSetDynaClass - Class in org.apache.commons.beanutils
Implementation of DynaClass for DynaBeans that wrap the + java.sql.Row objects of a java.sql.ResultSet.
ResultSetDynaClass(ResultSet) - +Constructor for class org.apache.commons.beanutils.ResultSetDynaClass +
Construct a new ResultSetDynaClass for the specified + ResultSet. +
ResultSetDynaClass(ResultSet, boolean) - +Constructor for class org.apache.commons.beanutils.ResultSetDynaClass +
Construct a new ResultSetDynaClass for the specified + ResultSet. +
ResultSetDynaClass(ResultSet, boolean, boolean) - +Constructor for class org.apache.commons.beanutils.ResultSetDynaClass +
Construct a new ResultSetDynaClass for the specified + ResultSet. +
ResultSetIterator - Class in org.apache.commons.beanutils
Implementation of java.util.Iterator returned by the + iterator() method of ResultSetDynaClass.
returnNull - +Variable in class org.apache.commons.beanutils.LazyDynaClass +
Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one. +
returnNull - +Variable in class org.apache.commons.beanutils.LazyDynaMap +
Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one. +
rows - +Variable in class org.apache.commons.beanutils.RowSetDynaClass +
The list of DynaBeans representing the contents of + the original ResultSet on which this + RowSetDynaClass was based. +
RowSetDynaClass - Class in org.apache.commons.beanutils
Implementation of DynaClass that creates an in-memory collection + of DynaBeans representing the results of an SQL query.
RowSetDynaClass(ResultSet) - +Constructor for class org.apache.commons.beanutils.RowSetDynaClass +
Construct a new RowSetDynaClass for the specified + ResultSet. +
RowSetDynaClass(ResultSet, int) - +Constructor for class org.apache.commons.beanutils.RowSetDynaClass +
Construct a new RowSetDynaClass for the specified + ResultSet. +
RowSetDynaClass(ResultSet, boolean) - +Constructor for class org.apache.commons.beanutils.RowSetDynaClass +
Construct a new RowSetDynaClass for the specified + ResultSet. +
RowSetDynaClass(ResultSet, boolean, int) - +Constructor for class org.apache.commons.beanutils.RowSetDynaClass +
Construct a new RowSetDynaClass for the specified + ResultSet. +
RowSetDynaClass(ResultSet, boolean, boolean) - +Constructor for class org.apache.commons.beanutils.RowSetDynaClass +
Construct a new RowSetDynaClass for the specified + ResultSet. +
RowSetDynaClass(ResultSet, boolean, int, boolean) - +Constructor for class org.apache.commons.beanutils.RowSetDynaClass +
Construct a new RowSetDynaClass for the specified + ResultSet. +
+
+

+S

+
+
search(Object) - +Method in class org.apache.commons.collections.ArrayStack +
Returns the one-based position of the distance from the top that the + specified object exists on this stack, where the top-most element is + considered to be at distance 1. +
set(String, Object) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Set the value of a simple property with the specified name. +
set(String, int, Object) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Set the value of an indexed property with the specified name. +
set(String, String, Object) - +Method in class org.apache.commons.beanutils.BasicDynaBean +
Set the value of a mapped property with the specified name. +
set(Object) - +Method in class org.apache.commons.beanutils.ContextClassLoaderLocal +
Sets the value - a value is provided per (thread) context classloader. +
set(String, Object) - +Method in class org.apache.commons.beanutils.ConvertingWrapDynaBean +
Set the value of the property with the specified name + performing any type conversions if necessary. +
set(String, Object) - +Method in interface org.apache.commons.beanutils.DynaBean +
Set the value of a simple property with the specified name. +
set(String, int, Object) - +Method in interface org.apache.commons.beanutils.DynaBean +
Set the value of an indexed property with the specified name. +
set(String, String, Object) - +Method in interface org.apache.commons.beanutils.DynaBean +
Set the value of a mapped property with the specified name. +
set(String, Object) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Set the value of a simple property with the specified name. +
set(String, int, Object) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Set the value of an indexed property with the specified name. +
set(String, String, Object) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Set the value of a mapped property with the specified name. +
set(int, Object) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Set the element at the specified position. +
set(String, Object) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Set the value of a simple property with the specified name. +
set(String, Object) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Set the value of a simple property with the specified name. +
set(String, int, Object) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Set the value of an indexed property with the specified name. +
set(String, String, Object) - +Method in class org.apache.commons.beanutils.ResultSetIterator +
Set the value of a mapped property with the specified name. +
set(String, Object) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Set the value of a simple property with the specified name. +
set(String, int, Object) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Set the value of an indexed property with the specified name. +
set(String, String, Object) - +Method in class org.apache.commons.beanutils.WrapDynaBean +
Set the value of a mapped property with the specified name. +
setAllowedChars(char[]) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Set the allowed characters to be used for parsing a delimited String. +
setApplyLocalized(boolean) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Sets whether the pattern is localized or not. +
setApplyLocalized(boolean) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Sets whether the pattern is applied localized + (Indicate whether the pattern is localized or not) +
setApplyLocalized(boolean) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Sets applyLocalized. +
setApplyLocalized(boolean) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
setter for applyLocalized +
setBean(Object) - +Method in class org.apache.commons.beanutils.BeanMap +
Sets the bean to be operated on by this map. +
setCacheFast(Map, boolean) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Set whether fast on a Map +
setCacheMethods(boolean) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Set whether methods should be cached for greater performance or not, + default is true. +
setDebug(int) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Deprecated. BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class. +
setDebug(int) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Deprecated. The debug static property is no longer used +
setDefaultBoolean(boolean) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +
setDefaultBoolean(boolean) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +
setDefaultByte(byte) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +
setDefaultByte(byte) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +
setDefaultCharacter(char) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +
setDefaultCharacter(char) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +
setDefaultDouble(double) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +
setDefaultDouble(double) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +
setDefaultFloat(float) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +
setDefaultFloat(float) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +
setDefaultInteger(int) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +
setDefaultInteger(int) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +
setDefaultLocale(Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Sets the locale used when no locale is passed. +
setDefaultLocale(Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Sets the default Locale. +
setDefaultLocale(Locale) - +Static method in class org.apache.commons.beanutils.locale.LocaleConvertUtils +
Sets the Locale which will be used when + no Locale is passed to a method. +
setDefaultLocale(Locale) - +Method in class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean +
setter for defaultLocale. +
setDefaultLong(long) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +
setDefaultLong(long) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +
setDefaultShort(short) - +Static method in class org.apache.commons.beanutils.ConvertUtils +
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +
setDefaultShort(short) - +Method in class org.apache.commons.beanutils.ConvertUtilsBean +
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +
setDefaultValue(Object) - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Set the default value, converting as required. +
setDelimiter(char) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Set the delimiter to be used for parsing a delimited String. +
setDynaBeanClass(Class) - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Set the Class object we will use to create new instances in the + newInstance() method. +
setElementDynaClass(DynaClass) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Set the element Type and DynaClass. +
setElementType(Class) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Set the element Type and DynaClass. +
setFast(boolean) - +Method in class org.apache.commons.collections.FastHashMap +
Sets whether this map is operating in fast mode. +
setIndex(int) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Set the indexed property index. +
setIndex(int) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Set the indexed property index. +
setIndexedProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Sets the value of the specified indexed property of the specified + bean, with no type conversions. +
setIndexedProperty(Object, String, int, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Sets the value of the specified indexed property of the specified + bean, with no type conversions. +
setIndexedProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the specified indexed property of the specified + bean, with no type conversions. +
setIndexedProperty(Object, String, int, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the specified indexed property of the specified + bean, with no type conversions. +
setInstance(BeanUtilsBean) - +Static method in class org.apache.commons.beanutils.BeanUtilsBean +
Sets the instance which provides the functionality for BeanUtils. +
setInstance(LocaleBeanUtilsBean) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Sets the instance which provides the functionality for LocaleBeanUtils. +
setKey(String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Set the mapped property key. +
setKey(String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Set the mapped property key. +
setLenient(boolean) - +Method in class org.apache.commons.beanutils.locale.converters.DateLocaleConverter +
Specify whether or not date-time parsing should be lenient. +
setLocale(Locale) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Set the Locale for the Converter. +
setLocale(Locale) - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Set the Locale for the Converter. +
setMap(Map) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Set the Map backing this DynaBean +
setMappedProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Sets the value of the specified mapped property of the + specified bean, with no type conversions. +
setMappedProperty(Object, String, String, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Sets the value of the specified mapped property of the specified + bean, with no type conversions. +
setMappedProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the specified mapped property of the + specified bean, with no type conversions. +
setMappedProperty(Object, String, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the specified mapped property of the specified + bean, with no type conversions. +
setMappedReadMethod(Method) - +Method in class org.apache.commons.beanutils.MappedPropertyDescriptor +
Sets the method that should be used to read one of the property value. +
setMappedWriteMethod(Method) - +Method in class org.apache.commons.beanutils.MappedPropertyDescriptor +
Sets the method that should be used to write the property value. +
setName(String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Set the property name (includes indexed/mapped expr). +
setName(String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Set the property name (includes indexed/mapped expr). +
setNestedProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Sets the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions. +
setNestedProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions. +
setOnlyFirstToString(boolean) - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Indicates whether converting to a String should create + a delimited list or just convert the first value. +
setPattern(String) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Set a date format pattern to use to convert + dates to/from a java.lang.String. +
setPattern(String) - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Set a number format pattern to use to convert + Numbers to/from a java.lang.String. +
setPatterns(String[]) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Set the date format patterns to use to convert + dates to/from a java.lang.String. +
setPredicate(Predicate) - +Method in class org.apache.commons.beanutils.BeanPredicate +
Sets the Predicate to be applied to the value of the named property + during BeanPredicate.evaluate(Object). +
setProperties(DynaProperty[]) - +Method in class org.apache.commons.beanutils.BasicDynaClass +
Set the list of dynamic properties supported by this DynaClass. +
setProperty(String) - +Method in class org.apache.commons.beanutils.BeanComparator +
Sets the method to be called to compare two JavaBeans +
setProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.BeanUtils +
Set the specified property value, performing type conversions as + required to conform to the type of the destination property. +
setProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.BeanUtilsBean +
Set the specified property value, performing type conversions as + required to conform to the type of the destination property. +
setProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination property + using the default conversion pattern of the corresponding LocaleConverter. +
setProperty(Object, String, Object, String) - +Static method in class org.apache.commons.beanutils.locale.LocaleBeanUtils +
Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination + property using the specified conversion pattern. +
setProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination property + using the default conversion pattern of the corresponding LocaleConverter. +
setProperty(Object, String, Object, String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean +
Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination + property using the specified conversion pattern. +
setProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Set the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions. +
setProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions. +
setPropertyName(String) - +Method in class org.apache.commons.beanutils.BeanPredicate +
Sets the name of the property whose value is to be predicated. +
setPropertyOfMapBean(Map, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
This method is called by method setNestedProperty when the current bean + is found to be a Map object, and defines how to deal with setting + a property on a Map. +
setPropName(String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Set the property name. +
setPropName(String) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Set the property name. +
setResolver(Resolver) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Configure the Resolver implementation used by BeanUtils. +
setRestricted(boolean) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Set whether this DynaClass is currently restricted. +
setRestricted(boolean) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Set whether this DynaClass is currently restricted. +
setRestricted(boolean) - +Method in interface org.apache.commons.beanutils.MutableDynaClass +
Set the restricted state of this DynaClass to the specified value. +
setReturnNull(boolean) - +Method in class org.apache.commons.beanutils.LazyDynaClass +
Set whether this DynaClass should return a null from + the getDynaProperty(name) method if the property + doesn't exist. +
setReturnNull(boolean) - +Method in class org.apache.commons.beanutils.LazyDynaMap +
Set whether this DynaClass should return a null from + the getDynaProperty(name) method if the property + doesn't exist. +
setSimpleProperty(Object, String, Object) - +Static method in class org.apache.commons.beanutils.PropertyUtils +
Set the value of the specified simple property of the specified bean, + with no type conversions. +
setSimpleProperty(Object, String, Object) - +Method in class org.apache.commons.beanutils.PropertyUtilsBean +
Set the value of the specified simple property of the specified bean, + with no type conversions. +
setTarget(Object) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor +
Deprecated. Set the target bean. +
setTarget(Object) - +Method in class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor +
Deprecated. Set the target bean. +
setTimeZone(TimeZone) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Set the Time Zone to use when converting dates. +
setUseLocaleFormat(boolean) - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Indicate whether conversion should use a format/pattern or not. +
setUseLocaleFormat(boolean) - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Set whether a format should be used to convert + the Number. +
setValue(Object) - +Method in class org.apache.commons.beanutils.BeanMap.Entry +
Sets the value. +
Short_ZERO - +Static variable in class org.apache.commons.beanutils.LazyDynaBean +
Short Zero +
ShortArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
ShortArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.ShortArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
ShortArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.ShortArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
ShortConverter - Class in org.apache.commons.beanutils.converters
NumberConverter implementation that handles conversion to + and from java.lang.Short objects.
ShortConverter() - +Constructor for class org.apache.commons.beanutils.converters.ShortConverter +
Construct a java.lang.Short Converter that throws + a ConversionException if an error occurs. +
ShortConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.ShortConverter +
Construct a java.lang.Short Converter that returns + a default value if an error occurs. +
ShortLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
ShortLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ShortLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ShortLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ShortLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ShortLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ShortLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
ShortLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ShortLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ShortLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ShortLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ShortLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
ShortLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
size() - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the number of properties defined by the bean. +
size() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Returns the number properties in the decorated + DynaBean. +
size(String) - +Method in class org.apache.commons.beanutils.LazyDynaBean +
Return the size of an indexed or mapped property. +
size() - +Method in class org.apache.commons.collections.FastHashMap +
Return the number of key-value mappings in this map. +
SqlDateConverter - Class in org.apache.commons.beanutils.converters
DateTimeConverter implementation that handles conversion to + and from java.sql.Date objects.
SqlDateConverter() - +Constructor for class org.apache.commons.beanutils.converters.SqlDateConverter +
Construct a java.sql.Date Converter that throws + a ConversionException if an error occurs. +
SqlDateConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.SqlDateConverter +
Construct a java.sql.Date Converter that returns + a default value if an error occurs. +
SqlDateLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
SqlDateLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlDateLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlDateLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlDateLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlDateLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlDateLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlDateLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlDateLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlDateLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlDateLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlDateLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlDateLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimeConverter - Class in org.apache.commons.beanutils.converters
DateTimeConverter implementation that handles conversion to + and from java.sql.Time objects.
SqlTimeConverter() - +Constructor for class org.apache.commons.beanutils.converters.SqlTimeConverter +
Construct a java.sql.Time Converter that throws + a ConversionException if an error occurs. +
SqlTimeConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.SqlTimeConverter +
Construct a java.sql.Time Converter that returns + a default value if an error occurs. +
SqlTimeLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimeLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimeLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimeLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimeLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimeLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimeLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimeLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimeLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimeLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimeLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimeLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimestampConverter - Class in org.apache.commons.beanutils.converters
DateTimeConverter implementation that handles conversion to + and from java.sql.Timestamp objects.
SqlTimestampConverter() - +Constructor for class org.apache.commons.beanutils.converters.SqlTimestampConverter +
Construct a java.sql.Timestamp Converter that throws + a ConversionException if an error occurs. +
SqlTimestampConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.SqlTimestampConverter +
Construct a java.sql.Timestamp Converter that returns + a default value if an error occurs. +
SqlTimestampLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimestampLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimestampLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimestampLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimestampLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimestampLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
SqlTimestampLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimestampLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimestampLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimestampLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimestampLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
SqlTimestampLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
StringArrayConverter - Class in org.apache.commons.beanutils.converters
Deprecated. Replaced by the new ArrayConverter implementation
StringArrayConverter() - +Constructor for class org.apache.commons.beanutils.converters.StringArrayConverter +
Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs. +
StringArrayConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.StringArrayConverter +
Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs. +
StringConverter - Class in org.apache.commons.beanutils.converters
Converter + implementation that converts an incoming + object into a java.lang.String object.
StringConverter() - +Constructor for class org.apache.commons.beanutils.converters.StringConverter +
Construct a java.lang.String Converter that throws + a ConversionException if an error occurs. +
StringConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.StringConverter +
Construct a java.lang.String Converter that returns + a default value if an error occurs. +
StringLocaleConverter - Class in org.apache.commons.beanutils.locale.converters
Standard LocaleConverter + implementation that converts an incoming + locale-sensitive object into a java.lang.String object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
StringLocaleConverter() - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
StringLocaleConverter(boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
StringLocaleConverter(Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
StringLocaleConverter(Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
StringLocaleConverter(Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
StringLocaleConverter(Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +
StringLocaleConverter(Object) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
StringLocaleConverter(Object, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
StringLocaleConverter(Object, Locale) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
StringLocaleConverter(Object, Locale, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
StringLocaleConverter(Object, Locale, String) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
StringLocaleConverter(Object, Locale, String, boolean) - +Constructor for class org.apache.commons.beanutils.locale.converters.StringLocaleConverter +
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +
strings - +Static variable in class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. Model object for string arrays. +
+
+

+T

+
+
toArray() - +Method in class org.apache.commons.beanutils.LazyDynaList +
Converts the List to an Array. +
toArray(Object[]) - +Method in class org.apache.commons.beanutils.LazyDynaList +
Converts the List to an Array of the specified type. +
toDynaBeanArray() - +Method in class org.apache.commons.beanutils.LazyDynaList +
Converts the List to an DynaBean Array. +
toNonPrimitiveClass(Class) - +Static method in class org.apache.commons.beanutils.MethodUtils +
Find a non primitive representation for given primitive class. +
toString() - +Method in class org.apache.commons.beanutils.BeanMap +
Renders a string representation of this object. +
toString() - +Method in class org.apache.commons.beanutils.converters.AbstractConverter +
Provide a String representation of this converter. +
toString() - +Method in class org.apache.commons.beanutils.converters.ArrayConverter +
Provide a String representation of this array converter. +
toString() - +Method in class org.apache.commons.beanutils.converters.ConverterFacade +
Provide a String representation of this facade implementation + sand the underlying Converter it delegates to. +
toString() - +Method in class org.apache.commons.beanutils.converters.DateTimeConverter +
Provide a String representation of this date/time converter. +
toString() - +Method in class org.apache.commons.beanutils.converters.NumberConverter +
Provide a String representation of this number converter. +
toString() - +Method in class org.apache.commons.beanutils.DynaProperty +
Return a String representation of this Object. +
transform(Object) - +Method in class org.apache.commons.beanutils.BeanToPropertyValueTransformer +
Returns the value of the property named in the transformer's constructor for + the object provided. +
type - +Variable in class org.apache.commons.beanutils.DynaProperty +
Property type +
+
+

+U

+
+
unset() - +Method in class org.apache.commons.beanutils.ContextClassLoaderLocal +
Unsets the value associated with the current thread's context classloader +
unset(ClassLoader) - +Method in class org.apache.commons.beanutils.ContextClassLoaderLocal +
Unsets the value associated with the given classloader +
URLConverter - Class in org.apache.commons.beanutils.converters
Converter implementaion that handles conversion + to and from java.net.URL objects.
URLConverter() - +Constructor for class org.apache.commons.beanutils.converters.URLConverter +
Construct a java.net.URL Converter that throws + a ConversionException if an error occurs. +
URLConverter(Object) - +Constructor for class org.apache.commons.beanutils.converters.URLConverter +
Construct a java.net.URL Converter that returns + a default value if an error occurs. +
useDefault - +Variable in class org.apache.commons.beanutils.converters.AbstractArrayConverter +
Deprecated. Should we return the default value on conversion errors? +
useDefault - +Variable in class org.apache.commons.beanutils.locale.BaseLocaleConverter +
Should we return the default value on conversion errors? +
+
+

+V

+
+
valueIterator() - +Method in class org.apache.commons.beanutils.BeanMap +
Convenience method for getting an iterator over the values. +
values - +Variable in class org.apache.commons.beanutils.BasicDynaBean +
The set of property values for this DynaBean, keyed by property name. +
values() - +Method in class org.apache.commons.beanutils.BeanMap +
Returns the values for the BeanMap. +
values() - +Method in class org.apache.commons.beanutils.DynaBeanMapDecorator +
Returns the set of property values in the + decorated DynaBean. +
values - +Variable in class org.apache.commons.beanutils.LazyDynaBean +
The MutableDynaClass "base class" that this DynaBean + is associated with. +
values() - +Method in class org.apache.commons.collections.FastHashMap +
Return a collection view of the values contained in this map. +
+
+

+W

+
+
WrapDynaBean - Class in org.apache.commons.beanutils
Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties.
WrapDynaBean(Object) - +Constructor for class org.apache.commons.beanutils.WrapDynaBean +
Construct a new DynaBean associated with the specified + JavaBean instance. +
WrapDynaClass - Class in org.apache.commons.beanutils
Implementation of DynaClass for DynaBeans that wrap + standard JavaBean instances.
+
+A B C D E F G H I K L M N O P R S T U V W + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index.html new file mode 100644 index 0000000..eabe406 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/index.html @@ -0,0 +1,40 @@ + + + + + + + +Commons BeanUtils 1.8.3 API + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/options b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/options new file mode 100644 index 0000000..a97729b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/options @@ -0,0 +1,30 @@ +-classpath +'C:/svn/beanutils-1.8.3-RC1/target/classes;C:/Documents and Settings/pemben/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar;C:/Documents and Settings/pemben/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar' +-encoding +'iso-8859-1' +-protected +-quiet +-source +'1.3' +-sourcepath +'C:/svn/beanutils-1.8.3-RC1/src/main/java' +-author +-bottom +'Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved.' +-charset +'iso-8859-1' +-d +'C:/svn/beanutils-1.8.3-RC1/target/site/apidocs' +-docencoding +'iso-8859-1' +-doctitle +'Commons BeanUtils 1.8.3 API' +-link +'http://java.sun.com/j2se/1.4.2/docs/api' +-link +'http://commons.apache.org/collections/api-release' +-linksource +-use +-version +-windowtitle +'Commons BeanUtils 1.8.3 API' \ No newline at end of file diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaBean.html new file mode 100644 index 0000000..ceb4e45 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaBean.html @@ -0,0 +1,703 @@ + + + + + + + +BasicDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BasicDynaBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BasicDynaBean
+
+
+
All Implemented Interfaces:
Serializable, DynaBean
+
+
+
+
public class BasicDynaBean
extends Object
implements DynaBean, Serializable
+ + +

+

Minimal implementation of the DynaBean interface. Can be + used as a convenience base class for more sophisticated implementations.

+ +

IMPLEMENTATION NOTE - Instances of this class that are + accessed from multiple threads simultaneously need to be synchronized.

+ +

IMPLEMENTATION NOTE - Instances of this class can be + successfully serialized and deserialized ONLY if all + property values are Serializable.

+

+ +

+

+
Version:
+
$Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Craig McClanahan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+protected  DynaClassdynaClass + +
+          The DynaClass "base class" that this DynaBean + is associated with.
+protected  HashMapvalues + +
+          The set of property values for this DynaBean, keyed by property name.
+  + + + + + + + + + + +
+Constructor Summary
BasicDynaBean(DynaClass dynaClass) + +
+          Construct a new DynaBean associated with the specified + DynaClass instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleancontains(String name, + String key) + +
+          Does the specified mapped property contain a value for the specified + key value?
+ Objectget(String name) + +
+          Return the value of a simple property with the specified name.
+ Objectget(String name, + int index) + +
+          Return the value of an indexed property with the specified name.
+ Objectget(String name, + String key) + +
+          Return the value of a mapped property with the specified name, + or null if there is no value for the specified key.
+ DynaClassgetDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+protected  DynaPropertygetDynaProperty(String name) + +
+          Return the property descriptor for the specified property name.
+ MapgetMap() + +
+          Return a Map representation of this DynaBean.
+protected  booleanisAssignable(Class dest, + Class source) + +
+          Is an object of the source class assignable to the destination class?
+ voidremove(String name, + String key) + +
+          Remove any existing value for the specified key on the + specified mapped property.
+ voidset(String name, + int index, + Object value) + +
+          Set the value of an indexed property with the specified name.
+ voidset(String name, + Object value) + +
+          Set the value of a simple property with the specified name.
+ voidset(String name, + String key, + Object value) + +
+          Set the value of a mapped property with the specified name.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+dynaClass

+
+protected DynaClass dynaClass
+
+
The DynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+
+ +

+values

+
+protected HashMap values
+
+
The set of property values for this DynaBean, keyed by property name. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+BasicDynaBean

+
+public BasicDynaBean(DynaClass dynaClass)
+
+
Construct a new DynaBean associated with the specified + DynaClass instance. +

+

+
Parameters:
dynaClass - The DynaClass we are associated with
+
+ + + + + + + + +
+Method Detail
+ +

+getMap

+
+public Map getMap()
+
+
Return a Map representation of this DynaBean. +

+ This, for example, could be used in JSTL in the following way to access + a DynaBean's fooProperty: +
  • ${myDynaBean.map.fooProperty}
+

+

+
+
+
+ +
Returns:
a Map representation of this DynaBean
Since:
+
1.8.0
+
+
+
+
+ +

+contains

+
+public boolean contains(String name,
+                        String key)
+
+
Does the specified mapped property contain a value for the specified + key value? +

+

+
Specified by:
contains in interface DynaBean
+
+
+
Parameters:
name - Name of the property to check
key - Name of the key to check +
Returns:
true if the mapped property contains a value for + the specified key, otherwise false +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+public Object get(String name)
+
+
Return the value of a simple property with the specified name. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved +
Returns:
The property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+public Object get(String name,
+                  int index)
+
+
Return the value of an indexed property with the specified name. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
index - Index of the value to be retrieved +
Returns:
The indexed property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property +
NullPointerException - if no array or List has been + initialized for this property
+
+
+
+ +

+get

+
+public Object get(String name,
+                  String key)
+
+
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
key - Key of the value to be retrieved +
Returns:
The mapped property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getDynaClass

+
+public DynaClass getDynaClass()
+
+
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +

+

+
Specified by:
getDynaClass in interface DynaBean
+
+
+ +
Returns:
The associated DynaClass
+
+
+
+ +

+remove

+
+public void remove(String name,
+                   String key)
+
+
Remove any existing value for the specified key on the + specified mapped property. +

+

+
Specified by:
remove in interface DynaBean
+
+
+
Parameters:
name - Name of the property for which a value is to + be removed
key - Key of the value to be removed +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+set

+
+public void set(String name,
+                Object value)
+
+
Set the value of a simple property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
NullPointerException - if an attempt is made to set a + primitive property to null
+
+
+
+ +

+set

+
+public void set(String name,
+                int index,
+                Object value)
+
+
Set the value of an indexed property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
index - Index of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property
+
+
+
+ +

+set

+
+public void set(String name,
+                String key,
+                Object value)
+
+
Set the value of a mapped property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
key - Key of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getDynaProperty

+
+protected DynaProperty getDynaProperty(String name)
+
+
Return the property descriptor for the specified property name. +

+

+
+
+
+
Parameters:
name - Name of the property for which to retrieve the descriptor +
Returns:
The property descriptor +
Throws: +
IllegalArgumentException - if this is not a valid property + name for our DynaClass
+
+
+
+ +

+isAssignable

+
+protected boolean isAssignable(Class dest,
+                               Class source)
+
+
Is an object of the source class assignable to the destination class? +

+

+
+
+
+
Parameters:
dest - Destination class
source - Source class +
Returns:
true if the source class is assignable to the + destination class, otherwise false
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaClass.html new file mode 100644 index 0000000..bae103f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BasicDynaClass.html @@ -0,0 +1,678 @@ + + + + + + + +BasicDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BasicDynaClass

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BasicDynaClass
+
+
+
All Implemented Interfaces:
Serializable, DynaClass
+
+
+
Direct Known Subclasses:
LazyDynaClass
+
+
+
+
public class BasicDynaClass
extends Object
implements DynaClass, Serializable
+ + +

+

Minimal implementation of the DynaClass interface. Can be + used as a convenience base class for more sophisticated implementations.

* +

IMPLEMENTATION NOTE - The DynaBean + implementation class supplied to our constructor MUST have a one-argument + constructor of its own that accepts a DynaClass. This is + used to associate the DynaBean instance with this DynaClass.

+

+ +

+

+
Version:
+
$Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Craig McClanahan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  Constructorconstructor + +
+          The constructor of the dynaBeanClass that we will use + for creating new instances.
+protected static Class[]constructorTypes + +
+          The method signature of the constructor we will use to create + new DynaBean instances.
+protected  Object[]constructorValues + +
+          The argument values to be passed to the constructore we will use + to create new DynaBean instances.
+protected  ClassdynaBeanClass + +
+          The DynaBean implementation class we will use for + creating new instances.
+protected  Stringname + +
+          The "name" of this DynaBean class.
+protected  DynaProperty[]properties + +
+          The set of dynamic properties that are part of this DynaClass.
+protected  HashMappropertiesMap + +
+          The set of dynamic properties that are part of this DynaClass, + keyed by the property name.
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
BasicDynaClass() + +
+          Construct a new BasicDynaClass with default parameters.
BasicDynaClass(String name, + Class dynaBeanClass) + +
+          Construct a new BasicDynaClass with the specified parameters.
BasicDynaClass(String name, + Class dynaBeanClass, + DynaProperty[] properties) + +
+          Construct a new BasicDynaClass with the specified parameters.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ClassgetDynaBeanClass() + +
+          Return the Class object we will use to create new instances in the + newInstance() method.
+ DynaProperty[]getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it exists; + otherwise, return null.
+ StringgetName() + +
+          Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.
+ DynaBeannewInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+protected  voidsetDynaBeanClass(Class dynaBeanClass) + +
+          Set the Class object we will use to create new instances in the + newInstance() method.
+protected  voidsetProperties(DynaProperty[] properties) + +
+          Set the list of dynamic properties supported by this DynaClass.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+constructor

+
+protected transient Constructor constructor
+
+
The constructor of the dynaBeanClass that we will use + for creating new instances. +

+

+
+
+
+ +

+constructorTypes

+
+protected static Class[] constructorTypes
+
+
The method signature of the constructor we will use to create + new DynaBean instances. +

+

+
+
+
+ +

+constructorValues

+
+protected Object[] constructorValues
+
+
The argument values to be passed to the constructore we will use + to create new DynaBean instances. +

+

+
+
+
+ +

+dynaBeanClass

+
+protected Class dynaBeanClass
+
+
The DynaBean implementation class we will use for + creating new instances. +

+

+
+
+
+ +

+name

+
+protected String name
+
+
The "name" of this DynaBean class. +

+

+
+
+
+ +

+properties

+
+protected DynaProperty[] properties
+
+
The set of dynamic properties that are part of this DynaClass. +

+

+
+
+
+ +

+propertiesMap

+
+protected HashMap propertiesMap
+
+
The set of dynamic properties that are part of this DynaClass, + keyed by the property name. Individual descriptor instances will + be the same instances as those in the properties list. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+BasicDynaClass

+
+public BasicDynaClass()
+
+
Construct a new BasicDynaClass with default parameters. +

+

+
+ +

+BasicDynaClass

+
+public BasicDynaClass(String name,
+                      Class dynaBeanClass)
+
+
Construct a new BasicDynaClass with the specified parameters. +

+

+
Parameters:
name - Name of this DynaBean class
dynaBeanClass - The implementation class for new instances
+
+
+ +

+BasicDynaClass

+
+public BasicDynaClass(String name,
+                      Class dynaBeanClass,
+                      DynaProperty[] properties)
+
+
Construct a new BasicDynaClass with the specified parameters. +

+

+
Parameters:
name - Name of this DynaBean class
dynaBeanClass - The implementation class for new intances
properties - Property descriptors for the supported properties
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public String getName()
+
+
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties. +

+

+
Specified by:
getName in interface DynaClass
+
+
+ +
Returns:
the name of the DynaClass
+
+
+
+ +

+getDynaProperty

+
+public DynaProperty getDynaProperty(String name)
+
+
Return a property descriptor for the specified property, if it exists; + otherwise, return null. +

+

+
Specified by:
getDynaProperty in interface DynaClass
+
+
+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+getDynaProperties

+
+public DynaProperty[] getDynaProperties()
+
+

Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. If no properties are defined, a + zero-length array will be returned.

+ +

FIXME - Should we really be implementing + getBeanInfo() instead, which returns property descriptors + and a bunch of other stuff?

+

+

+
Specified by:
getDynaProperties in interface DynaClass
+
+
+ +
Returns:
the set of properties for this DynaClass
+
+
+
+ +

+newInstance

+
+public DynaBean newInstance()
+                     throws IllegalAccessException,
+                            InstantiationException
+
+
Instantiate and return a new DynaBean instance, associated + with this DynaClass. +

+

+
Specified by:
newInstance in interface DynaClass
+
+
+ +
Returns:
A new DynaBean instance +
Throws: +
IllegalAccessException - if the Class or the appropriate + constructor is not accessible +
InstantiationException - if this Class represents an abstract + class, an array class, a primitive type, or void; or if instantiation + fails for some other reason
+
+
+
+ +

+getDynaBeanClass

+
+public Class getDynaBeanClass()
+
+
Return the Class object we will use to create new instances in the + newInstance() method. This Class MUST + implement the DynaBean interface. +

+

+
+
+
+ +
Returns:
The class of the DynaBean
+
+
+
+ +

+setDynaBeanClass

+
+protected void setDynaBeanClass(Class dynaBeanClass)
+
+
Set the Class object we will use to create new instances in the + newInstance() method. This Class MUST + implement the DynaBean interface. +

+

+
+
+
+
Parameters:
dynaBeanClass - The new Class object +
Throws: +
IllegalArgumentException - if the specified Class does not + implement the DynaBean interface
+
+
+
+ +

+setProperties

+
+protected void setProperties(DynaProperty[] properties)
+
+
Set the list of dynamic properties supported by this DynaClass. +

+

+
+
+
+
Parameters:
properties - List of dynamic properties to be supported
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanAccessLanguageException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanAccessLanguageException.html new file mode 100644 index 0000000..644b89b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanAccessLanguageException.html @@ -0,0 +1,276 @@ + + + + + + + +BeanAccessLanguageException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanAccessLanguageException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by java.lang.RuntimeException
+              extended by java.lang.IllegalArgumentException
+                  extended by org.apache.commons.beanutils.BeanAccessLanguageException
+
+
+
All Implemented Interfaces:
Serializable
+
+
+
Direct Known Subclasses:
NestedNullException
+
+
+
+
public class BeanAccessLanguageException
extends IllegalArgumentException
+ + +

+Thrown to indicate that the Bean Access Language cannot execute query + against given bean. This is a runtime exception and access langauges are encouraged + to subclass to create custom exceptions whenever appropriate. +

+ +

+

+
Since:
+
1.7
+
Author:
+
Robert Burrell Donkin
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
BeanAccessLanguageException() + +
+          Constructs a BeanAccessLanguageException without a detail message.
BeanAccessLanguageException(String message) + +
+          Constructs a BeanAccessLanguageException without a detail message.
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanAccessLanguageException

+
+public BeanAccessLanguageException()
+
+
Constructs a BeanAccessLanguageException without a detail message. +

+

+
+ +

+BeanAccessLanguageException

+
+public BeanAccessLanguageException(String message)
+
+
Constructs a BeanAccessLanguageException without a detail message. +

+

+
Parameters:
message - the detail message explaining this exception
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanComparator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanComparator.html new file mode 100644 index 0000000..02a2838 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanComparator.html @@ -0,0 +1,485 @@ + + + + + + + +BeanComparator (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanComparator

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanComparator
+
+
+
All Implemented Interfaces:
Serializable, Comparator
+
+
+
+
public class BeanComparator
extends Object
implements Comparator, Serializable
+ + +

+

+ This comparator compares two beans by the specified bean property. + It is also possible to compare beans based on nested, indexed, + combined, mapped bean properties. Please see the PropertyUtilsBean + documentation for all property name possibilities. + +

+ Note: The BeanComparator passes the values of the specified + bean property to a ComparableComparator, if no comparator is + specified in the constructor. If you are comparing two beans based + on a property that could contain "null" values, a suitable Comparator + or ComparatorChain should be supplied in the constructor. +

+

+ +

+

+
Author:
+
Eric Pugh, Tim O'Brien
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
BeanComparator() + +
+          Constructs a Bean Comparator without a property set.
BeanComparator(String property) + +
+          Constructs a property-based comparator for beans.
BeanComparator(String property, + Comparator comparator) + +
+          Constructs a property-based comparator for beans.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intcompare(Object o1, + Object o2) + +
+          Compare two JavaBeans by their shared property.
+ booleanequals(Object o) + +
+          Two BeanComparator's are equals if and only if + the wrapped comparators and the property names to be compared + are equal.
+ ComparatorgetComparator() + +
+          Gets the Comparator being used to compare beans.
+ StringgetProperty() + +
+          Gets the property attribute of the BeanComparator
+ inthashCode() + +
+          Hashcode compatible with equals.
+ voidsetProperty(String property) + +
+          Sets the method to be called to compare two JavaBeans
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanComparator

+
+public BeanComparator()
+
+

Constructs a Bean Comparator without a property set. +

+ Note that this is intended to be used + only in bean-centric environments. +

+ Until setProperty(java.lang.String) is called with a non-null value. + this comparator will compare the Objects only. +

+

+

+
+ +

+BeanComparator

+
+public BeanComparator(String property)
+
+

Constructs a property-based comparator for beans. + This compares two beans by the property + specified in the property parameter. This constructor creates + a BeanComparator that uses a ComparableComparator + to compare the property values. +

+ +

Passing "null" to this constructor will cause the BeanComparator + to compare objects based on natural order, that is + java.lang.Comparable. +

+

+

+
Parameters:
property - String Name of a bean property, which may contain the + name of a simple, nested, indexed, mapped, or combined + property. See PropertyUtilsBean for property query language syntax. + If the property passed in is null then the actual objects will be compared
+
+
+ +

+BeanComparator

+
+public BeanComparator(String property,
+                      Comparator comparator)
+
+
Constructs a property-based comparator for beans. + This constructor creates + a BeanComparator that uses the supplied Comparator to compare + the property values. +

+

+
Parameters:
property - Name of a bean property, can contain the name + of a simple, nested, indexed, mapped, or combined + property. See PropertyUtilsBean for property query language + syntax.
comparator - BeanComparator will pass the values of the + specified bean property to this Comparator. + If your bean property is not a comparable or + contains null values, a suitable comparator + may be supplied in this constructor.
+
+ + + + + + + + +
+Method Detail
+ +

+setProperty

+
+public void setProperty(String property)
+
+
Sets the method to be called to compare two JavaBeans +

+

+
+
+
+
Parameters:
property - String method name to call to compare + If the property passed in is null then the actual objects will be compared
+
+
+
+ +

+getProperty

+
+public String getProperty()
+
+
Gets the property attribute of the BeanComparator +

+

+
+
+
+ +
Returns:
String method name to call to compare. + A null value indicates that the actual objects will be compared
+
+
+
+ +

+getComparator

+
+public Comparator getComparator()
+
+
Gets the Comparator being used to compare beans. +

+

+
+
+
+ +
Returns:
the Comparator being used to compare beans
+
+
+
+ +

+compare

+
+public int compare(Object o1,
+                   Object o2)
+
+
Compare two JavaBeans by their shared property. + If getProperty() is null then the actual objects will be compared. +

+

+
Specified by:
compare in interface Comparator
+
+
+
Parameters:
o1 - Object The first bean to get data from to compare against
o2 - Object The second bean to get data from to compare +
Returns:
int negative or positive based on order
+
+
+
+ +

+equals

+
+public boolean equals(Object o)
+
+
Two BeanComparator's are equals if and only if + the wrapped comparators and the property names to be compared + are equal. +

+

+
Specified by:
equals in interface Comparator
Overrides:
equals in class Object
+
+
+
Parameters:
o - Comparator to compare to +
Returns:
whether the the comparators are equal or not
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
Hashcode compatible with equals. +

+

+
Overrides:
hashCode in class Object
+
+
+ +
Returns:
the hash code for this comparator
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.Entry.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.Entry.html new file mode 100644 index 0000000..430b79f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.Entry.html @@ -0,0 +1,326 @@ + + + + + + + +BeanMap.Entry (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanMap.Entry

+
+java.lang.Object
+  extended by org.apache.commons.collections.keyvalue.AbstractKeyValue
+      extended by org.apache.commons.collections.keyvalue.AbstractMapEntry
+          extended by org.apache.commons.beanutils.BeanMap.Entry
+
+
+
All Implemented Interfaces:
Map.Entry, KeyValue
+
+
+
Enclosing class:
BeanMap
+
+
+
+
protected static class BeanMap.Entry
extends AbstractMapEntry
+ + +

+Map entry used by BeanMap. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.collections.keyvalue.AbstractKeyValue
key, value
+  + + + + + + + + + + + +
+Constructor Summary
+protected BeanMap.Entry(BeanMap owner, + Object key, + Object value) + +
+          Constructs a new Entry.
+  + + + + + + + + + + + +
+Method Summary
+ ObjectsetValue(Object value) + +
+          Sets the value.
+ + + + + + + +
Methods inherited from class org.apache.commons.collections.keyvalue.AbstractMapEntry
equals, hashCode
+ + + + + + + +
Methods inherited from class org.apache.commons.collections.keyvalue.AbstractKeyValue
getKey, getValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
+ + + + + + + +
Methods inherited from interface java.util.Map.Entry
getKey, getValue
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanMap.Entry

+
+protected BeanMap.Entry(BeanMap owner,
+                        Object key,
+                        Object value)
+
+
Constructs a new Entry. +

+

+
Parameters:
owner - the BeanMap this entry belongs to
key - the key for this entry
value - the value for this entry
+
+ + + + + + + + +
+Method Detail
+ +

+setValue

+
+public Object setValue(Object value)
+
+
Sets the value. +

+

+
Specified by:
setValue in interface Map.Entry
Overrides:
setValue in class AbstractMapEntry
+
+
+
Parameters:
value - the new value for the entry +
Returns:
the old value for the entry
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.html new file mode 100644 index 0000000..7e78221 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.html @@ -0,0 +1,1226 @@ + + + + + + + +BeanMap (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanMap

+
+java.lang.Object
+  extended by java.util.AbstractMap
+      extended by org.apache.commons.beanutils.BeanMap
+
+
+
All Implemented Interfaces:
Cloneable, Map
+
+
+
+
public class BeanMap
extends AbstractMap
implements Cloneable
+ + +

+An implementation of Map for JavaBeans which uses introspection to + get and put properties in the bean. +

+ If an exception occurs during attempts to get or set a property then the + property is considered non existent in the Map +

+ +

+

+
Version:
+
$Revision: 812176 $ $Date: 2009-09-07 15:59:25 +0100 (Mon, 07 Sep 2009) $
+
Author:
+
James Strachan, Stephen Colebourne
+
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+protected static classBeanMap.Entry + +
+          Map entry used by BeanMap.
+ + + + + + + +
Nested classes/interfaces inherited from class java.util.AbstractMap
AbstractMap.SimpleEntry, AbstractMap.SimpleImmutableEntry
+  + + + + + + + + + + + + + + + +
+Field Summary
+static HashMapdefaultTransformers + +
+          Deprecated. Use getTypeTransformer(Class) method
+static Object[]NULL_ARGUMENTS + +
+          An empty array.
+  + + + + + + + + + + + + + +
+Constructor Summary
BeanMap() + +
+          Constructs a new empty BeanMap.
BeanMap(Object bean) + +
+          Constructs a new BeanMap that operates on the + specified bean.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclear() + +
+          This method reinitializes the bean map to have default values for the + bean's properties.
+ Objectclone() + +
+          Clone this bean map using the following process: + + + If there is no underlying bean, return a cloned BeanMap without a + bean.
+ booleancontainsKey(Object name) + +
+          Returns true if the bean defines a property with the given name.
+ booleancontainsValue(Object value) + +
+          Returns true if the bean defines a property whose current value is + the given object.
+protected  ObjectconvertType(Class newType, + Object value) + +
+          Converts the given value to the given type.
+protected  Object[]createWriteMethodArguments(Method method, + Object value) + +
+          Creates an array of parameters to pass to the given mutator method.
+ IteratorentryIterator() + +
+          Convenience method for getting an iterator over the entries.
+ SetentrySet() + +
+          Gets a Set of MapEntry objects that are the mappings for this BeanMap.
+protected  voidfirePropertyChange(Object key, + Object oldValue, + Object newValue) + +
+          Called during a successful put(Object,Object) operation.
+ Objectget(Object name) + +
+          Returns the value of the bean's property with the given name.
+ ObjectgetBean() + +
+          Returns the bean currently being operated on.
+protected  MethodgetReadMethod(Object name) + +
+          Returns the accessor for the property with the given name.
+ MethodgetReadMethod(String name) + +
+          Returns the accessor for the property with the given name.
+ ClassgetType(String name) + +
+          Returns the type of the property with the given name.
+protected  TransformergetTypeTransformer(Class aType) + +
+          Returns a transformer for the given primitive type.
+protected  MethodgetWriteMethod(Object name) + +
+          Returns the mutator for the property with the given name.
+ MethodgetWriteMethod(String name) + +
+          Returns the mutator for the property with the given name.
+ IteratorkeyIterator() + +
+          Convenience method for getting an iterator over the keys.
+ SetkeySet() + +
+          Get the keys for this BeanMap.
+protected  voidlogInfo(Exception ex) + +
+          Logs the given exception to System.out.
+protected  voidlogWarn(Exception ex) + +
+          Logs the given exception to System.err.
+ Objectput(Object name, + Object value) + +
+          Sets the bean property with the given name to the given value.
+ voidputAllWriteable(BeanMap map) + +
+          Puts all of the writable properties from the given BeanMap into this + BeanMap.
+protected  voidreinitialise() + +
+          Reinitializes this bean.
+ voidsetBean(Object newBean) + +
+          Sets the bean to be operated on by this map.
+ intsize() + +
+          Returns the number of properties defined by the bean.
+ StringtoString() + +
+          Renders a string representation of this object.
+ IteratorvalueIterator() + +
+          Convenience method for getting an iterator over the values.
+ Collectionvalues() + +
+          Returns the values for the BeanMap.
+ + + + + + + +
Methods inherited from class java.util.AbstractMap
equals, hashCode, isEmpty, putAll, remove
+ + + + + + + +
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+NULL_ARGUMENTS

+
+public static final Object[] NULL_ARGUMENTS
+
+
An empty array. Used to invoke accessors via reflection. +

+

+
+
+
+ +

+defaultTransformers

+
+public static HashMap defaultTransformers
+
+
Deprecated. Use getTypeTransformer(Class) method
This HashMap has been made unmodifiable to prevent issues when + loaded in a shared ClassLoader enviroment. +

+

+
See Also:
"http://issues.apache.org/jira/browse/BEANUTILS-112"
+
+ + + + + + + + +
+Constructor Detail
+ +

+BeanMap

+
+public BeanMap()
+
+
Constructs a new empty BeanMap. +

+

+
+ +

+BeanMap

+
+public BeanMap(Object bean)
+
+
Constructs a new BeanMap that operates on the + specified bean. If the given bean is null, then + this map will be empty. +

+

+
Parameters:
bean - the bean for this map to operate on
+
+ + + + + + + + +
+Method Detail
+ +

+toString

+
+public String toString()
+
+
Renders a string representation of this object. +

+

+
Overrides:
toString in class AbstractMap
+
+
+ +
Returns:
a String representation of this object
+
+
+
+ +

+clone

+
+public Object clone()
+             throws CloneNotSupportedException
+
+
Clone this bean map using the following process: + +
    +
  • If there is no underlying bean, return a cloned BeanMap without a + bean. + +
  • Since there is an underlying bean, try to instantiate a new bean of + the same type using Class.newInstance(). + +
  • If the instantiation fails, throw a CloneNotSupportedException + +
  • Clone the bean map and set the newly instantiated bean as the + underlying bean for the bean map. + +
  • Copy each property that is both readable and writable from the + existing object to a cloned bean map. + +
  • If anything fails along the way, throw a + CloneNotSupportedException. + +
+
+ +

+putAllWriteable

+
+public void putAllWriteable(BeanMap map)
+
+
Puts all of the writable properties from the given BeanMap into this + BeanMap. Read-only and Write-only properties will be ignored. +

+

+
+
+
+
Parameters:
map - the BeanMap whose properties to put
+
+
+
+ +

+clear

+
+public void clear()
+
+
This method reinitializes the bean map to have default values for the + bean's properties. This is accomplished by constructing a new instance + of the bean which the map uses as its underlying data source. This + behavior for clear() differs from the Map contract in that + the mappings are not actually removed from the map (the mappings for a + BeanMap are fixed). +

+

+
Specified by:
clear in interface Map
Overrides:
clear in class AbstractMap
+
+
+
+
+
+
+ +

+containsKey

+
+public boolean containsKey(Object name)
+
+
Returns true if the bean defines a property with the given name. +

+ The given name must be a String; if not, this method + returns false. This method will also return false if the bean + does not define a property with that name. +

+ Write-only properties will not be matched as the test operates against + property read methods. +

+

+
Specified by:
containsKey in interface Map
Overrides:
containsKey in class AbstractMap
+
+
+
Parameters:
name - the name of the property to check +
Returns:
false if the given name is null or is not a String; + false if the bean does not define a property with that name; or + true if the bean does define a property with that name
+
+
+
+ +

+containsValue

+
+public boolean containsValue(Object value)
+
+
Returns true if the bean defines a property whose current value is + the given object. +

+

+
Specified by:
containsValue in interface Map
Overrides:
containsValue in class AbstractMap
+
+
+
Parameters:
value - the value to check +
Returns:
false true if the bean has at least one property whose + current value is that object, false otherwise
+
+
+
+ +

+get

+
+public Object get(Object name)
+
+
Returns the value of the bean's property with the given name. +

+ The given name must be a String and must not be + null; otherwise, this method returns null. + If the bean defines a property with the given name, the value of + that property is returned. Otherwise, null is + returned. +

+ Write-only properties will not be matched as the test operates against + property read methods. +

+

+
Specified by:
get in interface Map
Overrides:
get in class AbstractMap
+
+
+
Parameters:
name - the name of the property whose value to return +
Returns:
the value of the property with that name
+
+
+
+ +

+put

+
+public Object put(Object name,
+                  Object value)
+           throws IllegalArgumentException,
+                  ClassCastException
+
+
Sets the bean property with the given name to the given value. +

+

+
Specified by:
put in interface Map
Overrides:
put in class AbstractMap
+
+
+
Parameters:
name - the name of the property to set
value - the value to set that property to +
Returns:
the previous value of that property +
Throws: +
IllegalArgumentException - if the given name is null; + if the given name is not a String; if the bean doesn't + define a property with that name; or if the bean property with + that name is read-only +
ClassCastException - if an error occurs creating the method args
+
+
+
+ +

+size

+
+public int size()
+
+
Returns the number of properties defined by the bean. +

+

+
Specified by:
size in interface Map
Overrides:
size in class AbstractMap
+
+
+ +
Returns:
the number of properties defined by the bean
+
+
+
+ +

+keySet

+
+public Set keySet()
+
+
Get the keys for this BeanMap. +

+ Write-only properties are not included in the returned set of + property names, although it is possible to set their value and to get + their type. +

+

+
Specified by:
keySet in interface Map
Overrides:
keySet in class AbstractMap
+
+
+ +
Returns:
BeanMap keys. The Set returned by this method is not + modifiable.
+
+
+
+ +

+entrySet

+
+public Set entrySet()
+
+
Gets a Set of MapEntry objects that are the mappings for this BeanMap. +

+ Each MapEntry can be set but not removed. +

+

+
Specified by:
entrySet in interface Map
Specified by:
entrySet in class AbstractMap
+
+
+ +
Returns:
the unmodifiable set of mappings
+
+
+
+ +

+values

+
+public Collection values()
+
+
Returns the values for the BeanMap. +

+

+
Specified by:
values in interface Map
Overrides:
values in class AbstractMap
+
+
+ +
Returns:
values for the BeanMap. The returned collection is not + modifiable.
+
+
+
+ +

+getType

+
+public Class getType(String name)
+
+
Returns the type of the property with the given name. +

+

+
+
+
+
Parameters:
name - the name of the property +
Returns:
the type of the property, or null if no such + property exists
+
+
+
+ +

+keyIterator

+
+public Iterator keyIterator()
+
+
Convenience method for getting an iterator over the keys. +

+ Write-only properties will not be returned in the iterator. +

+

+
+
+
+ +
Returns:
an iterator over the keys
+
+
+
+ +

+valueIterator

+
+public Iterator valueIterator()
+
+
Convenience method for getting an iterator over the values. +

+

+
+
+
+ +
Returns:
an iterator over the values
+
+
+
+ +

+entryIterator

+
+public Iterator entryIterator()
+
+
Convenience method for getting an iterator over the entries. +

+

+
+
+
+ +
Returns:
an iterator over the entries
+
+
+
+ +

+getBean

+
+public Object getBean()
+
+
Returns the bean currently being operated on. The return value may + be null if this map is empty. +

+

+
+
+
+ +
Returns:
the bean being operated on by this map
+
+
+
+ +

+setBean

+
+public void setBean(Object newBean)
+
+
Sets the bean to be operated on by this map. The given value may + be null, in which case this map will be empty. +

+

+
+
+
+
Parameters:
newBean - the new bean to operate on
+
+
+
+ +

+getReadMethod

+
+public Method getReadMethod(String name)
+
+
Returns the accessor for the property with the given name. +

+

+
+
+
+
Parameters:
name - the name of the property +
Returns:
the accessor method for the property, or null
+
+
+
+ +

+getWriteMethod

+
+public Method getWriteMethod(String name)
+
+
Returns the mutator for the property with the given name. +

+

+
+
+
+
Parameters:
name - the name of the property +
Returns:
the mutator method for the property, or null
+
+
+
+ +

+getReadMethod

+
+protected Method getReadMethod(Object name)
+
+
Returns the accessor for the property with the given name. +

+

+
+
+
+
Parameters:
name - the name of the property +
Returns:
null if the name is null; null if the name is not a + String; null if no such property exists; or the accessor + method for that property
+
+
+
+ +

+getWriteMethod

+
+protected Method getWriteMethod(Object name)
+
+
Returns the mutator for the property with the given name. +

+

+
+
+
+
Parameters:
name - the name of the +
Returns:
null if the name is null; null if the name is not a + String; null if no such property exists; null if the + property is read-only; or the mutator method for that property
+
+
+
+ +

+reinitialise

+
+protected void reinitialise()
+
+
Reinitializes this bean. Called during setBean(Object). + Does introspection to find properties. +

+

+
+
+
+
+
+
+
+ +

+firePropertyChange

+
+protected void firePropertyChange(Object key,
+                                  Object oldValue,
+                                  Object newValue)
+
+
Called during a successful put(Object,Object) operation. + Default implementation does nothing. Override to be notified of + property changes in the bean caused by this map. +

+

+
+
+
+
Parameters:
key - the name of the property that changed
oldValue - the old value for that property
newValue - the new value for that property
+
+
+
+ +

+createWriteMethodArguments

+
+protected Object[] createWriteMethodArguments(Method method,
+                                              Object value)
+                                       throws IllegalAccessException,
+                                              ClassCastException
+
+
Creates an array of parameters to pass to the given mutator method. + If the given object is not the right type to pass to the method + directly, it will be converted using convertType(Class,Object). +

+

+
+
+
+
Parameters:
method - the mutator method
value - the value to pass to the mutator method +
Returns:
an array containing one object that is either the given value + or a transformed value +
Throws: +
IllegalAccessException - if convertType(Class,Object) + raises it +
IllegalArgumentException - if any other exception is raised + by convertType(Class,Object) +
ClassCastException - if an error occurs creating the method args
+
+
+
+ +

+convertType

+
+protected Object convertType(Class newType,
+                             Object value)
+                      throws InstantiationException,
+                             IllegalAccessException,
+                             IllegalArgumentException,
+                             InvocationTargetException
+
+
Converts the given value to the given type. First, reflection is + is used to find a public constructor declared by the given class + that takes one argument, which must be the precise type of the + given value. If such a constructor is found, a new object is + created by passing the given value to that constructor, and the + newly constructed object is returned.

+ + If no such constructor exists, and the given type is a primitive + type, then the given value is converted to a string using its + toString() method, and that string is + parsed into the correct primitive type using, for instance, + Integer.valueOf(String) to convert the string into an + int.

+ + If no special constructor exists and the given type is not a + primitive type, this method returns the original value. +

+

+
+
+
+
Parameters:
newType - the type to convert the value to
value - the value to convert +
Returns:
the converted value +
Throws: +
NumberFormatException - if newType is a primitive type, and + the string representation of the given value cannot be converted + to that type +
InstantiationException - if the constructor found with + reflection raises it +
InvocationTargetException - if the constructor found with + reflection raises it +
IllegalAccessException - never +
IllegalArgumentException - never
+
+
+
+ +

+getTypeTransformer

+
+protected Transformer getTypeTransformer(Class aType)
+
+
Returns a transformer for the given primitive type. +

+

+
+
+
+
Parameters:
aType - the primitive type whose transformer to return +
Returns:
a transformer that will convert strings into that type, + or null if the given type is not a primitive type
+
+
+
+ +

+logInfo

+
+protected void logInfo(Exception ex)
+
+
Logs the given exception to System.out. Used to display + warnings while accessing/mutating the bean. +

+

+
+
+
+
Parameters:
ex - the exception to log
+
+
+
+ +

+logWarn

+
+protected void logWarn(Exception ex)
+
+
Logs the given exception to System.err. Used to display + errors while accessing/mutating the bean. +

+

+
+
+
+
Parameters:
ex - the exception to log
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPredicate.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPredicate.html new file mode 100644 index 0000000..9ac340a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPredicate.html @@ -0,0 +1,386 @@ + + + + + + + +BeanPredicate (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanPredicate

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanPredicate
+
+
+
All Implemented Interfaces:
Predicate
+
+
+
+
public class BeanPredicate
extends Object
implements Predicate
+ + +

+

Predicate implementation that applies the given Predicate + to the result of calling the given property getter. +

+

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
BeanPredicate(String propertyName, + Predicate predicate) + +
+          Constructs a BeanPredicate that applies the given + Predicate to the named property value.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanevaluate(Object object) + +
+          Evaluates the given object by applying the getPredicate() + to a property value named by getPropertyName().
+ PredicategetPredicate() + +
+          Gets the Predicate to be applied to the value of the named property + during evaluate(java.lang.Object).
+ StringgetPropertyName() + +
+          Gets the name of the property whose value is to be predicated.
+ voidsetPredicate(Predicate predicate) + +
+          Sets the Predicate to be applied to the value of the named property + during evaluate(Object).
+ voidsetPropertyName(String propertyName) + +
+          Sets the name of the property whose value is to be predicated.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanPredicate

+
+public BeanPredicate(String propertyName,
+                     Predicate predicate)
+
+
Constructs a BeanPredicate that applies the given + Predicate to the named property value. +

+

+
Parameters:
propertyName - the name of the property whose value is to be predicated, + not null
predicate - the Predicate to be applied, + not null
+
+ + + + + + + + +
+Method Detail
+ +

+evaluate

+
+public boolean evaluate(Object object)
+
+
Evaluates the given object by applying the getPredicate() + to a property value named by getPropertyName(). +

+

+
Specified by:
evaluate in interface Predicate
+
+
+
Parameters:
object - The object being evaluated +
Returns:
the result of the predicate evaluation +
Throws: +
IllegalArgumentException - when the property cannot be evaluated
+
+
+
+ +

+getPropertyName

+
+public String getPropertyName()
+
+
Gets the name of the property whose value is to be predicated. + in the evaluation. +

+

+
+
+
+ +
Returns:
the property name, not null
+
+
+
+ +

+setPropertyName

+
+public void setPropertyName(String propertyName)
+
+
Sets the name of the property whose value is to be predicated. +

+

+
+
+
+
Parameters:
propertyName - the name of the property whose value is to be predicated, + not null
+
+
+
+ +

+getPredicate

+
+public Predicate getPredicate()
+
+
Gets the Predicate to be applied to the value of the named property + during evaluate(java.lang.Object). +

+

+
+
+
+ +
Returns:
Predicate, not null
+
+
+
+ +

+setPredicate

+
+public void setPredicate(Predicate predicate)
+
+
Sets the Predicate to be applied to the value of the named property + during evaluate(Object). +

+

+
+
+
+
Parameters:
predicate - Predicate, not null
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html new file mode 100644 index 0000000..f390585 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html @@ -0,0 +1,459 @@ + + + + + + + +BeanPropertyValueChangeClosure (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanPropertyValueChangeClosure

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanPropertyValueChangeClosure
+
+
+
All Implemented Interfaces:
Closure
+
+
+
+
public class BeanPropertyValueChangeClosure
extends Object
implements Closure
+ + +

+

Closure that sets a property.

+

+ An implementation of org.apache.commons.collections.Closure that updates + a specified property on the object provided with a specified value. + The BeanPropertyValueChangeClosure constructor takes two parameters which determine + what property will be updated and with what value. +

+
+ +
public BeanPropertyValueChangeClosure( String propertyName, Object propertyValue )
+
+
+
+ Will create a Closure that will update an object by setting the property + specified by propertyName to the value specified by propertyValue. +
+
+ +

+ Note: Property names can be a simple, nested, indexed, or mapped property as defined by + org.apache.commons.beanutils.PropertyUtils. If any object in the property path + specified by propertyName is null then the outcome is based on the + value of the ignoreNull attribute. + +

+ A typical usage might look like: +

+ // create the closure
+ BeanPropertyValueChangeClosure closure =
+    new BeanPropertyValueChangeClosure( "activeEmployee", Boolean.TRUE );
+
+ // update the Collection
+ CollectionUtils.forAllDo( peopleCollection, closure );
+ 
+

+ + This would take a Collection of person objects and update the + activeEmployee property of each object in the Collection to + true. Assuming... +

    +
  • + The top level object in the peopleCollection is an object which represents a + person. +
  • +
  • + The person object has a setActiveEmployee( boolean ) method which updates + the value for the object's activeEmployee property. +
  • +
+

+ +

+

+
Author:
+
Norm Deane
+
See Also:
PropertyUtils, +Closure
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
BeanPropertyValueChangeClosure(String propertyName, + Object propertyValue) + +
+          Constructor which takes the name of the property to be changed, the new value to set + the property to, and assumes ignoreNull to be false.
BeanPropertyValueChangeClosure(String propertyName, + Object propertyValue, + boolean ignoreNull) + +
+          Constructor which takes the name of the property to be changed, the new value to set + the property to and a boolean which determines whether null objects in the + property path will genenerate an IllegalArgumentException or not.
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidexecute(Object object) + +
+          Updates the target object provided using the property update criteria provided when this + BeanPropertyValueChangeClosure was constructed.
+ StringgetPropertyName() + +
+          Returns the name of the property which will be updated when this Closure executes.
+ ObjectgetPropertyValue() + +
+          Returns the value that the property specified by propertyName + will be updated to when this Closure executes.
+ booleanisIgnoreNull() + +
+          Returns the flag that determines whether null objects in the property path will + genenerate an IllegalArgumentException or not.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanPropertyValueChangeClosure

+
+public BeanPropertyValueChangeClosure(String propertyName,
+                                      Object propertyValue)
+
+
Constructor which takes the name of the property to be changed, the new value to set + the property to, and assumes ignoreNull to be false. +

+

+
Parameters:
propertyName - The name of the property that will be updated with the value specified by + propertyValue.
propertyValue - The value that propertyName will be set to on the target + object. +
Throws: +
IllegalArgumentException - If the propertyName provided is null or empty.
+
+
+ +

+BeanPropertyValueChangeClosure

+
+public BeanPropertyValueChangeClosure(String propertyName,
+                                      Object propertyValue,
+                                      boolean ignoreNull)
+
+
Constructor which takes the name of the property to be changed, the new value to set + the property to and a boolean which determines whether null objects in the + property path will genenerate an IllegalArgumentException or not. +

+

+
Parameters:
propertyName - The name of the property that will be updated with the value specified by + propertyValue.
propertyValue - The value that propertyName will be set to on the target + object.
ignoreNull - Determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +
Throws: +
IllegalArgumentException - If the propertyName provided is null or empty.
+
+ + + + + + + + +
+Method Detail
+ +

+execute

+
+public void execute(Object object)
+
+
Updates the target object provided using the property update criteria provided when this + BeanPropertyValueChangeClosure was constructed. If any object in the property + path leading up to the target property is null then the outcome will be based on + the value of the ignoreNull attribute. By default, ignoreNull is + false and would result in an IllegalArgumentException if an object + in the property path leading up to the target property is null. +

+

+
Specified by:
execute in interface Closure
+
+
+
Parameters:
object - The object to be updated. +
Throws: +
IllegalArgumentException - If an IllegalAccessException, InvocationTargetException, or + NoSuchMethodException is thrown when trying to access the property specified on the object + provided. Or if an object in the property path provided is null and + ignoreNull is set to false.
+
+
+
+ +

+getPropertyName

+
+public String getPropertyName()
+
+
Returns the name of the property which will be updated when this Closure executes. +

+

+
+
+
+ +
Returns:
The name of the property which will be updated when this Closure executes.
+
+
+
+ +

+getPropertyValue

+
+public Object getPropertyValue()
+
+
Returns the value that the property specified by propertyName + will be updated to when this Closure executes. +

+

+
+
+
+ +
Returns:
The value that the property specified by propertyName + will be updated to when this Closure executes.
+
+
+
+ +

+isIgnoreNull

+
+public boolean isIgnoreNull()
+
+
Returns the flag that determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. If set to true then + if any objects in the property path leading up to the target property evaluate to + null then the IllegalArgumentException throw by + PropertyUtils will be logged but not rethrown. If set to false then + if any objects in the property path leading up to the target property evaluate to + null then the IllegalArgumentException throw by + PropertyUtils will be logged and rethrown. +

+

+
+
+
+ +
Returns:
The flag that determines whether null objects in the property path will + genenerate an IllegalArgumentException or not.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html new file mode 100644 index 0000000..00c3665 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html @@ -0,0 +1,520 @@ + + + + + + + +BeanPropertyValueEqualsPredicate (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanPropertyValueEqualsPredicate

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate
+
+
+
All Implemented Interfaces:
Predicate
+
+
+
+
public class BeanPropertyValueEqualsPredicate
extends Object
implements Predicate
+ + +

+

Predicate that evaluates a property value against a specified value.

+

+ An implementation of org.apache.commons.collections.Predicate that evaluates a + property value on the object provided against a specified value and returns true + if equal; false otherwise. + The BeanPropertyValueEqualsPredicate constructor takes two parameters which + determine what property will be evaluated on the target object and what its expected value should + be. +

+
+ +
public BeanPropertyValueEqualsPredicate( String propertyName, Object propertyValue )
+
+
+
+ Will create a Predicate that will evaluate the target object and return + true if the property specified by propertyName has a value which + is equal to the the value specified by propertyValue. Or return + false otherwise. +
+
+

+

+ Note: Property names can be a simple, nested, indexed, or mapped property as defined by + org.apache.commons.beanutils.PropertyUtils. If any object in the property path + specified by propertyName is null then the outcome is based on the + value of the ignoreNull attribute. +

+

+ A typical usage might look like: +

+ // create the closure
+ BeanPropertyValueEqualsPredicate predicate =
+    new BeanPropertyValueEqualsPredicate( "activeEmployee", Boolean.FALSE );
+
+ // filter the Collection
+ CollectionUtils.filter( peopleCollection, predicate );
+ 
+

+

+ This would take a Collection of person objects and filter out any people whose + activeEmployee property is false. Assuming... +

    +
  • + The top level object in the peeopleCollection is an object which represents a + person. +
  • +
  • + The person object has a getActiveEmployee() method which returns + the boolean value for the object's activeEmployee property. +
  • +
+

+

+ Another typical usage might look like: +

+ // create the closure
+ BeanPropertyValueEqualsPredicate predicate =
+    new BeanPropertyValueEqualsPredicate( "personId", "456-12-1234" );
+
+ // search the Collection
+ CollectionUtils.find( peopleCollection, predicate );
+ 
+

+

+ This would search a Collection of person objects and return the first object whose + personId property value equals 456-12-1234. Assuming... +

    +
  • + The top level object in the peeopleCollection is an object which represents a + person. +
  • +
  • + The person object has a getPersonId() method which returns + the value for the object's personId property. +
  • +
+

+

+ +

+

+
Author:
+
Norm Deane
+
See Also:
PropertyUtils, +Predicate
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
BeanPropertyValueEqualsPredicate(String propertyName, + Object propertyValue) + +
+          Constructor which takes the name of the property, its expected value to be used in evaluation, + and assumes ignoreNull to be false.
BeanPropertyValueEqualsPredicate(String propertyName, + Object propertyValue, + boolean ignoreNull) + +
+          Constructor which takes the name of the property, its expected value + to be used in evaluation, and a boolean which determines whether null objects in + the property path will genenerate an IllegalArgumentException or not.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanevaluate(Object object) + +
+          Evaulates the object provided against the criteria specified when this + BeanPropertyValueEqualsPredicate was constructed.
+protected  booleanevaluateValue(Object expected, + Object actual) + +
+          Utility method which evaluates whether the actual property value equals the expected property + value.
+ StringgetPropertyName() + +
+          Returns the name of the property which will be evaluated when this Predicate is + executed.
+ ObjectgetPropertyValue() + +
+          Returns the value that the property specified by propertyName will be compared to + when this Predicate executes.
+ booleanisIgnoreNull() + +
+          Returns the flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanPropertyValueEqualsPredicate

+
+public BeanPropertyValueEqualsPredicate(String propertyName,
+                                        Object propertyValue)
+
+
Constructor which takes the name of the property, its expected value to be used in evaluation, + and assumes ignoreNull to be false. +

+

+
Parameters:
propertyName - The name of the property that will be evaluated against the expected value.
propertyValue - The value to use in object evaluation. +
Throws: +
IllegalArgumentException - If the property name provided is null or empty.
+
+
+ +

+BeanPropertyValueEqualsPredicate

+
+public BeanPropertyValueEqualsPredicate(String propertyName,
+                                        Object propertyValue,
+                                        boolean ignoreNull)
+
+
Constructor which takes the name of the property, its expected value + to be used in evaluation, and a boolean which determines whether null objects in + the property path will genenerate an IllegalArgumentException or not. +

+

+
Parameters:
propertyName - The name of the property that will be evaluated against the expected value.
propertyValue - The value to use in object evaluation.
ignoreNull - Determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +
Throws: +
IllegalArgumentException - If the property name provided is null or empty.
+
+ + + + + + + + +
+Method Detail
+ +

+evaluate

+
+public boolean evaluate(Object object)
+
+
Evaulates the object provided against the criteria specified when this + BeanPropertyValueEqualsPredicate was constructed. Equality is based on + either reference or logical equality as defined by the property object's equals method. If + any object in the property path leading up to the target property is null then + the outcome will be based on the value of the ignoreNull attribute. By default, + ignoreNull is false and would result in an + IllegalArgumentException if an object in the property path leading up to the + target property is null. +

+

+
Specified by:
evaluate in interface Predicate
+
+
+
Parameters:
object - The object to be evaluated. +
Returns:
True if the object provided meets all the criteria for this Predicate; + false otherwise. +
Throws: +
IllegalArgumentException - If an IllegalAccessException, InvocationTargetException, or + NoSuchMethodException is thrown when trying to access the property specified on the object + provided. Or if an object in the property path provided is null and + ignoreNull is set to false.
+
+
+
+ +

+evaluateValue

+
+protected boolean evaluateValue(Object expected,
+                                Object actual)
+
+
Utility method which evaluates whether the actual property value equals the expected property + value. +

+

+
+
+
+
Parameters:
expected - The expected value.
actual - The actual value. +
Returns:
True if they are equal; false otherwise.
+
+
+
+ +

+getPropertyName

+
+public String getPropertyName()
+
+
Returns the name of the property which will be evaluated when this Predicate is + executed. +

+

+
+
+
+ +
Returns:
The name of the property which will be evaluated when this Predicate is + executed.
+
+
+
+ +

+getPropertyValue

+
+public Object getPropertyValue()
+
+
Returns the value that the property specified by propertyName will be compared to + when this Predicate executes. +

+

+
+
+
+ +
Returns:
The value that the property specified by propertyName will be compared to + when this Predicate executes.
+
+
+
+ +

+isIgnoreNull

+
+public boolean isIgnoreNull()
+
+
Returns the flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. If set to true then + if any objects in the property path evaluate to null then the + IllegalArgumentException throw by PropertyUtils will be logged but + not rethrown and false will be returned. If set to false then if + any objects in the property path evaluate to null then the + IllegalArgumentException throw by PropertyUtils will be logged and + rethrown. +

+

+
+
+
+ +
Returns:
The flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html new file mode 100644 index 0000000..b7d1c0b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html @@ -0,0 +1,416 @@ + + + + + + + +BeanToPropertyValueTransformer (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanToPropertyValueTransformer

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanToPropertyValueTransformer
+
+
+
All Implemented Interfaces:
Transformer
+
+
+
+
public class BeanToPropertyValueTransformer
extends Object
implements Transformer
+ + +

+

Transformer that outputs a property value.

+ +

An implementation of org.apache.commons.collections.Transformer that transforms + the object provided by returning the value of a specified property of the object. The + constructor for BeanToPropertyValueTransformer requires the name of the property + that will be used in the transformation. The property can be a simple, nested, indexed, or + mapped property as defined by org.apache.commons.beanutils.PropertyUtils. If any + object in the property path specified by propertyName is null then the + outcome is based on the value of the ignoreNull attribute. +

+ +

+ A typical usage might look like: +

+ // create the transformer
+ BeanToPropertyValueTransformer transformer = new BeanToPropertyValueTransformer( "person.address.city" );
+
+ // transform the Collection
+ Collection peoplesCities = CollectionUtils.collect( peopleCollection, transformer );
+ 
+

+ +

+ This would take a Collection of person objects and return a Collection + of objects which represents the cities in which each person lived. Assuming... +

    +
  • + The top level object in the peeopleCollection is an object which represents a + person. +
  • +
  • + The person object has a getAddress() method which returns an object which + represents a person's address. +
  • +
  • + The address object has a getCity() method which returns an object which + represents the city in which a person lives. +
  • +
+

+ +

+

+
Author:
+
Norm Deane
+
See Also:
PropertyUtils, +Transformer
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
BeanToPropertyValueTransformer(String propertyName) + +
+          Constructs a Transformer which does not ignore nulls.
BeanToPropertyValueTransformer(String propertyName, + boolean ignoreNull) + +
+          Constructs a Transformer and sets ignoreNull.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ StringgetPropertyName() + +
+          Returns the name of the property that will be used in the transformation of the bean.
+ booleanisIgnoreNull() + +
+          Returns the flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not.
+ Objecttransform(Object object) + +
+          Returns the value of the property named in the transformer's constructor for + the object provided.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanToPropertyValueTransformer

+
+public BeanToPropertyValueTransformer(String propertyName)
+
+
Constructs a Transformer which does not ignore nulls. + Constructor which takes the name of the property that will be used in the transformation and + assumes ignoreNull to be false. +

+

+
Parameters:
propertyName - The name of the property that will be used in the transformation. +
Throws: +
IllegalArgumentException - If the propertyName is null or + empty.
+
+
+ +

+BeanToPropertyValueTransformer

+
+public BeanToPropertyValueTransformer(String propertyName,
+                                      boolean ignoreNull)
+
+
Constructs a Transformer and sets ignoreNull. + Constructor which takes the name of the property that will be used in the transformation and + a boolean which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +

+

+
Parameters:
propertyName - The name of the property that will be used in the transformation.
ignoreNull - Determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. +
Throws: +
IllegalArgumentException - If the propertyName is null or + empty.
+
+ + + + + + + + +
+Method Detail
+ +

+transform

+
+public Object transform(Object object)
+
+
Returns the value of the property named in the transformer's constructor for + the object provided. If any object in the property path leading up to the target property is + null then the outcome will be based on the value of the ignoreNull + attribute. By default, ignoreNull is false and would result in an + IllegalArgumentException if an object in the property path leading up to the + target property is null. +

+

+
Specified by:
transform in interface Transformer
+
+
+
Parameters:
object - The object to be transformed. +
Returns:
The value of the property named in the transformer's constructor for the object + provided. +
Throws: +
IllegalArgumentException - If an IllegalAccessException, InvocationTargetException, or + NoSuchMethodException is thrown when trying to access the property specified on the object + provided. Or if an object in the property path provided is null and + ignoreNull is set to false.
+
+
+
+ +

+getPropertyName

+
+public String getPropertyName()
+
+
Returns the name of the property that will be used in the transformation of the bean. +

+

+
+
+
+ +
Returns:
The name of the property that will be used in the transformation of the bean.
+
+
+
+ +

+isIgnoreNull

+
+public boolean isIgnoreNull()
+
+
Returns the flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not. If set to true then + if any objects in the property path evaluate to null then the + IllegalArgumentException throw by PropertyUtils will be logged but + not rethrown and null will be returned. If set to false then if any + objects in the property path evaluate to null then the + IllegalArgumentException throw by PropertyUtils will be logged and + rethrown. +

+

+
+
+
+ +
Returns:
The flag which determines whether null objects in the property path will + genenerate an IllegalArgumentException or not.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtils.html new file mode 100644 index 0000000..65be088 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtils.html @@ -0,0 +1,939 @@ + + + + + + + +BeanUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanUtils
+
+
+
Direct Known Subclasses:
LocaleBeanUtils
+
+
+
+
public class BeanUtils
extends Object
+ + +

+

Utility methods for populating JavaBeans properties via reflection.

+ +

The implementations are provided by BeanUtilsBean. + These static utility methods use the default instance. + More sophisticated behaviour can be provided by using a BeanUtilsBean instance.

+

+ +

+

+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman
+
See Also:
BeanUtilsBean
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
BeanUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static ObjectcloneBean(Object bean) + +
+          Clone a bean based on the available property getters and setters, + even if the bean class itself does not implement Cloneable.
+static voidcopyProperties(Object dest, + Object orig) + +
+          Copy property values from the origin bean to the destination bean + for all cases where the property names are the same.
+static voidcopyProperty(Object bean, + String name, + Object value) + +
+          Copy the specified property value to the specified destination bean, + performing any type conversion that is required.
+static MapcreateCache() + +
+          Create a cache.
+static Mapdescribe(Object bean) + +
+          Return the entire set of properties for which the specified bean + provides a read method.
+static String[]getArrayProperty(Object bean, + String name) + +
+          Return the value of the specified array property of the specified + bean, as a String array.
+static booleangetCacheFast(Map map) + +
+          Return whether a Map is fast
+static intgetDebug() + +
+          Deprecated. BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class.
+static StringgetIndexedProperty(Object bean, + String name) + +
+          Return the value of the specified indexed property of the specified + bean, as a String.
+static StringgetIndexedProperty(Object bean, + String name, + int index) + +
+          Return the value of the specified indexed property of the specified + bean, as a String.
+static StringgetMappedProperty(Object bean, + String name) + +
+          Return the value of the specified indexed property of the specified + bean, as a String.
+static StringgetMappedProperty(Object bean, + String name, + String key) + +
+          Return the value of the specified mapped property of the specified + bean, as a String.
+static StringgetNestedProperty(Object bean, + String name) + +
+          Return the value of the (possibly nested) property of the specified + name, for the specified bean, as a String.
+static StringgetProperty(Object bean, + String name) + +
+          Return the value of the specified property of the specified bean, + no matter which property reference format is used, as a String.
+static StringgetSimpleProperty(Object bean, + String name) + +
+          Return the value of the specified simple property of the specified + bean, converted to a String.
+static booleaninitCause(Throwable throwable, + Throwable cause) + +
+          If we're running on JDK 1.4 or later, initialize the cause for the given throwable.
+static voidpopulate(Object bean, + Map properties) + +
+          Populate the JavaBeans properties of the specified bean, based on + the specified name/value pairs.
+static voidsetCacheFast(Map map, + boolean fast) + +
+          Set whether fast on a Map
+static voidsetDebug(int newDebug) + +
+          Deprecated. BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class.
+static voidsetProperty(Object bean, + String name, + Object value) + +
+          Set the specified property value, performing type conversions as + required to conform to the type of the destination property.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanUtils

+
+public BeanUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDebug

+
+public static int getDebug()
+
+
Deprecated. BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class. +

+

The debug static property is no longer used +

+

+ +
Returns:
debug property
+
+
+
+ +

+setDebug

+
+public static void setDebug(int newDebug)
+
+
Deprecated. BeanUtils now uses commons-logging for all log messages. + Use your favorite logging tool to configure logging for + this class. +

+

The debug static property is no longer used +

+

+
Parameters:
newDebug - debug property
+
+
+
+ +

+cloneBean

+
+public static Object cloneBean(Object bean)
+                        throws IllegalAccessException,
+                               InstantiationException,
+                               InvocationTargetException,
+                               NoSuchMethodException
+
+

Clone a bean based on the available property getters and setters, + even if the bean class itself does not implement Cloneable.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean to be cloned +
Returns:
the cloned bean +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InstantiationException - if a new instance of the bean's + class cannot be instantiated +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.cloneBean(java.lang.Object)
+
+
+
+ +

+copyProperties

+
+public static void copyProperties(Object dest,
+                                  Object orig)
+                           throws IllegalAccessException,
+                                  InvocationTargetException
+
+

Copy property values from the origin bean to the destination bean + for all cases where the property names are the same.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
dest - Destination bean whose properties are modified
orig - Origin bean whose properties are retrieved +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if the dest or + orig argument is null or if the dest + property type is different from the source type and the relevant + converter has not been registered. +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
BeanUtilsBean.copyProperties(java.lang.Object, java.lang.Object)
+
+
+
+ +

+copyProperty

+
+public static void copyProperty(Object bean,
+                                String name,
+                                Object value)
+                         throws IllegalAccessException,
+                                InvocationTargetException
+
+

Copy the specified property value to the specified destination bean, + performing any type conversion that is required.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
BeanUtilsBean.copyProperty(java.lang.Object, java.lang.String, java.lang.Object)
+
+
+
+ +

+describe

+
+public static Map describe(Object bean)
+                    throws IllegalAccessException,
+                           InvocationTargetException,
+                           NoSuchMethodException
+
+

Return the entire set of properties for which the specified bean + provides a read method.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose properties are to be extracted +
Returns:
Map of property descriptors +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.describe(java.lang.Object)
+
+
+
+ +

+getArrayProperty

+
+public static String[] getArrayProperty(Object bean,
+                                        String name)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified array property of the specified + bean, as a String array.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The array property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getArrayProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+getIndexedProperty

+
+public static String getIndexedProperty(Object bean,
+                                        String name)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified indexed property of the specified + bean, as a String.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getIndexedProperty(Object, String)
+
+
+
+ +

+getIndexedProperty

+
+public static String getIndexedProperty(Object bean,
+                                        String name,
+                                        int index)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+
Return the value of the specified indexed property of the specified + bean, as a String. The index is specified as a method parameter and + must *not* be included in the property name expression + +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getIndexedProperty(Object, String, int)
+
+
+
+ +

+getMappedProperty

+
+public static String getMappedProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified indexed property of the specified + bean, as a String.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(index) of the property value + to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getMappedProperty(Object, String)
+
+
+
+ +

+getMappedProperty

+
+public static String getMappedProperty(Object bean,
+                                       String name,
+                                       String key)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified mapped property of the specified + bean, as a String.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
key - Lookup key of the property value to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getMappedProperty(Object, String, String)
+
+
+
+ +

+getNestedProperty

+
+public static String getNestedProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the (possibly nested) property of the specified + name, for the specified bean, as a String.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getNestedProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+getProperty

+
+public static String getProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+

Return the value of the specified property of the specified bean, + no matter which property reference format is used, as a String.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+getSimpleProperty

+
+public static String getSimpleProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified simple property of the specified + bean, converted to a String.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
See Also:
BeanUtilsBean.getSimpleProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+populate

+
+public static void populate(Object bean,
+                            Map properties)
+                     throws IllegalAccessException,
+                            InvocationTargetException
+
+

Populate the JavaBeans properties of the specified bean, based on + the specified name/value pairs.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - JavaBean whose properties are being populated
properties - Map keyed by property name, with the + corresponding (String or String[]) value(s) to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
BeanUtilsBean.populate(java.lang.Object, java.util.Map)
+
+
+
+ +

+setProperty

+
+public static void setProperty(Object bean,
+                               String name,
+                               Object value)
+                        throws IllegalAccessException,
+                               InvocationTargetException
+
+

Set the specified property value, performing type conversions as + required to conform to the type of the destination property.

+ +

For more details see BeanUtilsBean.

+

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
BeanUtilsBean.setProperty(java.lang.Object, java.lang.String, java.lang.Object)
+
+
+
+ +

+initCause

+
+public static boolean initCause(Throwable throwable,
+                                Throwable cause)
+
+
If we're running on JDK 1.4 or later, initialize the cause for the given throwable. +

+

+
Parameters:
throwable - The throwable.
cause - The cause of the throwable. +
Returns:
true if the cause was initialized, otherwise false.
Since:
+
1.8.0
+
+
+
+
+ +

+createCache

+
+public static Map createCache()
+
+
Create a cache. +

+

+ +
Returns:
a new cache
Since:
+
1.8.0
+
+
+
+
+ +

+getCacheFast

+
+public static boolean getCacheFast(Map map)
+
+
Return whether a Map is fast +

+

+
Parameters:
map - The map +
Returns:
Whether it is fast or not.
Since:
+
1.8.0
+
+
+
+
+ +

+setCacheFast

+
+public static void setCacheFast(Map map,
+                                boolean fast)
+
+
Set whether fast on a Map +

+

+
Parameters:
map - The map
fast - Whether it should be fast or not.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean.html new file mode 100644 index 0000000..8dd3382 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean.html @@ -0,0 +1,1076 @@ + + + + + + + +BeanUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanUtilsBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanUtilsBean
+
+
+
Direct Known Subclasses:
BeanUtilsBean2, LocaleBeanUtilsBean
+
+
+
+
public class BeanUtilsBean
extends Object
+ + +

+

JavaBean property population methods.

+ +

This class provides implementations for the utility methods in + BeanUtils. + Different instances can be used to isolate caches between classloaders + and to vary the value converters registered.

+

+ +

+

+
Since:
+
1.7
+
Version:
+
$Revision: 834031 $ $Date: 2009-11-09 12:26:52 +0000 (Mon, 09 Nov 2009) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman
+
See Also:
BeanUtils
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
BeanUtilsBean() + +
+          Constructs an instance using new property + and conversion instances.
BeanUtilsBean(ConvertUtilsBean convertUtilsBean) + +
+          Constructs an instance using given conversion instances + and new PropertyUtilsBean instance.
BeanUtilsBean(ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Constructs an instance using given property and conversion instances.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ObjectcloneBean(Object bean) + +
+          Clone a bean based on the available property getters and setters, + even if the bean class itself does not implement Cloneable.
+protected  Objectconvert(Object value, + Class type) + +
+          Convert the value to an object of the specified class (if + possible).
+ voidcopyProperties(Object dest, + Object orig) + +
+          Copy property values from the origin bean to the destination bean + for all cases where the property names are the same.
+ voidcopyProperty(Object bean, + String name, + Object value) + +
+          Copy the specified property value to the specified destination bean, + performing any type conversion that is required.
+ Mapdescribe(Object bean) + +
+          Return the entire set of properties for which the specified bean + provides a read method.
+ String[]getArrayProperty(Object bean, + String name) + +
+          Return the value of the specified array property of the specified + bean, as a String array.
+ ConvertUtilsBeangetConvertUtils() + +
+          Gets the ConvertUtilsBean instance used to perform the conversions.
+ StringgetIndexedProperty(Object bean, + String name) + +
+          Return the value of the specified indexed property of the specified + bean, as a String.
+ StringgetIndexedProperty(Object bean, + String name, + int index) + +
+          Return the value of the specified indexed property of the specified + bean, as a String.
+static BeanUtilsBeangetInstance() + +
+          Gets the instance which provides the functionality for BeanUtils.
+ StringgetMappedProperty(Object bean, + String name) + +
+          Return the value of the specified indexed property of the specified + bean, as a String.
+ StringgetMappedProperty(Object bean, + String name, + String key) + +
+          Return the value of the specified mapped property of the specified + bean, as a String.
+ StringgetNestedProperty(Object bean, + String name) + +
+          Return the value of the (possibly nested) property of the specified + name, for the specified bean, as a String.
+ StringgetProperty(Object bean, + String name) + +
+          Return the value of the specified property of the specified bean, + no matter which property reference format is used, as a String.
+ PropertyUtilsBeangetPropertyUtils() + +
+          Gets the PropertyUtilsBean instance used to access properties.
+ StringgetSimpleProperty(Object bean, + String name) + +
+          Return the value of the specified simple property of the specified + bean, converted to a String.
+ booleaninitCause(Throwable throwable, + Throwable cause) + +
+          If we're running on JDK 1.4 or later, initialize the cause for the given throwable.
+ voidpopulate(Object bean, + Map properties) + +
+          Populate the JavaBeans properties of the specified bean, based on + the specified name/value pairs.
+static voidsetInstance(BeanUtilsBean newInstance) + +
+          Sets the instance which provides the functionality for BeanUtils.
+ voidsetProperty(Object bean, + String name, + Object value) + +
+          Set the specified property value, performing type conversions as + required to conform to the type of the destination property.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanUtilsBean

+
+public BeanUtilsBean()
+
+

Constructs an instance using new property + and conversion instances.

+

+

+
+ +

+BeanUtilsBean

+
+public BeanUtilsBean(ConvertUtilsBean convertUtilsBean)
+
+

Constructs an instance using given conversion instances + and new PropertyUtilsBean instance.

+

+

+
Parameters:
convertUtilsBean - use this ConvertUtilsBean + to perform conversions from one object to another
Since:
+
1.8.0
+
+
+
+ +

+BeanUtilsBean

+
+public BeanUtilsBean(ConvertUtilsBean convertUtilsBean,
+                     PropertyUtilsBean propertyUtilsBean)
+
+

Constructs an instance using given property and conversion instances.

+

+

+
Parameters:
convertUtilsBean - use this ConvertUtilsBean + to perform conversions from one object to another
propertyUtilsBean - use this PropertyUtilsBean + to access properties
+
+ + + + + + + + +
+Method Detail
+ +

+getInstance

+
+public static BeanUtilsBean getInstance()
+
+
Gets the instance which provides the functionality for BeanUtils. + This is a pseudo-singleton - an single instance is provided per (thread) context classloader. + This mechanism provides isolation for web apps deployed in the same container. +

+

+ +
Returns:
The (pseudo-singleton) BeanUtils bean instance
+
+
+
+ +

+setInstance

+
+public static void setInstance(BeanUtilsBean newInstance)
+
+
Sets the instance which provides the functionality for BeanUtils. + This is a pseudo-singleton - an single instance is provided per (thread) context classloader. + This mechanism provides isolation for web apps deployed in the same container. +

+

+
Parameters:
newInstance - The (pseudo-singleton) BeanUtils bean instance
+
+
+
+ +

+cloneBean

+
+public Object cloneBean(Object bean)
+                 throws IllegalAccessException,
+                        InstantiationException,
+                        InvocationTargetException,
+                        NoSuchMethodException
+
+

Clone a bean based on the available property getters and setters, + even if the bean class itself does not implement Cloneable.

+ +

+ Note: this method creates a shallow clone. + In other words, any objects referred to by the bean are shared with the clone + rather than being cloned in turn. +

+

+

+
Parameters:
bean - Bean to be cloned +
Returns:
the cloned bean +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InstantiationException - if a new instance of the bean's + class cannot be instantiated +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+copyProperties

+
+public void copyProperties(Object dest,
+                           Object orig)
+                    throws IllegalAccessException,
+                           InvocationTargetException
+
+

Copy property values from the origin bean to the destination bean + for all cases where the property names are the same. For each + property, a conversion is attempted as necessary. All combinations of + standard JavaBeans and DynaBeans as origin and destination are + supported. Properties that exist in the origin bean, but do not exist + in the destination bean (or are read-only in the destination bean) are + silently ignored.

+ +

If the origin "bean" is actually a Map, it is assumed + to contain String-valued simple property names as the keys, pointing at + the corresponding property values that will be converted (if necessary) + and set in the destination bean. Note that this method + is intended to perform a "shallow copy" of the properties and so complex + properties (for example, nested ones) will not be copied.

+ +

This method differs from populate(), which + was primarily designed for populating JavaBeans from the map of request + parameters retrieved on an HTTP request, is that no scalar->indexed + or indexed->scalar manipulations are performed. If the origin property + is indexed, the destination property must be also.

+ +

If you know that no type conversions are required, the + copyProperties() method in PropertyUtils will + execute faster than this method.

+ +

FIXME - Indexed and mapped properties that do not + have getter and setter methods for the underlying array or Map are not + copied by this method.

+

+

+
Parameters:
dest - Destination bean whose properties are modified
orig - Origin bean whose properties are retrieved +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if the dest or + orig argument is null or if the dest + property type is different from the source type and the relevant + converter has not been registered. +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+copyProperty

+
+public void copyProperty(Object bean,
+                         String name,
+                         Object value)
+                  throws IllegalAccessException,
+                         InvocationTargetException
+
+

Copy the specified property value to the specified destination bean, + performing any type conversion that is required. If the specified + bean does not have a property of the specified name, or the property + is read only on the destination bean, return without + doing anything. If you have custom destination property types, register + Converters for them by calling the register() + method of ConvertUtils.

+ +

IMPLEMENTATION RESTRICTIONS:

+
    +
  • Does not support destination properties that are indexed, + but only an indexed setter (as opposed to an array setter) + is available.
  • +
  • Does not support destination properties that are mapped, + but only a keyed setter (as opposed to a Map setter) + is available.
  • +
  • The desired property type of a mapped setter cannot be + determined (since Maps support any data type), so no conversion + will be performed.
  • +
+

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+describe

+
+public Map describe(Object bean)
+             throws IllegalAccessException,
+                    InvocationTargetException,
+                    NoSuchMethodException
+
+

Return the entire set of properties for which the specified bean + provides a read method. This map contains the to String + converted property values for all properties for which a read method + is provided (i.e. where the getReadMethod() returns non-null).

+ +

This map can be fed back to a call to + BeanUtils.populate() to reconsitute the same set of + properties, modulo differences for read-only and write-only + properties, but only if there are no indexed properties.

+ +

Warning: if any of the bean property implementations + contain (directly or indirectly) a call to this method then + a stack overflow may result. For example: +

+ class MyBean
+ {
+    public Map getParameterMap()
+    {
+         BeanUtils.describe(this);
+    }
+ }
+ 
+ will result in an infinite regression when getParametersMap + is called. It is recommended that such methods are given alternative + names (for example, parametersMap). +

+

+

+
Parameters:
bean - Bean whose properties are to be extracted +
Returns:
Map of property descriptors +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getArrayProperty

+
+public String[] getArrayProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified array property of the specified + bean, as a String array. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The array property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public String getIndexedProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified indexed property of the specified + bean, as a String. The zero-relative index of the + required value must be included (in square brackets) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public String getIndexedProperty(Object bean,
+                                 String name,
+                                 int index)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified indexed property of the specified + bean, as a String. The index is specified as a method parameter and + must *not* be included in the property name expression +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getMappedProperty

+
+public String getMappedProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified indexed property of the specified + bean, as a String. The String-valued key of the required value + must be included (in parentheses) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(index) of the property value + to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getMappedProperty

+
+public String getMappedProperty(Object bean,
+                                String name,
+                                String key)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified mapped property of the specified + bean, as a String. The key is specified as a method parameter and + must *not* be included in the property name expression +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
key - Lookup key of the property value to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getNestedProperty

+
+public String getNestedProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the (possibly nested) property of the specified + name, for the specified bean, as a String. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getProperty

+
+public String getProperty(Object bean,
+                          String name)
+                   throws IllegalAccessException,
+                          InvocationTargetException,
+                          NoSuchMethodException
+
+
Return the value of the specified property of the specified bean, + no matter which property reference format is used, as a String. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+getSimpleProperty

+
+public String getSimpleProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified simple property of the specified + bean, converted to a String. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + property cannot be found
+
+
+
+ +

+populate

+
+public void populate(Object bean,
+                     Map properties)
+              throws IllegalAccessException,
+                     InvocationTargetException
+
+

Populate the JavaBeans properties of the specified bean, based on + the specified name/value pairs. This method uses Java reflection APIs + to identify corresponding "property setter" method names, and deals + with setter arguments of type String, boolean, + int, long, float, and + double. In addition, array setters for these types (or the + corresponding primitive types) can also be identified.

+ +

The particular setter method to be called for each property is + determined using the usual JavaBeans introspection mechanisms. Thus, + you may identify custom setter methods using a BeanInfo class that is + associated with the class of the bean itself. If no such BeanInfo + class is available, the standard method name conversion ("set" plus + the capitalized name of the property in question) is used.

+ +

NOTE: It is contrary to the JavaBeans Specification + to have more than one setter method (with different argument + signatures) for the same property.

+ +

WARNING - The logic of this method is customized + for extracting String-based request parameters from an HTTP request. + It is probably not what you want for general property copying with + type conversion. For that purpose, check out the + copyProperties() method instead.

+

+

+
Parameters:
bean - JavaBean whose properties are being populated
properties - Map keyed by property name, with the + corresponding (String or String[]) value(s) to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+setProperty

+
+public void setProperty(Object bean,
+                        String name,
+                        Object value)
+                 throws IllegalAccessException,
+                        InvocationTargetException
+
+

Set the specified property value, performing type conversions as + required to conform to the type of the destination property.

+ +

If the property is read only then the method returns + without throwing an exception.

+ +

If null is passed into a property expecting a primitive value, + then this will be converted as if it were a null string.

+ +

WARNING - The logic of this method is customized + to meet the needs of populate(), and is probably not what + you want for general property copying with type conversion. For that + purpose, check out the copyProperty() method instead.

+ +

WARNING - PLEASE do not modify the behavior of this + method without consulting with the Struts developer community. There + are some subtleties to its functionality that are not documented in the + Javadoc description above, yet are vital to the way that Struts utilizes + this method.

+

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+getConvertUtils

+
+public ConvertUtilsBean getConvertUtils()
+
+
Gets the ConvertUtilsBean instance used to perform the conversions. +

+

+ +
Returns:
The ConvertUtils bean instance
+
+
+
+ +

+getPropertyUtils

+
+public PropertyUtilsBean getPropertyUtils()
+
+
Gets the PropertyUtilsBean instance used to access properties. +

+

+ +
Returns:
The ConvertUtils bean instance
+
+
+
+ +

+initCause

+
+public boolean initCause(Throwable throwable,
+                         Throwable cause)
+
+
If we're running on JDK 1.4 or later, initialize the cause for the given throwable. +

+

+
Parameters:
throwable - The throwable.
cause - The cause of the throwable. +
Returns:
true if the cause was initialized, otherwise false.
Since:
+
1.8.0
+
+
+
+
+ +

+convert

+
+protected Object convert(Object value,
+                         Class type)
+
+

Convert the value to an object of the specified class (if + possible).

+

+

+
Parameters:
value - Value to be converted (may be null)
type - Class of the value to be converted to +
Returns:
The converted value +
Throws: +
ConversionException - if thrown by an underlying Converter
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean2.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean2.html new file mode 100644 index 0000000..70a0339 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/BeanUtilsBean2.html @@ -0,0 +1,315 @@ + + + + + + + +BeanUtilsBean2 (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class BeanUtilsBean2

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanUtilsBean
+      extended by org.apache.commons.beanutils.BeanUtilsBean2
+
+
+
+
public class BeanUtilsBean2
extends BeanUtilsBean
+ + +

+

BeanUtilsBean implementation that creates a + ConvertUtilsBean2 and delegates conversion to + ConvertUtilsBean.convert(Object, Class). +

+ +

+ To configure this implementation for the current context ClassLoader invoke + BeanUtilsBean.setInstance(new BeanUtilsBean2()); +

+ +

+ BeanUtils 1.7.0 delegated all conversion to String to the converter + registered for the String.class. One of the improvements in + BeanUtils 1.8.0 was to upgrade the Converter implementations so + that they could handle conversion to String for their type (e.g. + IntegerConverter now handles conversion from an Integer to a String as + well as String to Integer). +

+ +

+ In order to take advantage of these improvements BeanUtils needs to change + how it gets the appropriate Converter. This functionality has been + implemented in the new ConvertUtilsBean.lookup(Class, Class) and + ConvertUtilsBean.convert(Object, Class) methods. However changing + BeanUtilsBean to use these methods could create compatibility + issues for existing users. In order to avoid that, this new + BeanUtilsBean implementation has been created (and the associated + ConvertUtilsBean2). +

+

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 552381 $ $Date: 2007-07-02 03:00:17 +0100 (Mon, 02 Jul 2007) $
+
See Also:
ConvertUtilsBean2
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
BeanUtilsBean2() + +
+          Constructs an instance using new property + and conversion instances.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectconvert(Object value, + Class type) + +
+          Convert the value to an object of the specified class (if + possible).
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.BeanUtilsBean
cloneBean, copyProperties, copyProperty, describe, getArrayProperty, getConvertUtils, getIndexedProperty, getIndexedProperty, getInstance, getMappedProperty, getMappedProperty, getNestedProperty, getProperty, getPropertyUtils, getSimpleProperty, initCause, populate, setInstance, setProperty
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BeanUtilsBean2

+
+public BeanUtilsBean2()
+
+

Constructs an instance using new property + and conversion instances.

+

+

+ + + + + + + + +
+Method Detail
+ +

+convert

+
+protected Object convert(Object value,
+                         Class type)
+
+

Convert the value to an object of the specified class (if + possible).

+

+

+
Overrides:
convert in class BeanUtilsBean
+
+
+
Parameters:
value - Value to be converted (may be null)
type - Class of the value to be converted to +
Returns:
The converted value
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConstructorUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConstructorUtils.html new file mode 100644 index 0000000..293c035 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConstructorUtils.html @@ -0,0 +1,556 @@ + + + + + + + +ConstructorUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ConstructorUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ConstructorUtils
+
+
+
+
public class ConstructorUtils
extends Object
+ + +

+

Utility reflection methods focussed on constructors, modelled after MethodUtils.

+ +

Known Limitations

+

Accessing Public Constructors In A Default Access Superclass

+

There is an issue when invoking public constructors contained in a default access superclass. + Reflection locates these constructors fine and correctly assigns them as public. + However, an IllegalAccessException is thrown if the constructors is invoked.

+ +

ConstructorUtils contains a workaround for this situation. + It will attempt to call setAccessible on this constructor. + If this call succeeds, then the method can be invoked as normal. + This call will only succeed when the application has sufficient security privilages. + If this call fails then a warning will be logged and the method may fail.

+

+ +

+

+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman, Jan Sorensen, Robert Burrell Donkin, Rodney Waldhoff
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ConstructorUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static ConstructorgetAccessibleConstructor(Class klass, + Class parameterType) + +
+          Returns a constructor with single argument.
+static ConstructorgetAccessibleConstructor(Class klass, + Class[] parameterTypes) + +
+          Returns a constructor given a class and signature.
+static ConstructorgetAccessibleConstructor(Constructor ctor) + +
+          Returns accessible version of the given constructor.
+static ObjectinvokeConstructor(Class klass, + Object arg) + +
+          Convenience method returning new instance of klazz using a single argument constructor.
+static ObjectinvokeConstructor(Class klass, + Object[] args) + +
+          Returns new instance of klazz created using the actual arguments args.
+static ObjectinvokeConstructor(Class klass, + Object[] args, + Class[] parameterTypes) + +
+          Returns new instance of klazz created using constructor + with signature parameterTypes and actual arguments args.
+static ObjectinvokeExactConstructor(Class klass, + Object arg) + +
+          Convenience method returning new instance of klazz using a single argument constructor.
+static ObjectinvokeExactConstructor(Class klass, + Object[] args) + +
+          Returns new instance of klazz created using the actual arguments args.
+static ObjectinvokeExactConstructor(Class klass, + Object[] args, + Class[] parameterTypes) + +
+          Returns new instance of klazz created using constructor + with signature parameterTypes and actual arguments + args.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ConstructorUtils

+
+public ConstructorUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+invokeConstructor

+
+public static Object invokeConstructor(Class klass,
+                                       Object arg)
+                                throws NoSuchMethodException,
+                                       IllegalAccessException,
+                                       InvocationTargetException,
+                                       InstantiationException
+
+

Convenience method returning new instance of klazz using a single argument constructor. + The formal parameter type is inferred from the actual values of arg. + See invokeExactConstructor(Class, Object[], Class[]) for more details.

+ +

The signatures should be assignment compatible.

+

+

+
Parameters:
klass - the class to be constructed.
arg - the actual argument +
Returns:
new instance of klazz +
Throws: +
NoSuchMethodException - If the constructor cannot be found +
IllegalAccessException - If an error occurs accessing the constructor +
InvocationTargetException - If an error occurs invoking the constructor +
InstantiationException - If an error occurs instantiating the class
See Also:
invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+
+
+
+ +

+invokeConstructor

+
+public static Object invokeConstructor(Class klass,
+                                       Object[] args)
+                                throws NoSuchMethodException,
+                                       IllegalAccessException,
+                                       InvocationTargetException,
+                                       InstantiationException
+
+

Returns new instance of klazz created using the actual arguments args. + The formal parameter types are inferred from the actual values of args. + See invokeExactConstructor(Class, Object[], Class[]) for more details.

+ +

The signatures should be assignment compatible.

+

+

+
Parameters:
klass - the class to be constructed.
args - actual argument array +
Returns:
new instance of klazz +
Throws: +
NoSuchMethodException - If the constructor cannot be found +
IllegalAccessException - If an error occurs accessing the constructor +
InvocationTargetException - If an error occurs invoking the constructor +
InstantiationException - If an error occurs instantiating the class
See Also:
invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+
+
+
+ +

+invokeConstructor

+
+public static Object invokeConstructor(Class klass,
+                                       Object[] args,
+                                       Class[] parameterTypes)
+                                throws NoSuchMethodException,
+                                       IllegalAccessException,
+                                       InvocationTargetException,
+                                       InstantiationException
+
+

Returns new instance of klazz created using constructor + with signature parameterTypes and actual arguments args.

+ +

The signatures should be assignment compatible.

+

+

+
Parameters:
klass - the class to be constructed.
args - actual argument array
parameterTypes - parameter types array +
Returns:
new instance of klazz +
Throws: +
NoSuchMethodException - if matching constructor cannot be found +
IllegalAccessException - thrown on the constructor's invocation +
InvocationTargetException - thrown on the constructor's invocation +
InstantiationException - thrown on the constructor's invocation
See Also:
Constructor.newInstance(java.lang.Object...)
+
+
+
+ +

+invokeExactConstructor

+
+public static Object invokeExactConstructor(Class klass,
+                                            Object arg)
+                                     throws NoSuchMethodException,
+                                            IllegalAccessException,
+                                            InvocationTargetException,
+                                            InstantiationException
+
+

Convenience method returning new instance of klazz using a single argument constructor. + The formal parameter type is inferred from the actual values of arg. + See invokeExactConstructor(Class, Object[], Class[]) for more details.

+ +

The signatures should match exactly.

+

+

+
Parameters:
klass - the class to be constructed.
arg - the actual argument +
Returns:
new instance of klazz +
Throws: +
NoSuchMethodException - If the constructor cannot be found +
IllegalAccessException - If an error occurs accessing the constructor +
InvocationTargetException - If an error occurs invoking the constructor +
InstantiationException - If an error occurs instantiating the class
See Also:
invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+
+
+
+ +

+invokeExactConstructor

+
+public static Object invokeExactConstructor(Class klass,
+                                            Object[] args)
+                                     throws NoSuchMethodException,
+                                            IllegalAccessException,
+                                            InvocationTargetException,
+                                            InstantiationException
+
+

Returns new instance of klazz created using the actual arguments args. + The formal parameter types are inferred from the actual values of args. + See invokeExactConstructor(Class, Object[], Class[]) for more details.

+ +

The signatures should match exactly.

+

+

+
Parameters:
klass - the class to be constructed.
args - actual argument array +
Returns:
new instance of klazz +
Throws: +
NoSuchMethodException - If the constructor cannot be found +
IllegalAccessException - If an error occurs accessing the constructor +
InvocationTargetException - If an error occurs invoking the constructor +
InstantiationException - If an error occurs instantiating the class
See Also:
invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+
+
+
+ +

+invokeExactConstructor

+
+public static Object invokeExactConstructor(Class klass,
+                                            Object[] args,
+                                            Class[] parameterTypes)
+                                     throws NoSuchMethodException,
+                                            IllegalAccessException,
+                                            InvocationTargetException,
+                                            InstantiationException
+
+

Returns new instance of klazz created using constructor + with signature parameterTypes and actual arguments + args.

+ +

The signatures should match exactly.

+

+

+
Parameters:
klass - the class to be constructed.
args - actual argument array
parameterTypes - parameter types array +
Returns:
new instance of klazz +
Throws: +
NoSuchMethodException - if matching constructor cannot be found +
IllegalAccessException - thrown on the constructor's invocation +
InvocationTargetException - thrown on the constructor's invocation +
InstantiationException - thrown on the constructor's invocation
See Also:
Constructor.newInstance(java.lang.Object...)
+
+
+
+ +

+getAccessibleConstructor

+
+public static Constructor getAccessibleConstructor(Class klass,
+                                                   Class parameterType)
+
+
Returns a constructor with single argument. +

+

+
Parameters:
klass - the class to be constructed
parameterType - The constructor parameter type +
Returns:
null if matching accessible constructor can not be found.
See Also:
Class.getConstructor(java.lang.Class...), +getAccessibleConstructor(java.lang.reflect.Constructor)
+
+
+
+ +

+getAccessibleConstructor

+
+public static Constructor getAccessibleConstructor(Class klass,
+                                                   Class[] parameterTypes)
+
+
Returns a constructor given a class and signature. +

+

+
Parameters:
klass - the class to be constructed
parameterTypes - the parameter array +
Returns:
null if matching accessible constructor can not be found
See Also:
Class.getConstructor(java.lang.Class...), +getAccessibleConstructor(java.lang.reflect.Constructor)
+
+
+
+ +

+getAccessibleConstructor

+
+public static Constructor getAccessibleConstructor(Constructor ctor)
+
+
Returns accessible version of the given constructor. +

+

+
Parameters:
ctor - prototype constructor object. +
Returns:
null if accessible constructor can not be found.
See Also:
SecurityManager
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ContextClassLoaderLocal.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ContextClassLoaderLocal.html new file mode 100644 index 0000000..30ef90c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ContextClassLoaderLocal.html @@ -0,0 +1,437 @@ + + + + + + + +ContextClassLoaderLocal (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ContextClassLoaderLocal

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ContextClassLoaderLocal
+
+
+
+
public class ContextClassLoaderLocal
extends Object
+ + +

+An instance of this class represents a value that is provided per (thread) + context classloader. + +

Occasionally it is necessary to store data in "global" variables + (including uses of the Singleton pattern). In applications which have only + a single classloader such data can simply be stored as "static" members on + some class. When multiple classloaders are involved, however, this approach + can fail; in particular, this doesn't work when the code may be run within a + servlet container or a j2ee container, and the class on which the static + member is defined is loaded via a "shared" classloader that is visible to all + components running within the container. This class provides a mechanism for + associating data with a ClassLoader instance, which ensures that when the + code runs in such a container each component gets its own copy of the + "global" variable rather than unexpectedly sharing a single copy of the + variable with other components that happen to be running in the same + container at the same time (eg servlets or EJBs.)

+ +

This class is strongly patterned after the java.lang.ThreadLocal + class, which performs a similar task in allowing data to be associated + with a particular thread.

+ +

When code that uses this class is run as a "normal" application, ie + not within a container, the effect is identical to just using a static + member variable to store the data, because Thread.getContextClassLoader + always returns the same classloader (the system classloader).

+ +

Expected usage is as follows:
+

+  public class SomeClass {
+    private static final ContextClassLoaderLocal global 
+      = new ContextClassLoaderLocal() {
+          protected Object initialValue() {
+              return new String("Initial value");
+          };
+
+    public void testGlobal() {
+      String s = (String) global.get();
+      System.out.println("global value:" + s);
+      buf.set("New Value");
+    }
+ 
+

+ +

Note: This class takes some care to ensure that when + a component which uses this class is "undeployed" by a container the + component-specific classloader and all its associated classes (and their + static variables) are garbage-collected. Unfortunately there is one + scenario in which this does not work correctly and there + is unfortunately no known workaround other than ensuring that the + component (or its container) calls the "unset" method on this class for + each instance of this class when the component is undeployed. The problem + occurs if: +

    +
  • the class containing a static instance of this class was loaded via + a shared classloader, and
  • +
  • the value stored in the instance is an object whose class was loaded + via the component-specific classloader (or any of the objects it refers + to were loaded via that classloader).
  • +
+ The result is that the map managed by this object still contains a strong + reference to the stored object, which contains a strong reference to the + classloader that loaded it, meaning that although the container has + "undeployed" the component the component-specific classloader and all the + related classes and static variables cannot be garbage-collected. This is + not expected to be an issue with the commons-beanutils library as the only + classes which use this class are BeanUtilsBean and ConvertUtilsBean and + there is no obvious reason for a user of the beanutils library to subclass + either of those classes.

+ +

Note: A WeakHashMap bug in several 1.3 JVMs results in + a memory leak for those JVMs.

+ +

Note: Of course all of this would be unnecessary if + containers required each component to load the full set of classes it + needs, ie avoided providing classes loaded via a "shared" classloader.

+

+ +

+

+
Author:
+
Eric Pabst
+
See Also:
Thread.getContextClassLoader()
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ContextClassLoaderLocal() + +
+          Construct a context classloader instance
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ Objectget() + +
+          Gets the instance which provides the functionality for BeanUtils.
+protected  ObjectinitialValue() + +
+          Returns the initial value for this ContextClassLoaderLocal + variable.
+ voidset(Object value) + +
+          Sets the value - a value is provided per (thread) context classloader.
+ voidunset() + +
+          Unsets the value associated with the current thread's context classloader
+ voidunset(ClassLoader classLoader) + +
+          Unsets the value associated with the given classloader
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ContextClassLoaderLocal

+
+public ContextClassLoaderLocal()
+
+
Construct a context classloader instance +

+

+ + + + + + + + +
+Method Detail
+ +

+initialValue

+
+protected Object initialValue()
+
+
Returns the initial value for this ContextClassLoaderLocal + variable. This method will be called once per Context ClassLoader for + each ContextClassLoaderLocal, the first time it is accessed + with get or set. If the programmer desires ContextClassLoaderLocal variables + to be initialized to some value other than null, ContextClassLoaderLocal must + be subclassed, and this method overridden. Typically, an anonymous + inner class will be used. Typical implementations of initialValue + will call an appropriate constructor and return the newly constructed + object. +

+

+ +
Returns:
a new Object to be used as an initial value for this ContextClassLoaderLocal
+
+
+
+ +

+get

+
+public Object get()
+
+
Gets the instance which provides the functionality for BeanUtils. + This is a pseudo-singleton - an single instance is provided per (thread) context classloader. + This mechanism provides isolation for web apps deployed in the same container. +

+

+ +
Returns:
the object currently associated with the context-classloader of the current thread.
+
+
+
+ +

+set

+
+public void set(Object value)
+
+
Sets the value - a value is provided per (thread) context classloader. + This mechanism provides isolation for web apps deployed in the same container. +

+

+
Parameters:
value - the object to be associated with the entrant thread's context classloader
+
+
+
+ +

+unset

+
+public void unset()
+
+
Unsets the value associated with the current thread's context classloader +

+

+
+
+
+
+ +

+unset

+
+public void unset(ClassLoader classLoader)
+
+
Unsets the value associated with the given classloader +

+

+
Parameters:
classLoader - The classloader to unset for
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConversionException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConversionException.html new file mode 100644 index 0000000..f8d72d5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConversionException.html @@ -0,0 +1,367 @@ + + + + + + + +ConversionException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ConversionException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by java.lang.RuntimeException
+              extended by org.apache.commons.beanutils.ConversionException
+
+
+
All Implemented Interfaces:
Serializable
+
+
+
+
public class ConversionException
extends RuntimeException
+ + +

+

A ConversionException indicates that a call to + Converter.convert() has failed to complete successfully. +

+ +

+

+
Since:
+
1.3
+
Author:
+
Craig McClanahan, Paulo Gaspar
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + +
+Field Summary
+protected  Throwablecause + +
+          The root cause of this ConversionException, compatible with + JDK 1.4's extensions to java.lang.Throwable.
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
ConversionException(String message) + +
+          Construct a new exception with the specified message.
ConversionException(String message, + Throwable cause) + +
+          Construct a new exception with the specified message and root cause.
ConversionException(Throwable cause) + +
+          Construct a new exception with the specified root cause.
+  + + + + + + + + + + + +
+Method Summary
+ ThrowablegetCause() + +
+          Return the root cause of this conversion exception.
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+cause

+
+protected Throwable cause
+
+
The root cause of this ConversionException, compatible with + JDK 1.4's extensions to java.lang.Throwable. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ConversionException

+
+public ConversionException(String message)
+
+
Construct a new exception with the specified message. +

+

+
Parameters:
message - The message describing this exception
+
+
+ +

+ConversionException

+
+public ConversionException(String message,
+                           Throwable cause)
+
+
Construct a new exception with the specified message and root cause. +

+

+
Parameters:
message - The message describing this exception
cause - The root cause of this exception
+
+
+ +

+ConversionException

+
+public ConversionException(Throwable cause)
+
+
Construct a new exception with the specified root cause. +

+

+
Parameters:
cause - The root cause of this exception
+
+ + + + + + + + +
+Method Detail
+ +

+getCause

+
+public Throwable getCause()
+
+
Return the root cause of this conversion exception. +

+

+
Overrides:
getCause in class Throwable
+
+
+ +
Returns:
the root cause of this conversion exception
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtils.html new file mode 100644 index 0000000..210b2c4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtils.html @@ -0,0 +1,898 @@ + + + + + + + +ConvertUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ConvertUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ConvertUtils
+
+
+
+
public class ConvertUtils
extends Object
+ + +

+

Utility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.

+ +

For more details, see ConvertUtilsBean which provides the + implementations for these methods.

+

+ +

+

+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley
+
See Also:
ConvertUtilsBean
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ConvertUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static Stringconvert(Object value) + +
+          Convert the specified value into a String.
+static Objectconvert(Object value, + Class targetType) + +
+          Convert the value to an object of the specified class (if + possible).
+static Objectconvert(String[] values, + Class clazz) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible).
+static Objectconvert(String value, + Class clazz) + +
+          Convert the specified value to an object of the specified class (if + possible).
+static voidderegister() + +
+          Remove all registered Converters, and re-establish the + standard Converters.
+static voidderegister(Class clazz) + +
+          Remove any registered Converter for the specified destination + Class.
+static booleangetDefaultBoolean() + +
+          Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead
+static bytegetDefaultByte() + +
+          Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead
+static chargetDefaultCharacter() + +
+          Deprecated. Register replacement converters for Character.TYPE and + Character.class instead
+static doublegetDefaultDouble() + +
+          Deprecated. Register replacement converters for Double.TYPE and + Double.class instead
+static floatgetDefaultFloat() + +
+          Deprecated. Register replacement converters for Float.TYPE and + Float.class instead
+static intgetDefaultInteger() + +
+          Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead
+static longgetDefaultLong() + +
+          Deprecated. Register replacement converters for Long.TYPE and + Long.class instead
+static shortgetDefaultShort() + +
+          Deprecated. Register replacement converters for Short.TYPE and + Short.class instead
+static Converterlookup(Class clazz) + +
+          Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null.
+static Converterlookup(Class sourceType, + Class targetType) + +
+          Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null.
+static voidregister(Converter converter, + Class clazz) + +
+          Register a custom Converter for the specified destination + Class, replacing any previously registered Converter.
+static voidsetDefaultBoolean(boolean newDefaultBoolean) + +
+          Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead
+static voidsetDefaultByte(byte newDefaultByte) + +
+          Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead
+static voidsetDefaultCharacter(char newDefaultCharacter) + +
+          Deprecated. Register replacement converters for Character.TYPE and + Character.class instead
+static voidsetDefaultDouble(double newDefaultDouble) + +
+          Deprecated. Register replacement converters for Double.TYPE and + Double.class instead
+static voidsetDefaultFloat(float newDefaultFloat) + +
+          Deprecated. Register replacement converters for Float.TYPE and + Float.class instead
+static voidsetDefaultInteger(int newDefaultInteger) + +
+          Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead
+static voidsetDefaultLong(long newDefaultLong) + +
+          Deprecated. Register replacement converters for Long.TYPE and + Long.class instead
+static voidsetDefaultShort(short newDefaultShort) + +
+          Deprecated. Register replacement converters for Short.TYPE and + Short.class instead
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ConvertUtils

+
+public ConvertUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultBoolean

+
+public static boolean getDefaultBoolean()
+
+
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +

+

Gets the default value for Boolean conversions. +

+

+ +
Returns:
The default Boolean value
+
+
+
+ +

+setDefaultBoolean

+
+public static void setDefaultBoolean(boolean newDefaultBoolean)
+
+
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +

+

Sets the default value for Boolean conversions. +

+

+
Parameters:
newDefaultBoolean - The default Boolean value
+
+
+
+ +

+getDefaultByte

+
+public static byte getDefaultByte()
+
+
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +

+

Gets the default value for Byte conversions. +

+

+ +
Returns:
The default Byte value
+
+
+
+ +

+setDefaultByte

+
+public static void setDefaultByte(byte newDefaultByte)
+
+
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +

+

Sets the default value for Byte conversions. +

+

+
Parameters:
newDefaultByte - The default Byte value
+
+
+
+ +

+getDefaultCharacter

+
+public static char getDefaultCharacter()
+
+
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +

+

Gets the default value for Character conversions. +

+

+ +
Returns:
The default Character value
+
+
+
+ +

+setDefaultCharacter

+
+public static void setDefaultCharacter(char newDefaultCharacter)
+
+
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +

+

Sets the default value for Character conversions. +

+

+
Parameters:
newDefaultCharacter - The default Character value
+
+
+
+ +

+getDefaultDouble

+
+public static double getDefaultDouble()
+
+
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +

+

Gets the default value for Double conversions. +

+

+ +
Returns:
The default Double value
+
+
+
+ +

+setDefaultDouble

+
+public static void setDefaultDouble(double newDefaultDouble)
+
+
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +

+

Sets the default value for Double conversions. +

+

+
Parameters:
newDefaultDouble - The default Double value
+
+
+
+ +

+getDefaultFloat

+
+public static float getDefaultFloat()
+
+
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +

+

Get the default value for Float conversions. +

+

+ +
Returns:
The default Float value
+
+
+
+ +

+setDefaultFloat

+
+public static void setDefaultFloat(float newDefaultFloat)
+
+
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +

+

Sets the default value for Float conversions. +

+

+
Parameters:
newDefaultFloat - The default Float value
+
+
+
+ +

+getDefaultInteger

+
+public static int getDefaultInteger()
+
+
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +

+

Gets the default value for Integer conversions. +

+

+ +
Returns:
The default Integer value
+
+
+
+ +

+setDefaultInteger

+
+public static void setDefaultInteger(int newDefaultInteger)
+
+
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +

+

Sets the default value for Integer conversions. +

+

+
Parameters:
newDefaultInteger - The default Integer value
+
+
+
+ +

+getDefaultLong

+
+public static long getDefaultLong()
+
+
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +

+

Gets the default value for Long conversions. +

+

+ +
Returns:
The default Long value
+
+
+
+ +

+setDefaultLong

+
+public static void setDefaultLong(long newDefaultLong)
+
+
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +

+

Sets the default value for Long conversions. +

+

+
Parameters:
newDefaultLong - The default Long value
+
+
+
+ +

+getDefaultShort

+
+public static short getDefaultShort()
+
+
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +

+

Gets the default value for Short conversions. +

+

+ +
Returns:
The default Short value
+
+
+
+ +

+setDefaultShort

+
+public static void setDefaultShort(short newDefaultShort)
+
+
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +

+

Sets the default value for Short conversions. +

+

+
Parameters:
newDefaultShort - The default Short value
+
+
+
+ +

+convert

+
+public static String convert(Object value)
+
+

Convert the specified value into a String.

+ +

For more details see ConvertUtilsBean.

+

+

+
Parameters:
value - Value to be converted (may be null) +
Returns:
The converted String value
See Also:
ConvertUtilsBean.convert(Object)
+
+
+
+ +

+convert

+
+public static Object convert(String value,
+                             Class clazz)
+
+

Convert the specified value to an object of the specified class (if + possible). Otherwise, return a String representation of the value.

+ +

For more details see ConvertUtilsBean.

+

+

+
Parameters:
value - Value to be converted (may be null)
clazz - Java class to be converted to +
Returns:
The converted value
See Also:
ConvertUtilsBean.convert(String, Class)
+
+
+
+ +

+convert

+
+public static Object convert(String[] values,
+                             Class clazz)
+
+

Convert an array of specified values to an array of objects of the + specified class (if possible).

+ +

For more details see ConvertUtilsBean.

+

+

+
Parameters:
values - Array of values to be converted
clazz - Java array or element class to be converted to +
Returns:
The converted value
See Also:
ConvertUtilsBean.convert(String[], Class)
+
+
+
+ +

+convert

+
+public static Object convert(Object value,
+                             Class targetType)
+
+

Convert the value to an object of the specified class (if + possible).

+

+

+
Parameters:
value - Value to be converted (may be null)
targetType - Class of the value to be converted to +
Returns:
The converted value +
Throws: +
ConversionException - if thrown by an underlying Converter
+
+
+
+ +

+deregister

+
+public static void deregister()
+
+

Remove all registered Converters, and re-establish the + standard Converters.

+ +

For more details see ConvertUtilsBean.

+

+

+
See Also:
ConvertUtilsBean.deregister()
+
+
+
+ +

+deregister

+
+public static void deregister(Class clazz)
+
+

Remove any registered Converter for the specified destination + Class.

+ +

For more details see ConvertUtilsBean.

+

+

+
Parameters:
clazz - Class for which to remove a registered Converter
See Also:
ConvertUtilsBean.deregister(Class)
+
+
+
+ +

+lookup

+
+public static Converter lookup(Class clazz)
+
+

Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null.

+ +

For more details see ConvertUtilsBean.

+

+

+
Parameters:
clazz - Class for which to return a registered Converter +
Returns:
The registered Converter or null if not found
See Also:
ConvertUtilsBean.lookup(Class)
+
+
+
+ +

+lookup

+
+public static Converter lookup(Class sourceType,
+                               Class targetType)
+
+
Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null. +

+

+
Parameters:
sourceType - Class of the value being converted
targetType - Class of the value to be converted to +
Returns:
The registered Converter or null if not found
+
+
+
+ +

+register

+
+public static void register(Converter converter,
+                            Class clazz)
+
+

Register a custom Converter for the specified destination + Class, replacing any previously registered Converter.

+ +

For more details see ConvertUtilsBean.

+

+

+
Parameters:
converter - Converter to be registered
clazz - Destination class for conversions performed by this + Converter
See Also:
ConvertUtilsBean.register(Converter, Class)
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean.html new file mode 100644 index 0000000..9bf9382 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean.html @@ -0,0 +1,1018 @@ + + + + + + + +ConvertUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ConvertUtilsBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ConvertUtilsBean
+
+
+
Direct Known Subclasses:
ConvertUtilsBean2
+
+
+
+
public class ConvertUtilsBean
extends Object
+ + +

+

Utility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class. The + actual Converter instance to be used can be registered for each + possible destination Class. Unless you override them, standard + Converter instances are provided for all of the following + destination Classes:

+
    +
  • java.lang.BigDecimal (no default value)
  • +
  • java.lang.BigInteger (no default value)
  • +
  • boolean and java.lang.Boolean (default to false)
  • +
  • byte and java.lang.Byte (default to zero)
  • +
  • char and java.lang.Character (default to a space)
  • +
  • java.lang.Class (no default value)
  • +
  • double and java.lang.Double (default to zero)
  • +
  • float and java.lang.Float (default to zero)
  • +
  • int and java.lang.Integer (default to zero)
  • +
  • long and java.lang.Long (default to zero)
  • +
  • short and java.lang.Short (default to zero)
  • +
  • java.lang.String (default to null)
  • +
  • java.io.File (no default value)
  • +
  • java.net.URL (no default value)
  • +
  • java.sql.Date (no default value)
  • +
  • java.sql.Time (no default value)
  • +
  • java.sql.Timestamp (no default value)
  • +
+ +

For backwards compatibility, the standard Converters for primitive + types (and the corresponding wrapper classes) return a defined + default value when a conversion error occurs. If you prefer to have a + ConversionException thrown instead, replace the standard Converter + instances with instances created with the zero-arguments constructor. For + example, to cause the Converters for integers to throw an exception on + conversion errors, you could do this:

+
+   // No-args constructor gets the version that throws exceptions
+   Converter myConverter =
+    new org.apache.commons.beanutils.converter.IntegerConverter();
+   ConvertUtils.register(myConverter, Integer.TYPE);    // Native type
+   ConvertUtils.register(myConverter, Integer.class);   // Wrapper class
+ 
+ +

+ Converters generally treat null input as if it were invalid + input, ie they return their default value if one was specified when the + converter was constructed, and throw an exception otherwise. If you prefer + nulls to be preserved for converters that are converting to objects (not + primitives) then register a converter as above, passing a default value of + null to the converter constructor (and of course registering that converter + only for the .class target). +

+ +

+ When a converter is listed above as having no default value, then that + converter will throw an exception when passed null or an invalid value + as its input. In particular, by default the BigInteger and BigDecimal + converters have no default (and are therefore somewhat inconsistent + with the other numerical converters which all have zero as their default). +

+ +

+ Converters that generate arrays of each of the primitive types are + also automatically configured (including String[]). When passed null + or invalid input, these return an empty array (not null). See class + AbstractArrayConverter for the supported input formats for these converters. +

+

+ +

+

+
Since:
+
1.7
+
Version:
+
$Revision: 745079 $ $Date: 2009-02-17 14:04:10 +0000 (Tue, 17 Feb 2009) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, James Strachan
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ConvertUtilsBean() + +
+          Construct a bean with standard converters registered
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ Stringconvert(Object value) + +
+          Convert the specified value into a String.
+ Objectconvert(Object value, + Class targetType) + +
+          Convert the value to an object of the specified class (if + possible).
+ Objectconvert(String[] values, + Class clazz) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible).
+ Objectconvert(String value, + Class clazz) + +
+          Convert the specified value to an object of the specified class (if + possible).
+ voidderegister() + +
+          Remove all registered Converters, and re-establish the + standard Converters.
+ voidderegister(Class clazz) + +
+          Remove any registered Converter for the specified destination + Class.
+ booleangetDefaultBoolean() + +
+          Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead
+ bytegetDefaultByte() + +
+          Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead
+ chargetDefaultCharacter() + +
+          Deprecated. Register replacement converters for Character.TYPE and + Character.class instead
+ doublegetDefaultDouble() + +
+          Deprecated. Register replacement converters for Double.TYPE and + Double.class instead
+ floatgetDefaultFloat() + +
+          Deprecated. Register replacement converters for Float.TYPE and + Float.class instead
+ intgetDefaultInteger() + +
+          Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead
+ longgetDefaultLong() + +
+          Deprecated. Register replacement converters for Long.TYPE and + Long.class instead
+ shortgetDefaultShort() + +
+          Deprecated. Register replacement converters for Short.TYPE and + Short.class instead
+protected static ConvertUtilsBeangetInstance() + +
+          Get singleton instance
+ Converterlookup(Class clazz) + +
+          Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null.
+ Converterlookup(Class sourceType, + Class targetType) + +
+          Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null.
+ voidregister(boolean throwException, + boolean defaultNull, + int defaultArraySize) + +
+          Register the provided converters with the specified defaults.
+ voidregister(Converter converter, + Class clazz) + +
+          Register a custom Converter for the specified destination + Class, replacing any previously registered Converter.
+ voidsetDefaultBoolean(boolean newDefaultBoolean) + +
+          Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead
+ voidsetDefaultByte(byte newDefaultByte) + +
+          Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead
+ voidsetDefaultCharacter(char newDefaultCharacter) + +
+          Deprecated. Register replacement converters for Character.TYPE and + Character.class instead
+ voidsetDefaultDouble(double newDefaultDouble) + +
+          Deprecated. Register replacement converters for Double.TYPE and + Double.class instead
+ voidsetDefaultFloat(float newDefaultFloat) + +
+          Deprecated. Register replacement converters for Float.TYPE and + Float.class instead
+ voidsetDefaultInteger(int newDefaultInteger) + +
+          Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead
+ voidsetDefaultLong(long newDefaultLong) + +
+          Deprecated. Register replacement converters for Long.TYPE and + Long.class instead
+ voidsetDefaultShort(short newDefaultShort) + +
+          Deprecated. Register replacement converters for Short.TYPE and + Short.class instead
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ConvertUtilsBean

+
+public ConvertUtilsBean()
+
+
Construct a bean with standard converters registered +

+

+ + + + + + + + +
+Method Detail
+ +

+getInstance

+
+protected static ConvertUtilsBean getInstance()
+
+
Get singleton instance +

+

+ +
Returns:
The singleton instance
+
+
+
+ +

+getDefaultBoolean

+
+public boolean getDefaultBoolean()
+
+
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +

+

Gets the default value for Boolean conversions. +

+

+ +
Returns:
The default Boolean value
+
+
+
+ +

+setDefaultBoolean

+
+public void setDefaultBoolean(boolean newDefaultBoolean)
+
+
Deprecated. Register replacement converters for Boolean.TYPE and + Boolean.class instead +

+

Sets the default value for Boolean conversions. +

+

+
Parameters:
newDefaultBoolean - The default Boolean value
+
+
+
+ +

+getDefaultByte

+
+public byte getDefaultByte()
+
+
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +

+

Gets the default value for Byte conversions. +

+

+ +
Returns:
The default Byte value
+
+
+
+ +

+setDefaultByte

+
+public void setDefaultByte(byte newDefaultByte)
+
+
Deprecated. Register replacement converters for Byte.TYPE and + Byte.class instead +

+

Sets the default value for Byte conversions. +

+

+
Parameters:
newDefaultByte - The default Byte value
+
+
+
+ +

+getDefaultCharacter

+
+public char getDefaultCharacter()
+
+
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +

+

Gets the default value for Character conversions. +

+

+ +
Returns:
The default Character value
+
+
+
+ +

+setDefaultCharacter

+
+public void setDefaultCharacter(char newDefaultCharacter)
+
+
Deprecated. Register replacement converters for Character.TYPE and + Character.class instead +

+

Sets the default value for Character conversions. +

+

+
Parameters:
newDefaultCharacter - The default Character value
+
+
+
+ +

+getDefaultDouble

+
+public double getDefaultDouble()
+
+
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +

+

Gets the default value for Double conversions. +

+

+ +
Returns:
The default Double value
+
+
+
+ +

+setDefaultDouble

+
+public void setDefaultDouble(double newDefaultDouble)
+
+
Deprecated. Register replacement converters for Double.TYPE and + Double.class instead +

+

Sets the default value for Double conversions. +

+

+
Parameters:
newDefaultDouble - The default Double value
+
+
+
+ +

+getDefaultFloat

+
+public float getDefaultFloat()
+
+
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +

+

Gets the default value for Float conversions. +

+

+ +
Returns:
The default Float value
+
+
+
+ +

+setDefaultFloat

+
+public void setDefaultFloat(float newDefaultFloat)
+
+
Deprecated. Register replacement converters for Float.TYPE and + Float.class instead +

+

Sets the default value for Float conversions. +

+

+
Parameters:
newDefaultFloat - The default Float value
+
+
+
+ +

+getDefaultInteger

+
+public int getDefaultInteger()
+
+
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +

+

Gets the default value for Integer conversions. +

+

+ +
Returns:
The default Integer value
+
+
+
+ +

+setDefaultInteger

+
+public void setDefaultInteger(int newDefaultInteger)
+
+
Deprecated. Register replacement converters for Integer.TYPE and + Integer.class instead +

+

Sets the default value for Integer conversions. +

+

+
Parameters:
newDefaultInteger - The default Integer value
+
+
+
+ +

+getDefaultLong

+
+public long getDefaultLong()
+
+
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +

+

Gets the default value for Long conversions. +

+

+ +
Returns:
The default Long value
+
+
+
+ +

+setDefaultLong

+
+public void setDefaultLong(long newDefaultLong)
+
+
Deprecated. Register replacement converters for Long.TYPE and + Long.class instead +

+

Sets the default value for Long conversions. +

+

+
Parameters:
newDefaultLong - The default Long value
+
+
+
+ +

+getDefaultShort

+
+public short getDefaultShort()
+
+
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +

+

Gets the default value for Short conversions. +

+

+ +
Returns:
The default Short value
+
+
+
+ +

+setDefaultShort

+
+public void setDefaultShort(short newDefaultShort)
+
+
Deprecated. Register replacement converters for Short.TYPE and + Short.class instead +

+

Sets the default value for Short conversions. +

+

+
Parameters:
newDefaultShort - The default Short value
+
+
+
+ +

+convert

+
+public String convert(Object value)
+
+
Convert the specified value into a String. If the specified value + is an array, the first element (converted to a String) will be + returned. The registered Converter for the + java.lang.String class will be used, which allows + applications to customize Object->String conversions (the default + implementation simply uses toString()). +

+

+
Parameters:
value - Value to be converted (may be null) +
Returns:
The converted String value
+
+
+
+ +

+convert

+
+public Object convert(String value,
+                      Class clazz)
+
+
Convert the specified value to an object of the specified class (if + possible). Otherwise, return a String representation of the value. +

+

+
Parameters:
value - Value to be converted (may be null)
clazz - Java class to be converted to +
Returns:
The converted value +
Throws: +
ConversionException - if thrown by an underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String[] values,
+                      Class clazz)
+
+
Convert an array of specified values to an array of objects of the + specified class (if possible). If the specified Java class is itself + an array class, this class will be the type of the returned value. + Otherwise, an array will be constructed whose component type is the + specified class. +

+

+
Parameters:
values - Array of values to be converted
clazz - Java array or element class to be converted to +
Returns:
The converted value +
Throws: +
ConversionException - if thrown by an underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(Object value,
+                      Class targetType)
+
+

Convert the value to an object of the specified class (if + possible).

+

+

+
Parameters:
value - Value to be converted (may be null)
targetType - Class of the value to be converted to +
Returns:
The converted value +
Throws: +
ConversionException - if thrown by an underlying Converter
+
+
+
+ +

+deregister

+
+public void deregister()
+
+
Remove all registered Converters, and re-establish the + standard Converters. +

+

+
+
+
+
+ +

+register

+
+public void register(boolean throwException,
+                     boolean defaultNull,
+                     int defaultArraySize)
+
+
Register the provided converters with the specified defaults. +

+

+
Parameters:
throwException - true if the converters should + throw an exception when a conversion error occurs, otherwise + false if a default value should be used.
defaultNull - trueif the standard converters + (see registerStandard(boolean, boolean)) + should use a default value of null, otherwise false. + N.B. This values is ignored if throwException is true
defaultArraySize - The size of the default array value for array converters + (N.B. This values is ignored if throwException is true). + Specifying a value less than zero causes a null value to be used for + the default.
+
+
+
+ +

+deregister

+
+public void deregister(Class clazz)
+
+
Remove any registered Converter for the specified destination + Class. +

+

+
Parameters:
clazz - Class for which to remove a registered Converter
+
+
+
+ +

+lookup

+
+public Converter lookup(Class clazz)
+
+
Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null. +

+

+
Parameters:
clazz - Class for which to return a registered Converter +
Returns:
The registered Converter or null if not found
+
+
+
+ +

+lookup

+
+public Converter lookup(Class sourceType,
+                        Class targetType)
+
+
Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null. +

+

+
Parameters:
sourceType - Class of the value being converted
targetType - Class of the value to be converted to +
Returns:
The registered Converter or null if not found
+
+
+
+ +

+register

+
+public void register(Converter converter,
+                     Class clazz)
+
+
Register a custom Converter for the specified destination + Class, replacing any previously registered Converter. +

+

+
Parameters:
converter - Converter to be registered
clazz - Destination class for conversions performed by this + Converter
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean2.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean2.html new file mode 100644 index 0000000..285f596 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertUtilsBean2.html @@ -0,0 +1,345 @@ + + + + + + + +ConvertUtilsBean2 (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ConvertUtilsBean2

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ConvertUtilsBean
+      extended by org.apache.commons.beanutils.ConvertUtilsBean2
+
+
+
+
public class ConvertUtilsBean2
extends ConvertUtilsBean
+ + +

+ConvertUtilsBean implementation that delegates convert() + methods to the new ConvertUtilsBean.convert(Object, Class) method. + +

+ To configure this implementation for the current context ClassLoader invoke + BeanUtilsBean.setInstance(new BeanUtilsBean2()); +

+

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 552381 $ $Date: 2007-07-02 03:00:17 +0100 (Mon, 02 Jul 2007) $
+
See Also:
BeanUtilsBean2
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ConvertUtilsBean2() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ Stringconvert(Object value) + +
+          Delegates to the new ConvertUtilsBean.convert(Object, Class) + method.
+ Objectconvert(String[] value, + Class clazz) + +
+          Delegates to the new ConvertUtilsBean.convert(Object, Class) + method.
+ Objectconvert(String value, + Class clazz) + +
+          Delegates to the new ConvertUtilsBean.convert(Object, Class) + method.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.ConvertUtilsBean
convert, deregister, deregister, getDefaultBoolean, getDefaultByte, getDefaultCharacter, getDefaultDouble, getDefaultFloat, getDefaultInteger, getDefaultLong, getDefaultShort, getInstance, lookup, lookup, register, register, setDefaultBoolean, setDefaultByte, setDefaultCharacter, setDefaultDouble, setDefaultFloat, setDefaultInteger, setDefaultLong, setDefaultShort
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ConvertUtilsBean2

+
+public ConvertUtilsBean2()
+
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public String convert(Object value)
+
+
Delegates to the new ConvertUtilsBean.convert(Object, Class) + method. +

+

+
Overrides:
convert in class ConvertUtilsBean
+
+
+
Parameters:
value - Value to be converted (may be null) +
Returns:
The converted String value
See Also:
ConvertUtilsBean.convert(String[], Class)
+
+
+
+ +

+convert

+
+public Object convert(String value,
+                      Class clazz)
+
+
Delegates to the new ConvertUtilsBean.convert(Object, Class) + method. +

+

+
Overrides:
convert in class ConvertUtilsBean
+
+
+
Parameters:
value - Value to be converted (may be null)
clazz - Java class to be converted to +
Returns:
The converted value
See Also:
ConvertUtilsBean.convert(String[], Class)
+
+
+
+ +

+convert

+
+public Object convert(String[] value,
+                      Class clazz)
+
+
Delegates to the new ConvertUtilsBean.convert(Object, Class) + method. +

+

+
Overrides:
convert in class ConvertUtilsBean
+
+
+
Parameters:
value - Array of values to be converted
clazz - Java array or element class to be converted to +
Returns:
The converted value
See Also:
ConvertUtilsBean.convert(String[], Class)
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/Converter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/Converter.html new file mode 100644 index 0000000..3cab9d4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/Converter.html @@ -0,0 +1,245 @@ + + + + + + + +Converter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Interface Converter

+
+
All Known Subinterfaces:
LocaleConverter
+
+
+
All Known Implementing Classes:
AbstractArrayConverter, AbstractConverter, ArrayConverter, BaseLocaleConverter, BigDecimalConverter, BigDecimalLocaleConverter, BigIntegerConverter, BigIntegerLocaleConverter, BooleanArrayConverter, BooleanConverter, ByteArrayConverter, ByteConverter, ByteLocaleConverter, CalendarConverter, CharacterArrayConverter, CharacterConverter, ClassConverter, ConverterFacade, DateConverter, DateLocaleConverter, DateTimeConverter, DecimalLocaleConverter, DoubleArrayConverter, DoubleConverter, DoubleLocaleConverter, FileConverter, FloatArrayConverter, FloatConverter, FloatLocaleConverter, IntegerArrayConverter, IntegerConverter, IntegerLocaleConverter, LongArrayConverter, LongConverter, LongLocaleConverter, NumberConverter, ShortArrayConverter, ShortConverter, ShortLocaleConverter, SqlDateConverter, SqlDateLocaleConverter, SqlTimeConverter, SqlTimeLocaleConverter, SqlTimestampConverter, SqlTimestampLocaleConverter, StringArrayConverter, StringConverter, StringLocaleConverter, URLConverter
+
+
+
+
public interface Converter
+ + +

+

General purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.

+ +

Converter subclasses bundled with the BeanUtils library are required + to be thread-safe, as users of the library may call conversion methods + from more than one thread simultaneously.

+ +

Custom converter subclasses created by users of the library can be + non-thread-safe if the application using them is single-threaded. However + it is recommended that they be written in a thread-safe manner anyway.

+

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig McClanahan, Paulo Gaspar
+
+
+ +

+ + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Convert the specified input object into an output object of the + specified type.
+  +

+ + + + + + + + +
+Method Detail
+ +

+convert

+
+Object convert(Class type,
+               Object value)
+
+
Convert the specified input object into an output object of the + specified type. +

+

+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertingWrapDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertingWrapDynaBean.html new file mode 100644 index 0000000..8b52324 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ConvertingWrapDynaBean.html @@ -0,0 +1,320 @@ + + + + + + + +ConvertingWrapDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ConvertingWrapDynaBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.WrapDynaBean
+      extended by org.apache.commons.beanutils.ConvertingWrapDynaBean
+
+
+
All Implemented Interfaces:
Serializable, DynaBean
+
+
+
+
public class ConvertingWrapDynaBean
extends WrapDynaBean
+ + +

+

Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties, + though this implementation allows type conversion to occur when properties are set. + This means that (say) Strings can be passed in as values in setter methods and + this DynaBean will convert them to the correct primitive data types.

+ +

IMPLEMENTATION NOTE - This implementation does not + support the contains() and remove() methods.

+

+ +

+

+
Version:
+
$Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
James Strachan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.WrapDynaBean
dynaClass, instance
+  + + + + + + + + + + +
+Constructor Summary
ConvertingWrapDynaBean(Object instance) + +
+          Construct a new DynaBean associated with the specified + JavaBean instance.
+  + + + + + + + + + + + +
+Method Summary
+ voidset(String name, + Object value) + +
+          Set the value of the property with the specified name + performing any type conversions if necessary.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.WrapDynaBean
contains, get, get, get, getDynaClass, getDynaProperty, getInstance, remove, set, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ConvertingWrapDynaBean

+
+public ConvertingWrapDynaBean(Object instance)
+
+
Construct a new DynaBean associated with the specified + JavaBean instance. +

+

+
Parameters:
instance - JavaBean instance to be wrapped
+
+ + + + + + + + +
+Method Detail
+ +

+set

+
+public void set(String name,
+                Object value)
+
+
Set the value of the property with the specified name + performing any type conversions if necessary. So this method + can accept String values for primitive numeric data types for example. +

+

+
Specified by:
set in interface DynaBean
Overrides:
set in class WrapDynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set +
Throws: +
IllegalArgumentException - if there are any problems + copying the property.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBean.html new file mode 100644 index 0000000..788d81a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBean.html @@ -0,0 +1,473 @@ + + + + + + + +DynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Interface DynaBean

+
+
All Known Implementing Classes:
BasicDynaBean, ConvertingWrapDynaBean, LazyDynaBean, LazyDynaMap, ResultSetIterator, WrapDynaBean
+
+
+
+
public interface DynaBean
+ + +

+

A DynaBean is a Java object that supports properties + whose names and data types, as well as values, may be dynamically modified. + To the maximum degree feasible, other components of the BeanUtils package + will recognize such beans and treat them as standard JavaBeans for the + purpose of retrieving and setting property values.

+

+ +

+

+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig McClanahan, Paulo Gaspar
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleancontains(String name, + String key) + +
+          Does the specified mapped property contain a value for the specified + key value?
+ Objectget(String name) + +
+          Return the value of a simple property with the specified name.
+ Objectget(String name, + int index) + +
+          Return the value of an indexed property with the specified name.
+ Objectget(String name, + String key) + +
+          Return the value of a mapped property with the specified name, + or null if there is no value for the specified key.
+ DynaClassgetDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ voidremove(String name, + String key) + +
+          Remove any existing value for the specified key on the + specified mapped property.
+ voidset(String name, + int index, + Object value) + +
+          Set the value of an indexed property with the specified name.
+ voidset(String name, + Object value) + +
+          Set the value of a simple property with the specified name.
+ voidset(String name, + String key, + Object value) + +
+          Set the value of a mapped property with the specified name.
+  +

+ + + + + + + + +
+Method Detail
+ +

+contains

+
+boolean contains(String name,
+                 String key)
+
+
Does the specified mapped property contain a value for the specified + key value? +

+

+
Parameters:
name - Name of the property to check
key - Name of the key to check +
Returns:
true if the mapped property contains a value for + the specified key, otherwise false +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+Object get(String name)
+
+
Return the value of a simple property with the specified name. +

+

+
Parameters:
name - Name of the property whose value is to be retrieved +
Returns:
The property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+Object get(String name,
+           int index)
+
+
Return the value of an indexed property with the specified name. +

+

+
Parameters:
name - Name of the property whose value is to be retrieved
index - Index of the value to be retrieved +
Returns:
The indexed property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property +
NullPointerException - if no array or List has been + initialized for this property
+
+
+
+ +

+get

+
+Object get(String name,
+           String key)
+
+
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +

+

+
Parameters:
name - Name of the property whose value is to be retrieved
key - Key of the value to be retrieved +
Returns:
The mapped property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getDynaClass

+
+DynaClass getDynaClass()
+
+
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +

+

+ +
Returns:
The associated DynaClass
+
+
+
+ +

+remove

+
+void remove(String name,
+            String key)
+
+
Remove any existing value for the specified key on the + specified mapped property. +

+

+
Parameters:
name - Name of the property for which a value is to + be removed
key - Key of the value to be removed +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+set

+
+void set(String name,
+         Object value)
+
+
Set the value of a simple property with the specified name. +

+

+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
NullPointerException - if an attempt is made to set a + primitive property to null
+
+
+
+ +

+set

+
+void set(String name,
+         int index,
+         Object value)
+
+
Set the value of an indexed property with the specified name. +

+

+
Parameters:
name - Name of the property whose value is to be set
index - Index of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property
+
+
+
+ +

+set

+
+void set(String name,
+         String key,
+         Object value)
+
+
Set the value of a mapped property with the specified name. +

+

+
Parameters:
name - Name of the property whose value is to be set
key - Key of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBeanMapDecorator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBeanMapDecorator.html new file mode 100644 index 0000000..415a14d --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaBeanMapDecorator.html @@ -0,0 +1,739 @@ + + + + + + + +DynaBeanMapDecorator (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class DynaBeanMapDecorator

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.DynaBeanMapDecorator
+
+
+
All Implemented Interfaces:
Map
+
+
+
+
public class DynaBeanMapDecorator
extends Object
implements Map
+ + +

+

Decorates a DynaBean to provide Map behaviour.

+ +

The motivation for this implementation is to provide access to DynaBean + properties in technologies that are unaware of BeanUtils and DynaBeans - + such as the expression languages of JSTL and JSF.

+ +

This can be achieved either by wrapping the DynaBean prior to + providing it to the technolody to process or by providing a Map + accessor method on the DynaBean implementation: +


+         public Map getMap() {
+             return new DynaBeanMapDecorator(this);
+         }
+ +

+ +

This, for example, could be used in JSTL in the following way to access + a DynaBean's fooProperty: +

  • ${myDynaBean.map.fooProperty}
+

+ +

Usage

+ +

To decorate a DynaBean simply instantiate this class with the + target DynaBean:

+ +
  • Map fooMap = new DynaBeanMapDecorator(fooDynaBean);
+ +

The above example creates a read only Map. + To create a Map which can be modified, construct a + DynaBeanMapDecorator with the read only + attribute set to false:

+ +
  • Map fooMap = new DynaBeanMapDecorator(fooDynaBean, false);
+ +

Limitations

+

In this implementation the entrySet(), keySet() + and values() methods create an unmodifiable + Set and it does not support the Map's clear() + and remove() operations.

+

+ +

+

+
Since:
+
BeanUtils 1.8.0
+
Version:
+
$Revision: 546471 $ $Date: 2007-06-12 13:57:20 +0100 (Tue, 12 Jun 2007) $
+
+
+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from interface java.util.Map
Map.Entry
+  + + + + + + + + + + + + + + +
+Constructor Summary
DynaBeanMapDecorator(DynaBean dynaBean) + +
+          Constructs a read only Map for the specified + DynaBean.
DynaBeanMapDecorator(DynaBean dynaBean, + boolean readOnly) + +
+          Construct a Map for the specified DynaBean.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclear() + +
+          clear() operation is not supported.
+ booleancontainsKey(Object key) + +
+          Indicate whether the DynaBean contains a specified + value for one (or more) of its properties.
+ booleancontainsValue(Object value) + +
+          Indicates whether the decorated DynaBean contains + a specified value.
+ SetentrySet() + +
+          Returns the Set of the property/value mappings + in the decorated DynaBean.
+ Objectget(Object key) + +
+          Return the value for the specified key from + the decorated DynaBean.
+ DynaBeangetDynaBean() + +
+          Provide access to the underlying DynaBean + this Map decorates.
+ booleanisEmpty() + +
+          Indicate whether the decorated DynaBean has + any properties.
+ booleanisReadOnly() + +
+          Indicate whether the Map is read only.
+ SetkeySet() + +
+          Returns the Set of the property + names in the decorated DynaBean.
+ Objectput(Object key, + Object value) + +
+          Set the value for the specified property in + the decorated DynaBean.
+ voidputAll(Map map) + +
+          Copy the contents of a Map to the decorated DynaBean.
+ Objectremove(Object key) + +
+          remove() operation is not supported.
+ intsize() + +
+          Returns the number properties in the decorated + DynaBean.
+ Collectionvalues() + +
+          Returns the set of property values in the + decorated DynaBean.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+ + + + + + + +
Methods inherited from interface java.util.Map
equals, hashCode
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DynaBeanMapDecorator

+
+public DynaBeanMapDecorator(DynaBean dynaBean)
+
+
Constructs a read only Map for the specified + DynaBean. +

+

+
Parameters:
dynaBean - The dyna bean being decorated +
Throws: +
IllegalArgumentException - if the DynaBean is null.
+
+
+ +

+DynaBeanMapDecorator

+
+public DynaBeanMapDecorator(DynaBean dynaBean,
+                            boolean readOnly)
+
+
Construct a Map for the specified DynaBean. +

+

+
Parameters:
dynaBean - The dyna bean being decorated
readOnly - true if the Mpa is read only + otherwise false +
Throws: +
IllegalArgumentException - if the DynaBean is null.
+
+ + + + + + + + +
+Method Detail
+ +

+isReadOnly

+
+public boolean isReadOnly()
+
+
Indicate whether the Map is read only. +

+

+
+
+
+ +
Returns:
true if the Map is read only, + otherwise false.
+
+
+
+ +

+clear

+
+public void clear()
+
+
clear() operation is not supported. +

+

+
Specified by:
clear in interface Map
+
+
+ +
Throws: +
UnsupportedOperationException
+
+
+
+ +

+containsKey

+
+public boolean containsKey(Object key)
+
+
Indicate whether the DynaBean contains a specified + value for one (or more) of its properties. +

+

+
Specified by:
containsKey in interface Map
+
+
+
Parameters:
key - The DynaBean's property name +
Returns:
true if one of the DynaBean's + properties contains a specified value.
+
+
+
+ +

+containsValue

+
+public boolean containsValue(Object value)
+
+
Indicates whether the decorated DynaBean contains + a specified value. +

+

+
Specified by:
containsValue in interface Map
+
+
+
Parameters:
value - The value to check for. +
Returns:
true if one of the the DynaBean's + properties contains the specified value, otherwise + false.
+
+
+
+ +

+entrySet

+
+public Set entrySet()
+
+

Returns the Set of the property/value mappings + in the decorated DynaBean.

+ +

Each element in the Set is a Map.Entry + type.

+

+

+
Specified by:
entrySet in interface Map
+
+
+ +
Returns:
An unmodifiable set of the DynaBean + property name/value pairs
+
+
+
+ +

+get

+
+public Object get(Object key)
+
+
Return the value for the specified key from + the decorated DynaBean. +

+

+
Specified by:
get in interface Map
+
+
+
Parameters:
key - The DynaBean's property name +
Returns:
The value for the specified property.
+
+
+
+ +

+isEmpty

+
+public boolean isEmpty()
+
+
Indicate whether the decorated DynaBean has + any properties. +

+

+
Specified by:
isEmpty in interface Map
+
+
+ +
Returns:
true if the DynaBean has + no properties, otherwise false.
+
+
+
+ +

+keySet

+
+public Set keySet()
+
+

Returns the Set of the property + names in the decorated DynaBean.

+ +

N.B.For DynaBeans whose associated DynaClass + is a MutableDynaClass a new Set is created every + time, otherwise the Set is created only once and cached.

+

+

+
Specified by:
keySet in interface Map
+
+
+ +
Returns:
An unmodifiable set of the DynaBeans + property names.
+
+
+
+ +

+put

+
+public Object put(Object key,
+                  Object value)
+
+
Set the value for the specified property in + the decorated DynaBean. +

+

+
Specified by:
put in interface Map
+
+
+
Parameters:
key - The DynaBean's property name
value - The value for the specified property. +
Returns:
The previous property's value. +
Throws: +
UnsupportedOperationException - if + isReadOnly() is true.
+
+
+
+ +

+putAll

+
+public void putAll(Map map)
+
+
Copy the contents of a Map to the decorated DynaBean. +

+

+
Specified by:
putAll in interface Map
+
+
+
Parameters:
map - The Map of values to copy. +
Throws: +
UnsupportedOperationException - if + isReadOnly() is true.
+
+
+
+ +

+remove

+
+public Object remove(Object key)
+
+
remove() operation is not supported. +

+

+
Specified by:
remove in interface Map
+
+
+
Parameters:
key - The DynaBean's property name +
Returns:
the value removed +
Throws: +
UnsupportedOperationException
+
+
+
+ +

+size

+
+public int size()
+
+
Returns the number properties in the decorated + DynaBean. +

+

+
Specified by:
size in interface Map
+
+
+ +
Returns:
The number of properties.
+
+
+
+ +

+values

+
+public Collection values()
+
+
Returns the set of property values in the + decorated DynaBean. +

+

+
Specified by:
values in interface Map
+
+
+ +
Returns:
Unmodifiable collection of values.
+
+
+
+ +

+getDynaBean

+
+public DynaBean getDynaBean()
+
+
Provide access to the underlying DynaBean + this Map decorates. +

+

+
+
+
+ +
Returns:
the decorated DynaBean.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaClass.html new file mode 100644 index 0000000..dca3c30 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaClass.html @@ -0,0 +1,324 @@ + + + + + + + +DynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Interface DynaClass

+
+
All Known Subinterfaces:
MutableDynaClass
+
+
+
All Known Implementing Classes:
BasicDynaClass, LazyDynaClass, LazyDynaMap, ResultSetDynaClass, RowSetDynaClass, WrapDynaClass
+
+
+
+
public interface DynaClass
+ + +

+

A DynaClass is a simulation of the functionality of + java.lang.Class for classes implementing the + DynaBean interface. DynaBean instances that share the same + DynaClass all have the same set of available properties, along with any + associated data types, read-only states, and write-only states.

+

+ +

+

+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig McClanahan, Michael Smith, Paulo Gaspar
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ DynaProperty[]getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it exists; + otherwise, return null.
+ StringgetName() + +
+          Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.
+ DynaBeannewInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+  +

+ + + + + + + + +
+Method Detail
+ +

+getName

+
+String getName()
+
+
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties. +

+

+ +
Returns:
the name of the DynaClass
+
+
+
+ +

+getDynaProperty

+
+DynaProperty getDynaProperty(String name)
+
+
Return a property descriptor for the specified property, if it exists; + otherwise, return null. +

+

+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+getDynaProperties

+
+DynaProperty[] getDynaProperties()
+
+

Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. If no properties are defined, a + zero-length array will be returned.

+ +

FIXME - Should we really be implementing + getBeanInfo() instead, which returns property descriptors + and a bunch of other stuff?

+

+

+ +
Returns:
the set of properties for this DynaClass
+
+
+
+ +

+newInstance

+
+DynaBean newInstance()
+                     throws IllegalAccessException,
+                            InstantiationException
+
+
Instantiate and return a new DynaBean instance, associated + with this DynaClass. +

+

+ +
Returns:
A new DynaBean instance +
Throws: +
IllegalAccessException - if the Class or the appropriate + constructor is not accessible +
InstantiationException - if this Class represents an abstract + class, an array class, a primitive type, or void; or if instantiation + fails for some other reason
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaProperty.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaProperty.html new file mode 100644 index 0000000..1d382b0 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/DynaProperty.html @@ -0,0 +1,601 @@ + + + + + + + +DynaProperty (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class DynaProperty

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.DynaProperty
+
+
+
All Implemented Interfaces:
Serializable
+
+
+
+
public class DynaProperty
extends Object
implements Serializable
+ + +

+

The metadata describing an individual property of a DynaBean.

+ +

The meta contains an optional content type property (getContentType()) + for use by mapped and iterated properties. + A mapped or iterated property may choose to indicate the type it expects. + The DynaBean implementation may choose to enforce this type on its entries. + Alternatively, an implementatin may choose to ignore this property. + All keys for maps must be of type String so no meta data is needed for map keys.

+

+ +

+

+
Version:
+
$Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Craig R. McClanahan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  ClasscontentType + +
+          The (optional) type of content elements for indexed DynaProperty
+protected  Stringname + +
+          Property name
+protected  Classtype + +
+          Property type
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
DynaProperty(String name) + +
+          Construct a property that accepts any data type.
DynaProperty(String name, + Class type) + +
+          Construct a property of the specified data type.
DynaProperty(String name, + Class type, + Class contentType) + +
+          Construct an indexed or mapped DynaProperty that supports (pseudo)-introspection + of the content type.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanequals(Object obj) + +
+          Checks this instance against the specified Object for equality.
+ ClassgetContentType() + +
+          Gets the (optional) type of the indexed content for DynaProperty's + that support this feature.
+ StringgetName() + +
+          Get the name of this property.
+ ClassgetType() + +
+          Gets the Java class representing the data type of the underlying property + values.
+ inthashCode() + +
+           
+ booleanisIndexed() + +
+          Does this property represent an indexed value (ie an array or List)?
+ booleanisMapped() + +
+          Does this property represent a mapped value (ie a Map)?
+ StringtoString() + +
+          Return a String representation of this Object.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+name

+
+protected String name
+
+
Property name +

+

+
+
+
+ +

+type

+
+protected transient Class type
+
+
Property type +

+

+
+
+
+ +

+contentType

+
+protected transient Class contentType
+
+
The (optional) type of content elements for indexed DynaProperty +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+DynaProperty

+
+public DynaProperty(String name)
+
+
Construct a property that accepts any data type. +

+

+
Parameters:
name - Name of the property being described
+
+
+ +

+DynaProperty

+
+public DynaProperty(String name,
+                    Class type)
+
+
Construct a property of the specified data type. +

+

+
Parameters:
name - Name of the property being described
type - Java class representing the property data type
+
+
+ +

+DynaProperty

+
+public DynaProperty(String name,
+                    Class type,
+                    Class contentType)
+
+
Construct an indexed or mapped DynaProperty that supports (pseudo)-introspection + of the content type. +

+

+
Parameters:
name - Name of the property being described
type - Java class representing the property data type
contentType - Class that all indexed or mapped elements are instances of
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public String getName()
+
+
Get the name of this property. +

+

+
+
+
+ +
Returns:
the name of the property
+
+
+
+ +

+getType

+
+public Class getType()
+
+

Gets the Java class representing the data type of the underlying property + values.

+ +

There are issues with serializing primitive class types on certain JVM versions + (including java 1.3). + Therefore, this field must not be serialized using the standard methods.

+ +

Please leave this field as transient

+

+

+
+
+
+ +
Returns:
the property type
+
+
+
+ +

+getContentType

+
+public Class getContentType()
+
+
Gets the (optional) type of the indexed content for DynaProperty's + that support this feature. + +

There are issues with serializing primitive class types on certain JVM versions + (including java 1.3). + Therefore, this field must not be serialized using the standard methods.

+

+

+
+
+
+ +
Returns:
the Class for the content type if this is an indexed DynaProperty + and this feature is supported. Otherwise null.
+
+
+
+ +

+isIndexed

+
+public boolean isIndexed()
+
+
Does this property represent an indexed value (ie an array or List)? +

+

+
+
+
+ +
Returns:
true if the property is indexed (i.e. is a List or + array), otherwise false
+
+
+
+ +

+isMapped

+
+public boolean isMapped()
+
+
Does this property represent a mapped value (ie a Map)? +

+

+
+
+
+ +
Returns:
true if the property is a Map + otherwise false
+
+
+
+ +

+equals

+
+public boolean equals(Object obj)
+
+
Checks this instance against the specified Object for equality. Overrides the + default refererence test for equality provided by Object.equals(Object) +

+

+
Overrides:
equals in class Object
+
+
+
Parameters:
obj - The object to compare to +
Returns:
true if object is a dyna property with the same name + type and content type, otherwise false
Since:
+
1.8.0
+
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
+
Overrides:
hashCode in class Object
+
+
+ +
Returns:
the hashcode for this dyna property
Since:
+
1.8.0
+
See Also:
Object.hashCode()
+
+
+
+ +

+toString

+
+public String toString()
+
+
Return a String representation of this Object. +

+

+
Overrides:
toString in class Object
+
+
+ +
Returns:
a String representation of the dyna property
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaBean.html new file mode 100644 index 0000000..419ab38 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaBean.html @@ -0,0 +1,1317 @@ + + + + + + + +LazyDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class LazyDynaBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.LazyDynaBean
+
+
+
All Implemented Interfaces:
Serializable, DynaBean
+
+
+
Direct Known Subclasses:
LazyDynaMap
+
+
+
+
public class LazyDynaBean
extends Object
implements DynaBean, Serializable
+ + +

+

DynaBean which automatically adds properties to the DynaClass + and provides Lazy List and Lazy Map features.

+ +

DynaBeans deal with three types of properties - simple, indexed and mapped and + have the following get() and set() methods for + each of these types:

+
    +
  • Simple property methods - get(name) and + set(name, value)
  • +
  • Indexed property methods - get(name, index) and + set(name, index, value)
  • +
  • Mapped property methods - get(name, key) and + set(name, key, value)
  • +
+ +

Getting Property Values

+

Calling any of the get() methods, for a property which + doesn't exist, returns null in this implementation.

+ +

Setting Simple Properties

+

The LazyDynaBean will automatically add a property to the DynaClass + if it doesn't exist when the set(name, value) method is called.

+ + DynaBean myBean = new LazyDynaBean();
+ myBean.set("myProperty", "myValue");
+ +

Setting Indexed Properties

+

If the property doesn't exist, the LazyDynaBean will automatically add + a property with an ArrayList type to the DynaClass when + the set(name, index, value) method is called. + It will also instantiate a new ArrayList and automatically grow + the List so that it is big enough to accomodate the index being set. + ArrayList is the default indexed property that LazyDynaBean uses but + this can be easily changed by overriding the defaultIndexedProperty(name) + method.

+ + DynaBean myBean = new LazyDynaBean();
+ myBean.set("myIndexedProperty", 0, "myValue1");
+ myBean.set("myIndexedProperty", 1, "myValue2");
+ +

If the indexed property does exist in the DynaClass but is set to + null in the LazyDynaBean, then it will instantiate a + new List or Array as specified by the property's type + in the DynaClass and automatically grow the List + or Array so that it is big enough to accomodate the index being set.

+ + DynaBean myBean = new LazyDynaBean();
+ MutableDynaClass myClass = (MutableDynaClass)myBean.getDynaClass();
+ myClass.add("myIndexedProperty", int[].class);
+ myBean.set("myIndexedProperty", 0, new Integer(10));
+ myBean.set("myIndexedProperty", 1, new Integer(20));
+ +

Setting Mapped Properties

+

If the property doesn't exist, the LazyDynaBean will automatically add + a property with a HashMap type to the DynaClass and + instantiate a new HashMap in the DynaBean when the + set(name, key, value) method is called. HashMap is the default + mapped property that LazyDynaBean uses but this can be easily changed by overriding + the defaultMappedProperty(name) method.

+ + DynaBean myBean = new LazyDynaBean();
+ myBean.set("myMappedProperty", "myKey", "myValue");
+ +

If the mapped property does exist in the DynaClass but is set to + null in the LazyDynaBean, then it will instantiate a + new Map as specified by the property's type in the DynaClass.

+ + DynaBean myBean = new LazyDynaBean();
+ MutableDynaClass myClass = (MutableDynaClass)myBean.getDynaClass();
+ myClass.add("myMappedProperty", TreeMap.class);
+ myBean.set("myMappedProperty", "myKey", "myValue");
+ +

Restricted DynaClass

+

MutableDynaClass have a facility to restrict the DynaClass + so that its properties cannot be modified. If the MutableDynaClass is + restricted then calling any of the set() methods for a property which + doesn't exist will result in a IllegalArgumentException being thrown.

+

+ +

+

+
Author:
+
Niall Pemberton
+
See Also:
LazyDynaClass, +Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected static BigDecimalBigDecimal_ZERO + +
+          BigDecimal Zero
+protected static BigIntegerBigInteger_ZERO + +
+          BigInteger Zero
+protected static ByteByte_ZERO + +
+          Byte Zero
+protected static CharacterCharacter_SPACE + +
+          Character Space
+protected static DoubleDouble_ZERO + +
+          Double Zero
+protected  MutableDynaClassdynaClass + +
+          The MutableDynaClass "base class" that this DynaBean + is associated with.
+protected static FloatFloat_ZERO + +
+          Float Zero
+protected static IntegerInteger_ZERO + +
+          Integer Zero
+protected static LongLong_ZERO + +
+          Long Zero
+protected static ShortShort_ZERO + +
+          Short Zero
+protected  Mapvalues + +
+          The MutableDynaClass "base class" that this DynaBean + is associated with.
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
LazyDynaBean() + +
+          Construct a new LazyDynaBean with a LazyDynaClass instance.
LazyDynaBean(DynaClass dynaClass) + +
+          Construct a new DynaBean associated with the specified + DynaClass instance - if its not a MutableDynaClass + then a new LazyDynaClass is created and the properties copied.
LazyDynaBean(String name) + +
+          Construct a new LazyDynaBean with a LazyDynaClass instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleancontains(String name, + String key) + +
+          Does the specified mapped property contain a value for the specified + key value?
+protected  ObjectcreateDynaBeanProperty(String name, + Class type) + +
+          Create a new Instance of a 'DynaBean' Property.
+protected  ObjectcreateIndexedProperty(String name, + Class type) + +
+          Create a new Instance of an 'Indexed' Property
+protected  ObjectcreateMappedProperty(String name, + Class type) + +
+          Create a new Instance of a 'Mapped' Property
+protected  ObjectcreateNumberProperty(String name, + Class type) + +
+          Create a new Instance of a java.lang.Number Property.
+protected  ObjectcreateOtherProperty(String name, + Class type) + +
+          Create a new Instance of other Property types
+protected  ObjectcreatePrimitiveProperty(String name, + Class type) + +
+          Create a new Instance of a 'Primitive' Property.
+protected  ObjectcreateProperty(String name, + Class type) + +
+          Create a new Instance of a Property
+protected  ObjectdefaultIndexedProperty(String name) + +
+          Creates a new ArrayList for an 'indexed' property + which doesn't exist.
+protected  MapdefaultMappedProperty(String name) + +
+          Creates a new HashMap for a 'mapped' property + which doesn't exist.
+ Objectget(String name) + +
+          Return the value of a simple property with the specified name.
+ Objectget(String name, + int index) + +
+          Return the value of an indexed property with the specified name.
+ Objectget(String name, + String key) + +
+          Return the value of a mapped property with the specified name.
+ DynaClassgetDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ MapgetMap() + +
+          Return a Map representation of this DynaBean.
+protected  ObjectgrowIndexedProperty(String name, + Object indexedProperty, + int index) + +
+          Grow the size of an indexed property
+protected  booleanisAssignable(Class dest, + Class source) + +
+          Is an object of the source class assignable to the destination class?
+protected  booleanisDynaProperty(String name) + +
+          Indicates if there is a property with the specified name.
+protected  MapnewMap() + +
+          Creates a new instance of the Map.
+ voidremove(String name, + String key) + +
+          Remove any existing value for the specified key on the + specified mapped property.
+ voidset(String name, + int index, + Object value) + +
+          Set the value of an indexed property with the specified name.
+ voidset(String name, + Object value) + +
+          Set the value of a simple property with the specified name.
+ voidset(String name, + String key, + Object value) + +
+          Set the value of a mapped property with the specified name.
+ intsize(String name) + +
+          Return the size of an indexed or mapped property.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+BigInteger_ZERO

+
+protected static final BigInteger BigInteger_ZERO
+
+
BigInteger Zero +

+

+
+
+
+ +

+BigDecimal_ZERO

+
+protected static final BigDecimal BigDecimal_ZERO
+
+
BigDecimal Zero +

+

+
+
+
+ +

+Character_SPACE

+
+protected static final Character Character_SPACE
+
+
Character Space +

+

+
+
+
+ +

+Byte_ZERO

+
+protected static final Byte Byte_ZERO
+
+
Byte Zero +

+

+
+
+
+ +

+Short_ZERO

+
+protected static final Short Short_ZERO
+
+
Short Zero +

+

+
+
+
+ +

+Integer_ZERO

+
+protected static final Integer Integer_ZERO
+
+
Integer Zero +

+

+
+
+
+ +

+Long_ZERO

+
+protected static final Long Long_ZERO
+
+
Long Zero +

+

+
+
+
+ +

+Float_ZERO

+
+protected static final Float Float_ZERO
+
+
Float Zero +

+

+
+
+
+ +

+Double_ZERO

+
+protected static final Double Double_ZERO
+
+
Double Zero +

+

+
+
+
+ +

+values

+
+protected Map values
+
+
The MutableDynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+
+ +

+dynaClass

+
+protected MutableDynaClass dynaClass
+
+
The MutableDynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+LazyDynaBean

+
+public LazyDynaBean()
+
+
Construct a new LazyDynaBean with a LazyDynaClass instance. +

+

+
+ +

+LazyDynaBean

+
+public LazyDynaBean(String name)
+
+
Construct a new LazyDynaBean with a LazyDynaClass instance. +

+

+
Parameters:
name - Name of this DynaBean class
+
+
+ +

+LazyDynaBean

+
+public LazyDynaBean(DynaClass dynaClass)
+
+
Construct a new DynaBean associated with the specified + DynaClass instance - if its not a MutableDynaClass + then a new LazyDynaClass is created and the properties copied. +

+

+
Parameters:
dynaClass - The DynaClass we are associated with
+
+ + + + + + + + +
+Method Detail
+ +

+getMap

+
+public Map getMap()
+
+
Return a Map representation of this DynaBean. +

+ This, for example, could be used in JSTL in the following way to access + a DynaBean's fooProperty: +
  • ${myDynaBean.map.fooProperty}
+

+

+
+
+
+ +
Returns:
a Map representation of this DynaBean
+
+
+
+ +

+size

+
+public int size(String name)
+
+

Return the size of an indexed or mapped property.

+

+

+
+
+
+
Parameters:
name - Name of the property +
Returns:
The indexed or mapped property size +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+contains

+
+public boolean contains(String name,
+                        String key)
+
+
Does the specified mapped property contain a value for the specified + key value? +

+

+
Specified by:
contains in interface DynaBean
+
+
+
Parameters:
name - Name of the property to check
key - Name of the key to check +
Returns:
true if the mapped property contains a value for + the specified key, otherwise false +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+get

+
+public Object get(String name)
+
+

Return the value of a simple property with the specified name.

+ +

N.B. Returns null if there is no property + of the specified name.

+

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved. +
Returns:
The property's value +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+get

+
+public Object get(String name,
+                  int index)
+
+

Return the value of an indexed property with the specified name.

+ +

N.B. Returns null if there is no 'indexed' + property of the specified name.

+

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
index - Index of the value to be retrieved +
Returns:
The indexed property's value +
Throws: +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property
+
+
+
+ +

+get

+
+public Object get(String name,
+                  String key)
+
+

Return the value of a mapped property with the specified name.

+ +

N.B. Returns null if there is no 'mapped' + property of the specified name.

+

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
key - Key of the value to be retrieved +
Returns:
The mapped property's value +
Throws: +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getDynaClass

+
+public DynaClass getDynaClass()
+
+
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +

+

+
Specified by:
getDynaClass in interface DynaBean
+
+
+ +
Returns:
The associated DynaClass
+
+
+
+ +

+remove

+
+public void remove(String name,
+                   String key)
+
+
Remove any existing value for the specified key on the + specified mapped property. +

+

+
Specified by:
remove in interface DynaBean
+
+
+
Parameters:
name - Name of the property for which a value is to + be removed
key - Key of the value to be removed +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+set

+
+public void set(String name,
+                Object value)
+
+
Set the value of a simple property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set +
Throws: +
IllegalArgumentException - if this is not an existing property + name for our DynaClass and the MutableDynaClass is restricted +
ConversionException - if the specified value cannot be + converted to the type required for this property +
NullPointerException - if an attempt is made to set a + primitive property to null
+
+
+
+ +

+set

+
+public void set(String name,
+                int index,
+                Object value)
+
+
Set the value of an indexed property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
index - Index of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property
+
+
+
+ +

+set

+
+public void set(String name,
+                String key,
+                Object value)
+
+
Set the value of a mapped property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
key - Key of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+growIndexedProperty

+
+protected Object growIndexedProperty(String name,
+                                     Object indexedProperty,
+                                     int index)
+
+
Grow the size of an indexed property +

+

+
+
+
+
Parameters:
name - The name of the property
indexedProperty - The current property value
index - The indexed value to grow the property to (i.e. one less than + the required size) +
Returns:
The new property value (grown to the appropriate size)
+
+
+
+ +

+createProperty

+
+protected Object createProperty(String name,
+                                Class type)
+
+
Create a new Instance of a Property +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+createIndexedProperty

+
+protected Object createIndexedProperty(String name,
+                                       Class type)
+
+
Create a new Instance of an 'Indexed' Property +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+createMappedProperty

+
+protected Object createMappedProperty(String name,
+                                      Class type)
+
+
Create a new Instance of a 'Mapped' Property +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+createDynaBeanProperty

+
+protected Object createDynaBeanProperty(String name,
+                                        Class type)
+
+
Create a new Instance of a 'DynaBean' Property. +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+createPrimitiveProperty

+
+protected Object createPrimitiveProperty(String name,
+                                         Class type)
+
+
Create a new Instance of a 'Primitive' Property. +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+createNumberProperty

+
+protected Object createNumberProperty(String name,
+                                      Class type)
+
+
Create a new Instance of a java.lang.Number Property. +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+createOtherProperty

+
+protected Object createOtherProperty(String name,
+                                     Class type)
+
+
Create a new Instance of other Property types +

+

+
+
+
+
Parameters:
name - The name of the property
type - The class of the property +
Returns:
The new value
+
+
+
+ +

+defaultIndexedProperty

+
+protected Object defaultIndexedProperty(String name)
+
+

Creates a new ArrayList for an 'indexed' property + which doesn't exist.

+ +

This method shouls be overriden if an alternative List + or Array implementation is required for 'indexed' properties.

+

+

+
+
+
+
Parameters:
name - Name of the 'indexed property. +
Returns:
The default value for an indexed property (java.util.ArrayList)
+
+
+
+ +

+defaultMappedProperty

+
+protected Map defaultMappedProperty(String name)
+
+

Creates a new HashMap for a 'mapped' property + which doesn't exist.

+ +

This method can be overriden if an alternative Map + implementation is required for 'mapped' properties.

+

+

+
+
+
+
Parameters:
name - Name of the 'mapped property. +
Returns:
The default value for a mapped property (java.util.HashMap)
+
+
+
+ +

+isDynaProperty

+
+protected boolean isDynaProperty(String name)
+
+
Indicates if there is a property with the specified name. +

+

+
+
+
+
Parameters:
name - The name of the property to check +
Returns:
true if there is a property of the + specified name, otherwise false
+
+
+
+ +

+isAssignable

+
+protected boolean isAssignable(Class dest,
+                               Class source)
+
+
Is an object of the source class assignable to the destination class? +

+

+
+
+
+
Parameters:
dest - Destination class
source - Source class +
Returns:
true if the source class is assignable to the + destination class, otherwise false
+
+
+
+ +

+newMap

+
+protected Map newMap()
+
+

Creates a new instance of the Map.

+

+

+
+
+
+ +
Returns:
a new Map instance
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaClass.html new file mode 100644 index 0000000..68731a4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaClass.html @@ -0,0 +1,797 @@ + + + + + + + +LazyDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class LazyDynaClass

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BasicDynaClass
+      extended by org.apache.commons.beanutils.LazyDynaClass
+
+
+
All Implemented Interfaces:
Serializable, DynaClass, MutableDynaClass
+
+
+
+
public class LazyDynaClass
extends BasicDynaClass
implements MutableDynaClass
+ + +

+

DynaClass which implements the MutableDynaClass interface.

+ +

A MutableDynaClass is a specialized extension to DynaClass + that allows properties to be added or removed dynamically.

+ +

This implementation has one slightly unusual default behaviour - calling + the getDynaProperty(name) method for a property which doesn't + exist returns a DynaProperty rather than null. The + reason for this is that BeanUtils calls this method to check if + a property exists before trying to set the value. This would defeat the object + of the LazyDynaBean which automatically adds missing properties + when any of its set() methods are called. For this reason the + isDynaProperty(name) method has been added to this implementation + in order to determine if a property actually exists. If the more normal + behaviour of returning null is required, then this can be achieved + by calling the setReturnNull(true).

+ +

The add(name, type, readable, writable) method is not implemented + and always throws an UnsupportedOperationException. I believe + this attributes need to be added to the DynaProperty class + in order to control read/write facilities.

+

+ +

+

+
Author:
+
Niall Pemberton
+
See Also:
LazyDynaBean, +Serialized Form
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+protected  booleanrestricted + +
+          Controls whether changes to this DynaClass's properties are allowed.
+protected  booleanreturnNull + +
+          Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one.
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.BasicDynaClass
constructor, constructorTypes, constructorValues, dynaBeanClass, name, properties, propertiesMap
+  + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
LazyDynaClass() + +
+          Construct a new LazyDynaClass with default parameters.
LazyDynaClass(String name) + +
+          Construct a new LazyDynaClass with the specified name.
LazyDynaClass(String name, + Class dynaBeanClass) + +
+          Construct a new LazyDynaClass with the specified name and DynaBean class.
LazyDynaClass(String name, + Class dynaBeanClass, + DynaProperty[] properties) + +
+          Construct a new LazyDynaClass with the specified name, DynaBean class and properties.
LazyDynaClass(String name, + DynaProperty[] properties) + +
+          Construct a new LazyDynaClass with the specified name and properties.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidadd(DynaProperty property) + +
+          Add a new dynamic property.
+ voidadd(String name) + +
+          Add a new dynamic property with no restrictions on data type, + readability, or writeability.
+ voidadd(String name, + Class type) + +
+          Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability.
+ voidadd(String name, + Class type, + boolean readable, + boolean writeable) + +
+          Add a new dynamic property with the specified data type, readability, + and writeability.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property.
+ booleanisDynaProperty(String name) + +
+          Indicate whether a property actually exists.
+ booleanisRestricted() + +
+          Is this DynaClass currently restricted.
+ booleanisReturnNull() + +
+          Should this DynaClass return a null from + the getDynaProperty(name) method if the property + doesn't exist.
+ voidremove(String name) + +
+          Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class.
+ voidsetRestricted(boolean restricted) + +
+          Set whether this DynaClass is currently restricted.
+ voidsetReturnNull(boolean returnNull) + +
+          Set whether this DynaClass should return a null from + the getDynaProperty(name) method if the property + doesn't exist.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.BasicDynaClass
getDynaBeanClass, getDynaProperties, getName, newInstance, setDynaBeanClass, setProperties
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+ + + + + + + +
Methods inherited from interface org.apache.commons.beanutils.DynaClass
getDynaProperties, getName, newInstance
+  +

+ + + + + + + + +
+Field Detail
+ +

+restricted

+
+protected boolean restricted
+
+
Controls whether changes to this DynaClass's properties are allowed. +

+

+
+
+
+ +

+returnNull

+
+protected boolean returnNull
+
+

Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one.

+ +

Default is false. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+LazyDynaClass

+
+public LazyDynaClass()
+
+
Construct a new LazyDynaClass with default parameters. +

+

+
+ +

+LazyDynaClass

+
+public LazyDynaClass(String name)
+
+
Construct a new LazyDynaClass with the specified name. +

+

+
Parameters:
name - Name of this DynaBean class
+
+
+ +

+LazyDynaClass

+
+public LazyDynaClass(String name,
+                     Class dynaBeanClass)
+
+
Construct a new LazyDynaClass with the specified name and DynaBean class. +

+

+
Parameters:
name - Name of this DynaBean class
dynaBeanClass - The implementation class for new instances
+
+
+ +

+LazyDynaClass

+
+public LazyDynaClass(String name,
+                     DynaProperty[] properties)
+
+
Construct a new LazyDynaClass with the specified name and properties. +

+

+
Parameters:
name - Name of this DynaBean class
properties - Property descriptors for the supported properties
+
+
+ +

+LazyDynaClass

+
+public LazyDynaClass(String name,
+                     Class dynaBeanClass,
+                     DynaProperty[] properties)
+
+
Construct a new LazyDynaClass with the specified name, DynaBean class and properties. +

+

+
Parameters:
name - Name of this DynaBean class
dynaBeanClass - The implementation class for new intances
properties - Property descriptors for the supported properties
+
+ + + + + + + + +
+Method Detail
+ +

+isRestricted

+
+public boolean isRestricted()
+
+

Is this DynaClass currently restricted.

+

If restricted, no changes to the existing registration of + property names, data types, readability, or writeability are allowed.

+

+

+
Specified by:
isRestricted in interface MutableDynaClass
+
+
+ +
Returns:
true if this MutableDynaClass cannot be changed + otherwise false
+
+
+
+ +

+setRestricted

+
+public void setRestricted(boolean restricted)
+
+

Set whether this DynaClass is currently restricted.

+

If restricted, no changes to the existing registration of + property names, data types, readability, or writeability are allowed.

+

+

+
Specified by:
setRestricted in interface MutableDynaClass
+
+
+
Parameters:
restricted - true if this MutableDynaClass cannot + be changed otherwise false
+
+
+
+ +

+isReturnNull

+
+public boolean isReturnNull()
+
+
Should this DynaClass return a null from + the getDynaProperty(name) method if the property + doesn't exist. +

+

+
+
+
+ +
Returns:
true if a null DynaProperty + should be returned if the property doesn't exist, otherwise + false if a new DynaProperty should be created.
+
+
+
+ +

+setReturnNull

+
+public void setReturnNull(boolean returnNull)
+
+
Set whether this DynaClass should return a null from + the getDynaProperty(name) method if the property + doesn't exist. +

+

+
+
+
+
Parameters:
returnNull - true if a null DynaProperty + should be returned if the property doesn't exist, otherwise + false if a new DynaProperty should be created.
+
+
+
+ +

+add

+
+public void add(String name)
+
+
Add a new dynamic property with no restrictions on data type, + readability, or writeability. +

+

+
Specified by:
add in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the new dynamic property +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+add

+
+public void add(String name,
+                Class type)
+
+
Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability. +

+

+
Specified by:
add in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the new dynamic property
type - Data type of the new dynamic property (null for no + restrictions) +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+add

+
+public void add(String name,
+                Class type,
+                boolean readable,
+                boolean writeable)
+
+

Add a new dynamic property with the specified data type, readability, + and writeability.

+ +

N.B.Support for readable/writeable properties has not been implemented + and this method always throws a UnsupportedOperationException.

+ +

I'm not sure the intention of the original authors for this method, but it seems to + me that readable/writable should be attributes of the DynaProperty class + (which they are not) and is the reason this method has not been implemented.

+

+

+
Specified by:
add in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the new dynamic property
type - Data type of the new dynamic property (null for no + restrictions)
readable - Set to true if this property value + should be readable
writeable - Set to true if this property value + should be writeable +
Throws: +
UnsupportedOperationException - anytime this method is called
+
+
+
+ +

+add

+
+protected void add(DynaProperty property)
+
+
Add a new dynamic property. +

+

+
+
+
+
Parameters:
property - Property the new dynamic property to add. +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+remove

+
+public void remove(String name)
+
+
Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class. + NOTE - This does NOT cause any + corresponding property values to be removed from DynaBean instances + associated with this DynaClass. +

+

+
Specified by:
remove in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the dynamic property to remove +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no properties can be removed
+
+
+
+ +

+getDynaProperty

+
+public DynaProperty getDynaProperty(String name)
+
+

Return a property descriptor for the specified property.

+ +

If the property is not found and the returnNull indicator is + true, this method always returns null.

+ +

If the property is not found and the returnNull indicator is + false a new property descriptor is created and returned (although + its not actually added to the DynaClass's properties). This is the default + beahviour.

+ +

The reason for not returning a null property descriptor is that + BeanUtils uses this method to check if a property exists + before trying to set it - since these Lazy implementations automatically + add any new properties when they are set, returning null from + this method would defeat their purpose.

+

+

+
Specified by:
getDynaProperty in interface DynaClass
Overrides:
getDynaProperty in class BasicDynaClass
+
+
+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The dyna property for the specified name +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+isDynaProperty

+
+public boolean isDynaProperty(String name)
+
+

Indicate whether a property actually exists.

+ +

N.B. Using getDynaProperty(name) == null + doesn't work in this implementation because that method might + return a DynaProperty if it doesn't exist (depending on the + returnNull indicator).

+

+

+
+
+
+
Parameters:
name - The name of the property to check +
Returns:
true if there is a property of the + specified name, otherwise false +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaList.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaList.html new file mode 100644 index 0000000..6d37ca7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaList.html @@ -0,0 +1,842 @@ + + + + + + + +LazyDynaList (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class LazyDynaList

+
+java.lang.Object
+  extended by java.util.AbstractCollection
+      extended by java.util.AbstractList
+          extended by java.util.ArrayList
+              extended by org.apache.commons.beanutils.LazyDynaList
+
+
+
All Implemented Interfaces:
Serializable, Cloneable, Iterable, Collection, List, RandomAccess
+
+
+
+
public class LazyDynaList
extends ArrayList
+ + +

+

Lazy DynaBean List.

+ +

There are two main purposes for this class:

+
    +
  • To provide Lazy List behaviour - automatically + growing and populating the List + with either DynaBean, java.util.Map + or POJO Beans.
  • +
  • To provide a straight forward way of putting a Collection + or Array into the lazy list and a straight forward + way to get it out again at the end.
  • +
+ +

All elements added to the List are stored as DynaBean's:

+
    +
  • java.util.Map elements are "wrapped" in a LazyDynaMap. +
  • POJO Bean elements are "wrapped" in a WrapDynaBean. +
  • DynaBean's are stored un-changed. +
+ +

toArray()

+

The toArray() method returns an array of the + elements of the appropriate type. If the LazyDynaList + is populated with java.util.Map objects a + Map[] array is returned. + If the list is populated with POJO Beans an appropriate + array of the POJO Beans is returned. Otherwise a DynaBean[] + array is returned. +

+ +

toDynaBeanArray()

+

The toDynaBeanArray() method returns a + DynaBean[] array of the elements in the List. +

+ +

N.B.All the elements in the List must be the + same type. If the DynaClass or Class + of the LazyDynaList's elements is + not specified, then it will be automatically set to the type + of the first element populated. +

+ +

Example 1

+

If you have an array of java.util.Map[] - you can put that into + a LazyDynaList.

+ +

+    TreeMap[] myArray = .... // your Map[]
+    List lazyList = new LazyDynaList(myArray);
+ 
+ +

New elements of the appropriate Map type are + automatically populated:

+ +

+    // get(index) automatically grows the list
+    DynaBean newElement = (DynaBean)lazyList.get(lazyList.size());
+    newElement.put("someProperty", "someValue");
+ 
+ +

Once you've finished you can get back an Array of the + elements of the appropriate type:

+ +

+    // Retrieve the array from the list
+    TreeMap[] myArray = (TreeMap[])lazyList.toArray());
+ 
+ + +

Example 2

+

Alternatively you can create an empty List and + specify the Class for List's elements. The LazyDynaList + uses the Class to automatically populate elements:

+ +

+    // e.g. For Maps
+    List lazyList = new LazyDynaList(TreeMap.class);
+ 
+    // e.g. For POJO Beans
+    List lazyList = new LazyDynaList(MyPojo.class);
+ 
+    // e.g. For DynaBeans
+    List lazyList = new LazyDynaList(MyDynaBean.class);
+ 
+ +

Example 3

+

Alternatively you can create an empty List and specify the + DynaClass for List's elements. The LazyDynaList uses + the DynaClass to automatically populate elements:

+ +

+    // e.g. For Maps
+    DynaClass dynaClass = new LazyDynaMap(new HashMap());
+    List lazyList = new LazyDynaList(dynaClass);
+ 
+    // e.g. For POJO Beans
+    DynaClass dynaClass = (new WrapDynaBean(myPojo)).getDynaClass();
+    List lazyList = new LazyDynaList(dynaClass);
+ 
+    // e.g. For DynaBeans
+    DynaClass dynaClass = new BasicDynaClass(properties);
+    List lazyList = new LazyDynaList(dynaClass);
+ 
+ +

N.B. You may wonder why control the type + using a DynaClass rather than the Class + as in the previous example - the reason is that some DynaBean + implementations don't have a default empty constructor and + therefore need to be instantiated using the DynaClass.newInstance() + method.

+ +

Example 4

+

A slight variation - set the element type using either + the setElementType(Class) method or the + setElementDynaClass(DynaClass) method - then populate + with the normal java.util.List methods(i.e. + add(), addAll() or set()).

+ +

+    // Create a new LazyDynaList (100 element capacity)
+    LazyDynaList lazyList = new LazyDynaList(100);
+ 
+    // Either Set the element type...
+    lazyList.setElementType(TreeMap.class);
+ 
+    // ...or the element DynaClass...
+    lazyList.setElementDynaClass(new MyCustomDynaClass());
+ 
+    // Populate from a collection
+    lazyList.addAll(myCollection);
+
+ 
+

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Niall Pemberton
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class java.util.AbstractList
modCount
+  + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
LazyDynaList() + +
+          Default Constructor.
LazyDynaList(Class elementType) + +
+          Construct a LazyDynaList with a + specified type for its elements.
LazyDynaList(Collection collection) + +
+          Construct a LazyDynaList populated with the + elements of a Collection.
LazyDynaList(DynaClass elementDynaClass) + +
+          Construct a LazyDynaList with a + specified DynaClass for its elements.
LazyDynaList(int capacity) + +
+          Construct a LazyDynaList with the + specified capacity.
LazyDynaList(Object[] array) + +
+          Construct a LazyDynaList populated with the + elements of an Array.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidadd(int index, + Object element) + +
+          Insert an element at the specified index position.
+ booleanadd(Object element) + +
+          Add an element to the List.
+ booleanaddAll(Collection collection) + +
+          Add all the elements from a Collection to the list.
+ booleanaddAll(int index, + Collection collection) + +
+          Insert all the elements from a Collection into the + list at a specified position.
+ Objectget(int index) + +
+          Return the element at the specified position.
+ Objectset(int index, + Object element) + +
+          Set the element at the specified position.
+ voidsetElementDynaClass(DynaClass elementDynaClass) + +
+          Set the element Type and DynaClass.
+ voidsetElementType(Class elementType) + +
+          Set the element Type and DynaClass.
+ Object[]toArray() + +
+          Converts the List to an Array.
+ Object[]toArray(Object[] model) + +
+          Converts the List to an Array of the specified type.
+ DynaBean[]toDynaBeanArray() + +
+          Converts the List to an DynaBean Array.
+ + + + + + + +
Methods inherited from class java.util.ArrayList
clear, clone, contains, ensureCapacity, indexOf, isEmpty, lastIndexOf, remove, remove, removeRange, size, trimToSize
+ + + + + + + +
Methods inherited from class java.util.AbstractList
equals, hashCode, iterator, listIterator, listIterator, subList
+ + + + + + + +
Methods inherited from class java.util.AbstractCollection
containsAll, removeAll, retainAll, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
+ + + + + + + +
Methods inherited from interface java.util.List
containsAll, equals, hashCode, iterator, listIterator, listIterator, removeAll, retainAll, subList
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LazyDynaList

+
+public LazyDynaList()
+
+
Default Constructor. +

+

+
+ +

+LazyDynaList

+
+public LazyDynaList(int capacity)
+
+
Construct a LazyDynaList with the + specified capacity. +

+

+
Parameters:
capacity - The initial capacity of the list.
+
+
+ +

+LazyDynaList

+
+public LazyDynaList(DynaClass elementDynaClass)
+
+
Construct a LazyDynaList with a + specified DynaClass for its elements. +

+

+
Parameters:
elementDynaClass - The DynaClass of the List's elements.
+
+
+ +

+LazyDynaList

+
+public LazyDynaList(Class elementType)
+
+
Construct a LazyDynaList with a + specified type for its elements. +

+

+
Parameters:
elementType - The Type of the List's elements.
+
+
+ +

+LazyDynaList

+
+public LazyDynaList(Collection collection)
+
+
Construct a LazyDynaList populated with the + elements of a Collection. +

+

+
Parameters:
collection - The Collection to poulate the List from.
+
+
+ +

+LazyDynaList

+
+public LazyDynaList(Object[] array)
+
+
Construct a LazyDynaList populated with the + elements of an Array. +

+

+
Parameters:
array - The Array to poulate the List from.
+
+ + + + + + + + +
+Method Detail
+ +

+add

+
+public void add(int index,
+                Object element)
+
+

Insert an element at the specified index position.

+ +

If the index position is greater than the current + size of the List, then the List is automatically + grown to the appropriate size.

+

+

+
Specified by:
add in interface List
Overrides:
add in class ArrayList
+
+
+
Parameters:
index - The index position to insert the new element.
element - The new element to add.
+
+
+
+ +

+add

+
+public boolean add(Object element)
+
+

Add an element to the List.

+

+

+
Specified by:
add in interface Collection
Specified by:
add in interface List
Overrides:
add in class ArrayList
+
+
+
Parameters:
element - The new element to add. +
Returns:
true.
+
+
+
+ +

+addAll

+
+public boolean addAll(Collection collection)
+
+

Add all the elements from a Collection to the list. +

+

+
Specified by:
addAll in interface Collection
Specified by:
addAll in interface List
Overrides:
addAll in class ArrayList
+
+
+
Parameters:
collection - The Collection of new elements. +
Returns:
true if elements were added.
+
+
+
+ +

+addAll

+
+public boolean addAll(int index,
+                      Collection collection)
+
+

Insert all the elements from a Collection into the + list at a specified position. + +

If the index position is greater than the current + size of the List, then the List is automatically + grown to the appropriate size.

+

+

+
Specified by:
addAll in interface List
Overrides:
addAll in class ArrayList
+
+
+
Parameters:
collection - The Collection of new elements.
index - The index position to insert the new elements at. +
Returns:
true if elements were added.
+
+
+
+ +

+get

+
+public Object get(int index)
+
+

Return the element at the specified position.

+ +

If the position requested is greater than the current + size of the List, then the List is automatically + grown (and populated) to the appropriate size.

+

+

+
Specified by:
get in interface List
Overrides:
get in class ArrayList
+
+
+
Parameters:
index - The index position to insert the new elements at. +
Returns:
The element at the specified position.
+
+
+
+ +

+set

+
+public Object set(int index,
+                  Object element)
+
+

Set the element at the specified position.

+ +

If the position requested is greater than the current + size of the List, then the List is automatically + grown (and populated) to the appropriate size.

+

+

+
Specified by:
set in interface List
Overrides:
set in class ArrayList
+
+
+
Parameters:
index - The index position to insert the new element at.
element - The new element. +
Returns:
The new element.
+
+
+
+ +

+toArray

+
+public Object[] toArray()
+
+

Converts the List to an Array.

+ +

The type of Array created depends on the contents + of the List:

+
    +
  • If the List contains only LazyDynaMap type elements + then a java.util.Map[] array will be created.
  • +
  • If the List contains only elements which are + "wrapped" DynaBeans then an Object[] of the most + suitable type will be created.
  • +
  • ...otherwise a DynaBean[] will be created.
  • +

    +

    +
    Specified by:
    toArray in interface Collection
    Specified by:
    toArray in interface List
    Overrides:
    toArray in class ArrayList
    +
    +
    + +
    Returns:
    An Array of the elements in this List.
    +
    +
+
+ +

+toArray

+
+public Object[] toArray(Object[] model)
+
+

Converts the List to an Array of the specified type.

+

+

+
Specified by:
toArray in interface Collection
Specified by:
toArray in interface List
Overrides:
toArray in class ArrayList
+
+
+
Parameters:
model - The model for the type of array to return +
Returns:
An Array of the elements in this List.
+
+
+
+ +

+toDynaBeanArray

+
+public DynaBean[] toDynaBeanArray()
+
+

Converts the List to an DynaBean Array.

+

+

+ +
Returns:
A DynaBean[] of the elements in this List.
+
+
+
+ +

+setElementType

+
+public void setElementType(Class elementType)
+
+

Set the element Type and DynaClass.

+

+

+
Parameters:
elementType - The type of the elements. +
Throws: +
IllegalArgumentException - if the List already + contains elements or the DynaClass is null.
+
+
+
+ +

+setElementDynaClass

+
+public void setElementDynaClass(DynaClass elementDynaClass)
+
+

Set the element Type and DynaClass.

+

+

+
Parameters:
elementDynaClass - The DynaClass of the elements. +
Throws: +
IllegalArgumentException - if the List already + contains elements or the DynaClass is null.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaMap.html new file mode 100644 index 0000000..c84304b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/LazyDynaMap.html @@ -0,0 +1,1001 @@ + + + + + + + +LazyDynaMap (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class LazyDynaMap

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.LazyDynaBean
+      extended by org.apache.commons.beanutils.LazyDynaMap
+
+
+
All Implemented Interfaces:
Serializable, DynaBean, DynaClass, MutableDynaClass
+
+
+
+
public class LazyDynaMap
extends LazyDynaBean
implements MutableDynaClass
+ + +

+

Provides a light weight DynaBean facade to a Map + with lazy map/list processing.

+ +

Its a light weight DynaBean implementation because there is no + actual DynaClass associated with this DynaBean - in fact + it implements the DynaClass interface itself providing pseudo DynaClass + behaviour from the actual values stored in the Map.

+ +

As well providing rhe standard DynaBean access to the Map's properties + this class also provides the usual Lazy behaviour:

+
    +
  • Properties don't need to be pre-defined in a DynaClass
  • +
  • Indexed properties (Lists or Arrays) are automatically instantiated + and grown so that they are large enough to cater for the index being set.
  • +
  • Mapped properties are automatically instantiated.
  • +
+ +

Restricted DynaClass

+

This class implements the MutableDynaClass interface. + MutableDynaClass have a facility to restrict the DynaClass + so that its properties cannot be modified. If the MutableDynaClass is + restricted then calling any of the set() methods for a property which + doesn't exist will result in a IllegalArgumentException being thrown.

+

+ +

+

+
Author:
+
Niall Pemberton
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  Stringname + +
+          The name of this DynaClass (analogous to the + getName() method of java.lang.Class).
+protected  booleanrestricted + +
+          Controls whether changes to this DynaClass's properties are allowed.
+protected  booleanreturnNull + +
+          Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one.
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.LazyDynaBean
BigDecimal_ZERO, BigInteger_ZERO, Byte_ZERO, Character_SPACE, Double_ZERO, dynaClass, Float_ZERO, Integer_ZERO, Long_ZERO, Short_ZERO, values
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
LazyDynaMap() + +
+          Default Constructor.
LazyDynaMap(DynaClass dynaClass) + +
+          Construct a new LazyDynaMap based on an exisiting DynaClass
LazyDynaMap(DynaProperty[] properties) + +
+          Construct a new LazyDynaMap with the specified properties.
LazyDynaMap(Map values) + +
+          Construct a new LazyDynaMap with the specified Map.
LazyDynaMap(String name) + +
+          Construct a new LazyDynaMap with the specified name.
LazyDynaMap(String name, + DynaProperty[] properties) + +
+          Construct a new LazyDynaMap with the specified name and properties.
LazyDynaMap(String name, + Map values) + +
+          Construct a new LazyDynaMap with the specified name and Map.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidadd(DynaProperty property) + +
+          Add a new dynamic property.
+ voidadd(String name) + +
+          Add a new dynamic property with no restrictions on data type, + readability, or writeability.
+ voidadd(String name, + Class type) + +
+          Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability.
+ voidadd(String name, + Class type, + boolean readable, + boolean writeable) + +
+          Add a new dynamic property with the specified data type, readability, + and writeability.
+ DynaProperty[]getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property.
+ MapgetMap() + +
+          Return the underlying Map backing this DynaBean
+ StringgetName() + +
+          Return the name of this DynaClass (analogous to the + getName() method of java.lang.Class +
+protected  booleanisDynaProperty(String name) + +
+          Indicate whether a property actually exists.
+ booleanisRestricted() + +
+          Is this DynaClass currently restricted.
+ booleanisReturnNull() + +
+          Should this DynaClass return a null from + the getDynaProperty(name) method if the property + doesn't exist.
+ DynaBeannewInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+ voidremove(String name) + +
+          Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class.
+ voidset(String name, + Object value) + +
+          Set the value of a simple property with the specified name.
+ voidsetMap(Map values) + +
+          Set the Map backing this DynaBean
+ voidsetRestricted(boolean restricted) + +
+          Set whether this DynaClass is currently restricted.
+ voidsetReturnNull(boolean returnNull) + +
+          Set whether this DynaClass should return a null from + the getDynaProperty(name) method if the property + doesn't exist.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.LazyDynaBean
contains, createDynaBeanProperty, createIndexedProperty, createMappedProperty, createNumberProperty, createOtherProperty, createPrimitiveProperty, createProperty, defaultIndexedProperty, defaultMappedProperty, get, get, get, getDynaClass, growIndexedProperty, isAssignable, newMap, remove, set, set, size
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+name

+
+protected String name
+
+
The name of this DynaClass (analogous to the + getName() method of java.lang.Class). +

+

+
+
+
+ +

+restricted

+
+protected boolean restricted
+
+
Controls whether changes to this DynaClass's properties are allowed. +

+

+
+
+
+ +

+returnNull

+
+protected boolean returnNull
+
+

Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one.

+ +

Default is false. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+LazyDynaMap

+
+public LazyDynaMap()
+
+
Default Constructor. +

+

+
+ +

+LazyDynaMap

+
+public LazyDynaMap(String name)
+
+
Construct a new LazyDynaMap with the specified name. +

+

+
Parameters:
name - Name of this DynaBean class
+
+
+ +

+LazyDynaMap

+
+public LazyDynaMap(Map values)
+
+
Construct a new LazyDynaMap with the specified Map. +

+

+
Parameters:
values - The Map backing this LazyDynaMap
+
+
+ +

+LazyDynaMap

+
+public LazyDynaMap(String name,
+                   Map values)
+
+
Construct a new LazyDynaMap with the specified name and Map. +

+

+
Parameters:
name - Name of this DynaBean class
values - The Map backing this LazyDynaMap
+
+
+ +

+LazyDynaMap

+
+public LazyDynaMap(DynaProperty[] properties)
+
+
Construct a new LazyDynaMap with the specified properties. +

+

+
Parameters:
properties - Property descriptors for the supported properties
+
+
+ +

+LazyDynaMap

+
+public LazyDynaMap(String name,
+                   DynaProperty[] properties)
+
+
Construct a new LazyDynaMap with the specified name and properties. +

+

+
Parameters:
name - Name of this DynaBean class
properties - Property descriptors for the supported properties
+
+
+ +

+LazyDynaMap

+
+public LazyDynaMap(DynaClass dynaClass)
+
+
Construct a new LazyDynaMap based on an exisiting DynaClass +

+

+
Parameters:
dynaClass - DynaClass to copy the name and properties from
+
+ + + + + + + + +
+Method Detail
+ +

+setMap

+
+public void setMap(Map values)
+
+
Set the Map backing this DynaBean +

+

+
+
+
+
Parameters:
values - The new Map of values
+
+
+
+ +

+getMap

+
+public Map getMap()
+
+
Return the underlying Map backing this DynaBean +

+

+
Overrides:
getMap in class LazyDynaBean
+
+
+ +
Returns:
the underlying Map
Since:
+
1.8.0
+
+
+
+
+ +

+set

+
+public void set(String name,
+                Object value)
+
+
Set the value of a simple property with the specified name. +

+

+
Specified by:
set in interface DynaBean
Overrides:
set in class LazyDynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set
+
+
+
+ +

+getName

+
+public String getName()
+
+
Return the name of this DynaClass (analogous to the + getName() method of java.lang.Class +
+
Specified by:
getName in interface DynaClass
+
+
+ +
Returns:
the name of the DynaClass
+
+
+
+ +

+getDynaProperty

+
+public DynaProperty getDynaProperty(String name)
+
+

Return a property descriptor for the specified property.

+ +

If the property is not found and the returnNull indicator is + true, this method always returns null.

+ +

If the property is not found and the returnNull indicator is + false a new property descriptor is created and returned (although + its not actually added to the DynaClass's properties). This is the default + beahviour.

+ +

The reason for not returning a null property descriptor is that + BeanUtils uses this method to check if a property exists + before trying to set it - since these Map implementations automatically + add any new properties when they are set, returning null from + this method would defeat their purpose.

+

+

+
Specified by:
getDynaProperty in interface DynaClass
+
+
+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+getDynaProperties

+
+public DynaProperty[] getDynaProperties()
+
+

Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. If no properties are defined, a + zero-length array will be returned.

+ +

FIXME - Should we really be implementing + getBeanInfo() instead, which returns property descriptors + and a bunch of other stuff?

+

+

+
Specified by:
getDynaProperties in interface DynaClass
+
+
+ +
Returns:
the set of properties for this DynaClass
+
+
+
+ +

+newInstance

+
+public DynaBean newInstance()
+
+
Instantiate and return a new DynaBean instance, associated + with this DynaClass. +

+

+
Specified by:
newInstance in interface DynaClass
+
+
+ +
Returns:
A new DynaBean instance
+
+
+
+ +

+isRestricted

+
+public boolean isRestricted()
+
+

Is this DynaClass currently restricted.

+

If restricted, no changes to the existing registration of + property names, data types, readability, or writeability are allowed.

+

+

+
Specified by:
isRestricted in interface MutableDynaClass
+
+
+ +
Returns:
true if this Mutable DynaClass is restricted, + otherwise false
+
+
+
+ +

+setRestricted

+
+public void setRestricted(boolean restricted)
+
+

Set whether this DynaClass is currently restricted.

+

If restricted, no changes to the existing registration of + property names, data types, readability, or writeability are allowed.

+

+

+
Specified by:
setRestricted in interface MutableDynaClass
+
+
+
Parameters:
restricted - The new restricted state
+
+
+
+ +

+add

+
+public void add(String name)
+
+
Add a new dynamic property with no restrictions on data type, + readability, or writeability. +

+

+
Specified by:
add in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the new dynamic property +
Throws: +
IllegalArgumentException - if name is null
+
+
+
+ +

+add

+
+public void add(String name,
+                Class type)
+
+
Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability. +

+

+
Specified by:
add in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the new dynamic property
type - Data type of the new dynamic property (null for no + restrictions) +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+add

+
+public void add(String name,
+                Class type,
+                boolean readable,
+                boolean writeable)
+
+

Add a new dynamic property with the specified data type, readability, + and writeability.

+ +

N.B.Support for readable/writeable properties has not been implemented + and this method always throws a UnsupportedOperationException.

+ +

I'm not sure the intention of the original authors for this method, but it seems to + me that readable/writable should be attributes of the DynaProperty class + (which they are not) and is the reason this method has not been implemented.

+

+

+
Specified by:
add in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the new dynamic property
type - Data type of the new dynamic property (null for no + restrictions)
readable - Set to true if this property value + should be readable
writeable - Set to true if this property value + should be writeable +
Throws: +
UnsupportedOperationException - anytime this method is called
+
+
+
+ +

+add

+
+protected void add(DynaProperty property)
+
+
Add a new dynamic property. +

+

+
+
+
+
Parameters:
property - Property the new dynamic property to add. +
Throws: +
IllegalArgumentException - if name is null
+
+
+
+ +

+remove

+
+public void remove(String name)
+
+
Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class. + NOTE - This does NOT cause any + corresponding property values to be removed from DynaBean instances + associated with this DynaClass. +

+

+
Specified by:
remove in interface MutableDynaClass
+
+
+
Parameters:
name - Name of the dynamic property to remove +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no properties can be removed
+
+
+
+ +

+isReturnNull

+
+public boolean isReturnNull()
+
+
Should this DynaClass return a null from + the getDynaProperty(name) method if the property + doesn't exist. +

+

+
+
+
+ +
Returns:
true if a null DynaProperty + should be returned if the property doesn't exist, otherwise + false if a new DynaProperty should be created.
+
+
+
+ +

+setReturnNull

+
+public void setReturnNull(boolean returnNull)
+
+
Set whether this DynaClass should return a null from + the getDynaProperty(name) method if the property + doesn't exist. +

+

+
+
+
+
Parameters:
returnNull - true if a null DynaProperty + should be returned if the property doesn't exist, otherwise + false if a new DynaProperty should be created.
+
+
+
+ +

+isDynaProperty

+
+protected boolean isDynaProperty(String name)
+
+

Indicate whether a property actually exists.

+ +

N.B. Using getDynaProperty(name) == null + doesn't work in this implementation because that method might + return a DynaProperty if it doesn't exist (depending on the + returnNull indicator).

+

+

+
Overrides:
isDynaProperty in class LazyDynaBean
+
+
+
Parameters:
name - Name of the dynamic property +
Returns:
true if the property exists, + otherwise false +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MappedPropertyDescriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MappedPropertyDescriptor.html new file mode 100644 index 0000000..085e3d2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MappedPropertyDescriptor.html @@ -0,0 +1,481 @@ + + + + + + + +MappedPropertyDescriptor (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class MappedPropertyDescriptor

+
+java.lang.Object
+  extended by java.beans.FeatureDescriptor
+      extended by java.beans.PropertyDescriptor
+          extended by org.apache.commons.beanutils.MappedPropertyDescriptor
+
+
+
+
public class MappedPropertyDescriptor
extends PropertyDescriptor
+ + +

+A MappedPropertyDescriptor describes one mapped property. + Mapped properties are multivalued properties like indexed properties + but that are accessed with a String key instead of an index. + Such property values are typically stored in a Map collection. + For this class to work properly, a mapped value must have + getter and setter methods of the form +

getProperty(String key) and +

setProperty(String key, Object value), +

where Property must be replaced + by the name of the property. +

+ +

+

+
Version:
+
$Revision: 806915 $ $Date: 2009-08-23 01:50:23 +0100 (Sun, 23 Aug 2009) $
+
Author:
+
Rey Francois, Gregor Rayman
+
See Also:
PropertyDescriptor
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
MappedPropertyDescriptor(String propertyName, + Class beanClass) + +
+          Constructs a MappedPropertyDescriptor for a property that follows + the standard Java convention by having getFoo and setFoo + accessor methods, with the addition of a String parameter (the key).
MappedPropertyDescriptor(String propertyName, + Class beanClass, + String mappedGetterName, + String mappedSetterName) + +
+          This constructor takes the name of a mapped property, and method + names for reading and writing the property.
MappedPropertyDescriptor(String propertyName, + Method mappedGetter, + Method mappedSetter) + +
+          This constructor takes the name of a mapped property, and Method + objects for reading and writing the property.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ClassgetMappedPropertyType() + +
+          Gets the Class object for the property values.
+ MethodgetMappedReadMethod() + +
+          Gets the method that should be used to read one of the property value.
+ MethodgetMappedWriteMethod() + +
+          Gets the method that should be used to write one of the property value.
+ voidsetMappedReadMethod(Method mappedGetter) + +
+          Sets the method that should be used to read one of the property value.
+ voidsetMappedWriteMethod(Method mappedSetter) + +
+          Sets the method that should be used to write the property value.
+ + + + + + + +
Methods inherited from class java.beans.PropertyDescriptor
createPropertyEditor, equals, getPropertyEditorClass, getPropertyType, getReadMethod, getWriteMethod, hashCode, isBound, isConstrained, setBound, setConstrained, setPropertyEditorClass, setReadMethod, setWriteMethod
+ + + + + + + +
Methods inherited from class java.beans.FeatureDescriptor
attributeNames, getDisplayName, getName, getShortDescription, getValue, isExpert, isHidden, isPreferred, setDisplayName, setExpert, setHidden, setName, setPreferred, setShortDescription, setValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+MappedPropertyDescriptor

+
+public MappedPropertyDescriptor(String propertyName,
+                                Class beanClass)
+                         throws IntrospectionException
+
+
Constructs a MappedPropertyDescriptor for a property that follows + the standard Java convention by having getFoo and setFoo + accessor methods, with the addition of a String parameter (the key). + Thus if the argument name is "fred", it will + assume that the writer method is "setFred" and the reader method + is "getFred". Note that the property name should start with a lower + case character, which will be capitalized in the method names. +

+

+
Parameters:
propertyName - The programmatic name of the property.
beanClass - The Class object for the target bean. For + example sun.beans.OurButton.class. +
Throws: +
IntrospectionException - if an exception occurs during + introspection.
+
+
+ +

+MappedPropertyDescriptor

+
+public MappedPropertyDescriptor(String propertyName,
+                                Class beanClass,
+                                String mappedGetterName,
+                                String mappedSetterName)
+                         throws IntrospectionException
+
+
This constructor takes the name of a mapped property, and method + names for reading and writing the property. +

+

+
Parameters:
propertyName - The programmatic name of the property.
beanClass - The Class object for the target bean. For + example sun.beans.OurButton.class.
mappedGetterName - The name of the method used for + reading one of the property values. May be null if the + property is write-only.
mappedSetterName - The name of the method used for writing + one of the property values. May be null if the property is + read-only. +
Throws: +
IntrospectionException - if an exception occurs during + introspection.
+
+
+ +

+MappedPropertyDescriptor

+
+public MappedPropertyDescriptor(String propertyName,
+                                Method mappedGetter,
+                                Method mappedSetter)
+                         throws IntrospectionException
+
+
This constructor takes the name of a mapped property, and Method + objects for reading and writing the property. +

+

+
Parameters:
propertyName - The programmatic name of the property.
mappedGetter - The method used for reading one of + the property values. May be be null if the property + is write-only.
mappedSetter - The method used for writing one the + property values. May be null if the property is read-only. +
Throws: +
IntrospectionException - if an exception occurs during + introspection.
+
+ + + + + + + + +
+Method Detail
+ +

+getMappedPropertyType

+
+public Class getMappedPropertyType()
+
+
Gets the Class object for the property values. +

+

+ +
Returns:
The Java type info for the property values. Note that + the "Class" object may describe a built-in Java type such as "int". + The result may be "null" if this is a mapped property that + does not support non-keyed access. +

+ This is the type that will be returned by the mappedReadMethod.

+
+
+
+ +

+getMappedReadMethod

+
+public Method getMappedReadMethod()
+
+
Gets the method that should be used to read one of the property value. +

+

+ +
Returns:
The method that should be used to read the property value. + May return null if the property can't be read.
+
+
+
+ +

+setMappedReadMethod

+
+public void setMappedReadMethod(Method mappedGetter)
+                         throws IntrospectionException
+
+
Sets the method that should be used to read one of the property value. +

+

+
Parameters:
mappedGetter - The mapped getter method. +
Throws: +
IntrospectionException - If an error occurs finding the + mapped property
+
+
+
+ +

+getMappedWriteMethod

+
+public Method getMappedWriteMethod()
+
+
Gets the method that should be used to write one of the property value. +

+

+ +
Returns:
The method that should be used to write one of the property value. + May return null if the property can't be written.
+
+
+
+ +

+setMappedWriteMethod

+
+public void setMappedWriteMethod(Method mappedSetter)
+                          throws IntrospectionException
+
+
Sets the method that should be used to write the property value. +

+

+
Parameters:
mappedSetter - The mapped setter method. +
Throws: +
IntrospectionException - If an error occurs finding the + mapped property
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MethodUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MethodUtils.html new file mode 100644 index 0000000..5310bf7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MethodUtils.html @@ -0,0 +1,1105 @@ + + + + + + + +MethodUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class MethodUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.MethodUtils
+
+
+
+
public class MethodUtils
extends Object
+ + +

+

Utility reflection methods focussed on methods in general rather than properties in particular.

+ +

Known Limitations

+

Accessing Public Methods In A Default Access Superclass

+

There is an issue when invoking public methods contained in a default access superclass. + Reflection locates these methods fine and correctly assigns them as public. + However, an IllegalAccessException is thrown if the method is invoked.

+ +

MethodUtils contains a workaround for this situation. + It will attempt to call setAccessible on this method. + If this call succeeds, then the method can be invoked as normal. + This call will only succeed when the application has sufficient security privilages. + If this call fails then a warning will be logged and the method may fail.

+

+ +

+

+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey François, Gregor Raýman, Jan Sorensen, Robert Burrell Donkin
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
MethodUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static intclearCache() + +
+          Clear the method cache.
+static MethodgetAccessibleMethod(Class clazz, + Method method) + +
+          Return an accessible method (that is, one that can be invoked via + reflection) that implements the specified Method.
+static MethodgetAccessibleMethod(Class clazz, + String methodName, + Class parameterType) + +
+          Return an accessible method (that is, one that can be invoked via + reflection) with given name and a single parameter.
+static MethodgetAccessibleMethod(Class clazz, + String methodName, + Class[] parameterTypes) + +
+          Return an accessible method (that is, one that can be invoked via + reflection) with given name and parameters.
+static MethodgetAccessibleMethod(Method method) + +
+          Return an accessible method (that is, one that can be invoked via + reflection) that implements the specified Method.
+static MethodgetMatchingAccessibleMethod(Class clazz, + String methodName, + Class[] parameterTypes) + +
+          Find an accessible method that matches the given name and has compatible parameters.
+static ClassgetPrimitiveType(Class wrapperType) + +
+          Gets the class for the primitive type corresponding to the primitive wrapper class given.
+static ClassgetPrimitiveWrapper(Class primitiveType) + +
+          Gets the wrapper object class for the given primitive type class.
+static ObjectinvokeExactMethod(Object object, + String methodName, + Object arg) + +
+          Invoke a method whose parameter type matches exactly the object + type.
+static ObjectinvokeExactMethod(Object object, + String methodName, + Object[] args) + +
+          Invoke a method whose parameter types match exactly the object + types.
+static ObjectinvokeExactMethod(Object object, + String methodName, + Object[] args, + Class[] parameterTypes) + +
+          Invoke a method whose parameter types match exactly the parameter + types given.
+static ObjectinvokeExactStaticMethod(Class objectClass, + String methodName, + Object arg) + +
+          Invoke a static method whose parameter type matches exactly the object + type.
+static ObjectinvokeExactStaticMethod(Class objectClass, + String methodName, + Object[] args) + +
+          Invoke a static method whose parameter types match exactly the object + types.
+static ObjectinvokeExactStaticMethod(Class objectClass, + String methodName, + Object[] args, + Class[] parameterTypes) + +
+          Invoke a static method whose parameter types match exactly the parameter + types given.
+static ObjectinvokeMethod(Object object, + String methodName, + Object arg) + +
+          Invoke a named method whose parameter type matches the object type.
+static ObjectinvokeMethod(Object object, + String methodName, + Object[] args) + +
+          Invoke a named method whose parameter type matches the object type.
+static ObjectinvokeMethod(Object object, + String methodName, + Object[] args, + Class[] parameterTypes) + +
+          Invoke a named method whose parameter type matches the object type.
+static ObjectinvokeStaticMethod(Class objectClass, + String methodName, + Object arg) + +
+          Invoke a named static method whose parameter type matches the object type.
+static ObjectinvokeStaticMethod(Class objectClass, + String methodName, + Object[] args) + +
+          Invoke a named static method whose parameter type matches the object type.
+static ObjectinvokeStaticMethod(Class objectClass, + String methodName, + Object[] args, + Class[] parameterTypes) + +
+          Invoke a named static method whose parameter type matches the object type.
+static booleanisAssignmentCompatible(Class parameterType, + Class parameterization) + +
+          Determine whether a type can be used as a parameter in a method invocation.
+static voidsetCacheMethods(boolean cacheMethods) + +
+          Set whether methods should be cached for greater performance or not, + default is true.
+static ClasstoNonPrimitiveClass(Class clazz) + +
+          Find a non primitive representation for given primitive class.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+MethodUtils

+
+public MethodUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+setCacheMethods

+
+public static void setCacheMethods(boolean cacheMethods)
+
+
Set whether methods should be cached for greater performance or not, + default is true. +

+

+
Parameters:
cacheMethods - true if methods should be + cached for greater performance, otherwise false
Since:
+
1.8.0
+
+
+
+
+ +

+clearCache

+
+public static int clearCache()
+
+
Clear the method cache. +

+

+ +
Returns:
the number of cached methods cleared
Since:
+
1.8.0
+
+
+
+
+ +

+invokeMethod

+
+public static Object invokeMethod(Object object,
+                                  String methodName,
+                                  Object arg)
+                           throws NoSuchMethodException,
+                                  IllegalAccessException,
+                                  InvocationTargetException
+
+

Invoke a named method whose parameter type matches the object type.

+ +

The behaviour of this method is less deterministic + than invokeExactMethod(). + It loops through all methods with names that match + and then executes the first it finds with compatable parameters.

+ +

This method supports calls to methods taking primitive parameters + via passing in wrapping classes. So, for example, a Boolean class + would match a boolean primitive.

+ +

This is a convenient wrapper for + invokeMethod(Object object,String methodName,Object [] args). +

+

+

+
Parameters:
object - invoke method on this object
methodName - get method with this name
arg - use this argument +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
+
+
+
+ +

+invokeMethod

+
+public static Object invokeMethod(Object object,
+                                  String methodName,
+                                  Object[] args)
+                           throws NoSuchMethodException,
+                                  IllegalAccessException,
+                                  InvocationTargetException
+
+

Invoke a named method whose parameter type matches the object type.

+ +

The behaviour of this method is less deterministic + than invokeExactMethod(Object object,String methodName,Object [] args). + It loops through all methods with names that match + and then executes the first it finds with compatable parameters.

+ +

This method supports calls to methods taking primitive parameters + via passing in wrapping classes. So, for example, a Boolean class + would match a boolean primitive.

+ +

This is a convenient wrapper for + invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes). +

+

+

+
Parameters:
object - invoke method on this object
methodName - get method with this name
args - use these arguments - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
+
+
+
+ +

+invokeMethod

+
+public static Object invokeMethod(Object object,
+                                  String methodName,
+                                  Object[] args,
+                                  Class[] parameterTypes)
+                           throws NoSuchMethodException,
+                                  IllegalAccessException,
+                                  InvocationTargetException
+
+

Invoke a named method whose parameter type matches the object type.

+ +

The behaviour of this method is less deterministic + than invokeExactMethod(Object object,String methodName,Object [] args,Class[] parameterTypes). + It loops through all methods with names that match + and then executes the first it finds with compatable parameters.

+ +

This method supports calls to methods taking primitive parameters + via passing in wrapping classes. So, for example, a Boolean class + would match a boolean primitive.

+

+

+
Parameters:
object - invoke method on this object
methodName - get method with this name
args - use these arguments - treat null as empty array
parameterTypes - match these parameters - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
+
+
+
+ +

+invokeExactMethod

+
+public static Object invokeExactMethod(Object object,
+                                       String methodName,
+                                       Object arg)
+                                throws NoSuchMethodException,
+                                       IllegalAccessException,
+                                       InvocationTargetException
+
+

Invoke a method whose parameter type matches exactly the object + type.

+ +

This is a convenient wrapper for + invokeExactMethod(Object object,String methodName,Object [] args). +

+

+

+
Parameters:
object - invoke method on this object
methodName - get method with this name
arg - use this argument +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
+
+
+
+ +

+invokeExactMethod

+
+public static Object invokeExactMethod(Object object,
+                                       String methodName,
+                                       Object[] args)
+                                throws NoSuchMethodException,
+                                       IllegalAccessException,
+                                       InvocationTargetException
+
+

Invoke a method whose parameter types match exactly the object + types.

+ +

This uses reflection to invoke the method obtained from a call to + getAccessibleMethod().

+

+

+
Parameters:
object - invoke method on this object
methodName - get method with this name
args - use these arguments - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
+
+
+
+ +

+invokeExactMethod

+
+public static Object invokeExactMethod(Object object,
+                                       String methodName,
+                                       Object[] args,
+                                       Class[] parameterTypes)
+                                throws NoSuchMethodException,
+                                       IllegalAccessException,
+                                       InvocationTargetException
+
+

Invoke a method whose parameter types match exactly the parameter + types given.

+ +

This uses reflection to invoke the method obtained from a call to + getAccessibleMethod().

+

+

+
Parameters:
object - invoke method on this object
methodName - get method with this name
args - use these arguments - treat null as empty array
parameterTypes - match these parameters - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
+
+
+
+ +

+invokeExactStaticMethod

+
+public static Object invokeExactStaticMethod(Class objectClass,
+                                             String methodName,
+                                             Object[] args,
+                                             Class[] parameterTypes)
+                                      throws NoSuchMethodException,
+                                             IllegalAccessException,
+                                             InvocationTargetException
+
+

Invoke a static method whose parameter types match exactly the parameter + types given.

+ +

This uses reflection to invoke the method obtained from a call to + getAccessibleMethod(Class, String, Class[]).

+

+

+
Parameters:
objectClass - invoke static method on this class
methodName - get method with this name
args - use these arguments - treat null as empty array
parameterTypes - match these parameters - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
Since:
+
1.8.0
+
+
+
+
+ +

+invokeStaticMethod

+
+public static Object invokeStaticMethod(Class objectClass,
+                                        String methodName,
+                                        Object arg)
+                                 throws NoSuchMethodException,
+                                        IllegalAccessException,
+                                        InvocationTargetException
+
+

Invoke a named static method whose parameter type matches the object type.

+ +

The behaviour of this method is less deterministic + than invokeExactMethod(Object, String, Object[], Class[]). + It loops through all methods with names that match + and then executes the first it finds with compatable parameters.

+ +

This method supports calls to methods taking primitive parameters + via passing in wrapping classes. So, for example, a Boolean class + would match a boolean primitive.

+ +

This is a convenient wrapper for + invokeStaticMethod(Class objectClass,String methodName,Object [] args). +

+

+

+
Parameters:
objectClass - invoke static method on this class
methodName - get method with this name
arg - use this argument +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
Since:
+
1.8.0
+
+
+
+
+ +

+invokeStaticMethod

+
+public static Object invokeStaticMethod(Class objectClass,
+                                        String methodName,
+                                        Object[] args)
+                                 throws NoSuchMethodException,
+                                        IllegalAccessException,
+                                        InvocationTargetException
+
+

Invoke a named static method whose parameter type matches the object type.

+ +

The behaviour of this method is less deterministic + than invokeExactMethod(Object object,String methodName,Object [] args). + It loops through all methods with names that match + and then executes the first it finds with compatable parameters.

+ +

This method supports calls to methods taking primitive parameters + via passing in wrapping classes. So, for example, a Boolean class + would match a boolean primitive.

+ +

This is a convenient wrapper for + invokeStaticMethod(Class objectClass,String methodName,Object [] args,Class[] parameterTypes). +

+

+

+
Parameters:
objectClass - invoke static method on this class
methodName - get method with this name
args - use these arguments - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
Since:
+
1.8.0
+
+
+
+
+ +

+invokeStaticMethod

+
+public static Object invokeStaticMethod(Class objectClass,
+                                        String methodName,
+                                        Object[] args,
+                                        Class[] parameterTypes)
+                                 throws NoSuchMethodException,
+                                        IllegalAccessException,
+                                        InvocationTargetException
+
+

Invoke a named static method whose parameter type matches the object type.

+ +

The behaviour of this method is less deterministic + than invokeExactStaticMethod(Class objectClass,String methodName,Object [] args,Class[] parameterTypes). + It loops through all methods with names that match + and then executes the first it finds with compatable parameters.

+ +

This method supports calls to methods taking primitive parameters + via passing in wrapping classes. So, for example, a Boolean class + would match a boolean primitive.

+

+

+
Parameters:
objectClass - invoke static method on this class
methodName - get method with this name
args - use these arguments - treat null as empty array
parameterTypes - match these parameters - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
Since:
+
1.8.0
+
+
+
+
+ +

+invokeExactStaticMethod

+
+public static Object invokeExactStaticMethod(Class objectClass,
+                                             String methodName,
+                                             Object arg)
+                                      throws NoSuchMethodException,
+                                             IllegalAccessException,
+                                             InvocationTargetException
+
+

Invoke a static method whose parameter type matches exactly the object + type.

+ +

This is a convenient wrapper for + invokeExactStaticMethod(Class objectClass,String methodName,Object [] args). +

+

+

+
Parameters:
objectClass - invoke static method on this class
methodName - get method with this name
arg - use this argument +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
Since:
+
1.8.0
+
+
+
+
+ +

+invokeExactStaticMethod

+
+public static Object invokeExactStaticMethod(Class objectClass,
+                                             String methodName,
+                                             Object[] args)
+                                      throws NoSuchMethodException,
+                                             IllegalAccessException,
+                                             InvocationTargetException
+
+

Invoke a static method whose parameter types match exactly the object + types.

+ +

This uses reflection to invoke the method obtained from a call to + getAccessibleMethod(Class, String, Class[]).

+

+

+
Parameters:
objectClass - invoke static method on this class
methodName - get method with this name
args - use these arguments - treat null as empty array +
Returns:
The value returned by the invoked method +
Throws: +
NoSuchMethodException - if there is no such accessible method +
InvocationTargetException - wraps an exception thrown by the + method invoked +
IllegalAccessException - if the requested method is not accessible + via reflection
Since:
+
1.8.0
+
+
+
+
+ +

+getAccessibleMethod

+
+public static Method getAccessibleMethod(Class clazz,
+                                         String methodName,
+                                         Class parameterType)
+
+

Return an accessible method (that is, one that can be invoked via + reflection) with given name and a single parameter. If no such method + can be found, return null. + Basically, a convenience wrapper that constructs a Class + array for you.

+

+

+
Parameters:
clazz - get method from this class
methodName - get method with this name
parameterType - taking this type of parameter +
Returns:
The accessible method
+
+
+
+ +

+getAccessibleMethod

+
+public static Method getAccessibleMethod(Class clazz,
+                                         String methodName,
+                                         Class[] parameterTypes)
+
+

Return an accessible method (that is, one that can be invoked via + reflection) with given name and parameters. If no such method + can be found, return null. + This is just a convenient wrapper for + getAccessibleMethod(Method method).

+

+

+
Parameters:
clazz - get method from this class
methodName - get method with this name
parameterTypes - with these parameters types +
Returns:
The accessible method
+
+
+
+ +

+getAccessibleMethod

+
+public static Method getAccessibleMethod(Method method)
+
+

Return an accessible method (that is, one that can be invoked via + reflection) that implements the specified Method. If no such method + can be found, return null.

+

+

+
Parameters:
method - The method that we wish to call +
Returns:
The accessible method
+
+
+
+ +

+getAccessibleMethod

+
+public static Method getAccessibleMethod(Class clazz,
+                                         Method method)
+
+

Return an accessible method (that is, one that can be invoked via + reflection) that implements the specified Method. If no such method + can be found, return null.

+

+

+
Parameters:
clazz - The class of the object
method - The method that we wish to call +
Returns:
The accessible method
Since:
+
1.8.0
+
+
+
+
+ +

+getMatchingAccessibleMethod

+
+public static Method getMatchingAccessibleMethod(Class clazz,
+                                                 String methodName,
+                                                 Class[] parameterTypes)
+
+

Find an accessible method that matches the given name and has compatible parameters. + Compatible parameters mean that every method parameter is assignable from + the given parameters. + In other words, it finds a method with the given name + that will take the parameters given.

+ +

This method is slightly undeterminstic since it loops + through methods names and return the first matching method.

+ +

This method is used by + invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes). + +

This method can match primitive parameter by passing in wrapper classes. + For example, a Boolean will match a primitive boolean + parameter. +

+

+
Parameters:
clazz - find method in this class
methodName - find method with this name
parameterTypes - find method with compatible parameters +
Returns:
The accessible method
+
+
+
+ +

+isAssignmentCompatible

+
+public static final boolean isAssignmentCompatible(Class parameterType,
+                                                   Class parameterization)
+
+

Determine whether a type can be used as a parameter in a method invocation. + This method handles primitive conversions correctly.

+ +

In order words, it will match a Boolean to a boolean, + a Long to a long, + a Float to a float, + a Integer to a int, + and a Double to a double. + Now logic widening matches are allowed. + For example, a Long will not match a int. +

+

+
Parameters:
parameterType - the type of parameter accepted by the method
parameterization - the type of parameter being tested +
Returns:
true if the assignement is compatible.
+
+
+
+ +

+getPrimitiveWrapper

+
+public static Class getPrimitiveWrapper(Class primitiveType)
+
+
Gets the wrapper object class for the given primitive type class. + For example, passing boolean.class returns Boolean.class +

+

+
Parameters:
primitiveType - the primitive type class for which a match is to be found +
Returns:
the wrapper type associated with the given primitive + or null if no match is found
+
+
+
+ +

+getPrimitiveType

+
+public static Class getPrimitiveType(Class wrapperType)
+
+
Gets the class for the primitive type corresponding to the primitive wrapper class given. + For example, an instance of Boolean.class returns a boolean.class. +

+

+
Parameters:
wrapperType - the +
Returns:
the primitive type class corresponding to the given wrapper class, + null if no match is found
+
+
+
+ +

+toNonPrimitiveClass

+
+public static Class toNonPrimitiveClass(Class clazz)
+
+
Find a non primitive representation for given primitive class. +

+

+
Parameters:
clazz - the class to find a representation for, not null +
Returns:
the original class if it not a primitive. Otherwise the wrapper class. Not null
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MutableDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MutableDynaClass.html new file mode 100644 index 0000000..83e4c29 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/MutableDynaClass.html @@ -0,0 +1,407 @@ + + + + + + + +MutableDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Interface MutableDynaClass

+
+
All Superinterfaces:
DynaClass
+
+
+
All Known Implementing Classes:
LazyDynaClass, LazyDynaMap
+
+
+
+
public interface MutableDynaClass
extends DynaClass
+ + +

+

A specialized extension to DynaClass that allows properties + to be added or removed dynamically.

+ +

WARNING - No guarantees that this will be in the final + APIs ... it's here primarily to preserve some concepts that were in the + original proposal for further discussion.

+

+ +

+

+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig McClanahan, Michael Smith, Paulo Gaspar
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidadd(String name) + +
+          Add a new dynamic property with no restrictions on data type, + readability, or writeability.
+ voidadd(String name, + Class type) + +
+          Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability.
+ voidadd(String name, + Class type, + boolean readable, + boolean writeable) + +
+          Add a new dynamic property with the specified data type, readability, + and writeability.
+ booleanisRestricted() + +
+          Is this DynaClass currently restricted, if so, no changes to the + existing registration of property names, data types, readability, or + writeability are allowed.
+ voidremove(String name) + +
+          Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class.
+ voidsetRestricted(boolean restricted) + +
+          Set the restricted state of this DynaClass to the specified value.
+ + + + + + + +
Methods inherited from interface org.apache.commons.beanutils.DynaClass
getDynaProperties, getDynaProperty, getName, newInstance
+  +

+ + + + + + + + +
+Method Detail
+ +

+add

+
+void add(String name)
+
+
Add a new dynamic property with no restrictions on data type, + readability, or writeability. +

+

+
+
+
+
Parameters:
name - Name of the new dynamic property +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+add

+
+void add(String name,
+         Class type)
+
+
Add a new dynamic property with the specified data type, but with + no restrictions on readability or writeability. +

+

+
+
+
+
Parameters:
name - Name of the new dynamic property
type - Data type of the new dynamic property (null for no + restrictions) +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+add

+
+void add(String name,
+         Class type,
+         boolean readable,
+         boolean writeable)
+
+
Add a new dynamic property with the specified data type, readability, + and writeability. +

+

+
+
+
+
Parameters:
name - Name of the new dynamic property
type - Data type of the new dynamic property (null for no + restrictions)
readable - Set to true if this property value + should be readable
writeable - Set to true if this property value + should be writeable +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no new properties can be added
+
+
+
+ +

+isRestricted

+
+boolean isRestricted()
+
+
Is this DynaClass currently restricted, if so, no changes to the + existing registration of property names, data types, readability, or + writeability are allowed. +

+

+
+
+
+ +
Returns:
true if this Mutable DynaClass is restricted, + otherwise false
+
+
+
+ +

+remove

+
+void remove(String name)
+
+
Remove the specified dynamic property, and any associated data type, + readability, and writeability, from this dynamic class. + NOTE - This does NOT cause any + corresponding property values to be removed from DynaBean instances + associated with this DynaClass. +

+

+
+
+
+
Parameters:
name - Name of the dynamic property to remove +
Throws: +
IllegalArgumentException - if name is null +
IllegalStateException - if this DynaClass is currently + restricted, so no properties can be removed
+
+
+
+ +

+setRestricted

+
+void setRestricted(boolean restricted)
+
+
Set the restricted state of this DynaClass to the specified value. +

+

+
+
+
+
Parameters:
restricted - The new restricted state
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/NestedNullException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/NestedNullException.html new file mode 100644 index 0000000..dd9b310 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/NestedNullException.html @@ -0,0 +1,273 @@ + + + + + + + +NestedNullException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class NestedNullException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by java.lang.RuntimeException
+              extended by java.lang.IllegalArgumentException
+                  extended by org.apache.commons.beanutils.BeanAccessLanguageException
+                      extended by org.apache.commons.beanutils.NestedNullException
+
+
+
All Implemented Interfaces:
Serializable
+
+
+
+
public class NestedNullException
extends BeanAccessLanguageException
+ + +

+Thrown to indicate that the Bean Access Language cannot execute query + against given bean since a nested bean referenced is null. +

+ +

+

+
Since:
+
1.7
+
Author:
+
Robert Burrell Donkin
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
NestedNullException() + +
+          Constructs a NestedNullException without a detail message.
NestedNullException(String message) + +
+          Constructs a NestedNullException without a detail message.
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+NestedNullException

+
+public NestedNullException()
+
+
Constructs a NestedNullException without a detail message. +

+

+
+ +

+NestedNullException

+
+public NestedNullException(String message)
+
+
Constructs a NestedNullException without a detail message. +

+

+
Parameters:
message - the detail message explaining this exception
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtils.html new file mode 100644 index 0000000..3032e37 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtils.html @@ -0,0 +1,1504 @@ + + + + + + + +PropertyUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class PropertyUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.PropertyUtils
+
+
+
+
public class PropertyUtils
extends Object
+ + +

+

Utility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.

+ +

The implementations for these methods are provided by PropertyUtilsBean. + For more details see PropertyUtilsBean.

+

+ +

+

+
Version:
+
$Revision: 644137 $ $Date: 2008-04-03 03:30:23 +0100 (Thu, 03 Apr 2008) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman, Jan Sorensen, Scott Sanders
+
See Also:
PropertyUtilsBean, +Resolver
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static charINDEXED_DELIM + +
+          Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
+static charINDEXED_DELIM2 + +
+          Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
+static charMAPPED_DELIM + +
+          Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
+static charMAPPED_DELIM2 + +
+          Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
+static charNESTED_DELIM + +
+          Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
+  + + + + + + + + + + +
+Constructor Summary
PropertyUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static voidclearDescriptors() + +
+          Clear any cached property descriptors information for all classes + loaded by any class loaders.
+static voidcopyProperties(Object dest, + Object orig) + +
+          Copy property values from the "origin" bean to the "destination" bean + for all cases where the property names are the same (even though the + actual getter and setter methods might have been customized via + BeanInfo classes).
+static Mapdescribe(Object bean) + +
+          Return the entire set of properties for which the specified bean + provides a read method.
+static intgetDebug() + +
+          Deprecated. The debug static property is no longer used
+static ObjectgetIndexedProperty(Object bean, + String name) + +
+          Return the value of the specified indexed property of the specified + bean, with no type conversions.
+static ObjectgetIndexedProperty(Object bean, + String name, + int index) + +
+          Return the value of the specified indexed property of the specified + bean, with no type conversions.
+static ObjectgetMappedProperty(Object bean, + String name) + +
+          Return the value of the specified mapped property of the + specified bean, with no type conversions.
+static ObjectgetMappedProperty(Object bean, + String name, + String key) + +
+          Return the value of the specified mapped property of the specified + bean, with no type conversions.
+static FastHashMapgetMappedPropertyDescriptors(Class beanClass) + +
+          Deprecated. This method should not be exposed
+static FastHashMapgetMappedPropertyDescriptors(Object bean) + +
+          Deprecated. This method should not be exposed
+static ObjectgetNestedProperty(Object bean, + String name) + +
+          Return the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions.
+static ObjectgetProperty(Object bean, + String name) + +
+          Return the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions.
+static PropertyDescriptorgetPropertyDescriptor(Object bean, + String name) + +
+          Retrieve the property descriptor for the specified property of the + specified bean, or return null if there is no such + descriptor.
+static PropertyDescriptor[]getPropertyDescriptors(Class beanClass) + +
+          Retrieve the property descriptors for the specified class, + introspecting and caching them the first time a particular bean class + is encountered.
+static PropertyDescriptor[]getPropertyDescriptors(Object bean) + +
+          Retrieve the property descriptors for the specified bean, + introspecting and caching them the first time a particular bean class + is encountered.
+static ClassgetPropertyEditorClass(Object bean, + String name) + +
+          Return the Java Class repesenting the property editor class that has + been registered for this property (if any).
+static ClassgetPropertyType(Object bean, + String name) + +
+          Return the Java Class representing the property type of the specified + property, or null if there is no such property for the + specified bean.
+static MethodgetReadMethod(PropertyDescriptor descriptor) + +
+          Return an accessible property getter method for this property, + if there is one; otherwise return null.
+static ObjectgetSimpleProperty(Object bean, + String name) + +
+          Return the value of the specified simple property of the specified + bean, with no type conversions.
+static MethodgetWriteMethod(PropertyDescriptor descriptor) + +
+          Return an accessible property setter method for this property, + if there is one; otherwise return null.
+static booleanisReadable(Object bean, + String name) + +
+          Return true if the specified property name identifies + a readable property on the specified bean; otherwise, return + false.
+static booleanisWriteable(Object bean, + String name) + +
+          Return true if the specified property name identifies + a writeable property on the specified bean; otherwise, return + false.
+static voidsetDebug(int newDebug) + +
+          Deprecated. The debug static property is no longer used
+static voidsetIndexedProperty(Object bean, + String name, + int index, + Object value) + +
+          Sets the value of the specified indexed property of the specified + bean, with no type conversions.
+static voidsetIndexedProperty(Object bean, + String name, + Object value) + +
+          Sets the value of the specified indexed property of the specified + bean, with no type conversions.
+static voidsetMappedProperty(Object bean, + String name, + Object value) + +
+          Sets the value of the specified mapped property of the + specified bean, with no type conversions.
+static voidsetMappedProperty(Object bean, + String name, + String key, + Object value) + +
+          Sets the value of the specified mapped property of the specified + bean, with no type conversions.
+static voidsetNestedProperty(Object bean, + String name, + Object value) + +
+          Sets the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions.
+static voidsetProperty(Object bean, + String name, + Object value) + +
+          Set the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions.
+static voidsetSimpleProperty(Object bean, + String name, + Object value) + +
+          Set the value of the specified simple property of the specified bean, + with no type conversions.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+INDEXED_DELIM

+
+public static final char INDEXED_DELIM
+
+
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
The delimiter that preceeds the zero-relative subscript for an + indexed reference. +

+

+
See Also:
Constant Field Values
+
+
+ +

+INDEXED_DELIM2

+
+public static final char INDEXED_DELIM2
+
+
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
The delimiter that follows the zero-relative subscript for an + indexed reference. +

+

+
See Also:
Constant Field Values
+
+
+ +

+MAPPED_DELIM

+
+public static final char MAPPED_DELIM
+
+
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
The delimiter that preceeds the key of a mapped property. +

+

+
See Also:
Constant Field Values
+
+
+ +

+MAPPED_DELIM2

+
+public static final char MAPPED_DELIM2
+
+
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
The delimiter that follows the key of a mapped property. +

+

+
See Also:
Constant Field Values
+
+
+ +

+NESTED_DELIM

+
+public static final char NESTED_DELIM
+
+
Deprecated. The notation used for property name expressions is now + dependant on the Resolver + implementation being used.
The delimiter that separates the components of a nested reference. +

+

+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+PropertyUtils

+
+public PropertyUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDebug

+
+public static int getDebug()
+
+
Deprecated. The debug static property is no longer used +

+

The debug static property is no longer used +

+

+ +
Returns:
debug property
+
+
+
+ +

+setDebug

+
+public static void setDebug(int newDebug)
+
+
Deprecated. The debug static property is no longer used +

+

The debug static property is no longer used +

+

+
Parameters:
newDebug - debug property
+
+
+
+ +

+clearDescriptors

+
+public static void clearDescriptors()
+
+
Clear any cached property descriptors information for all classes + loaded by any class loaders. This is useful in cases where class + loaders are thrown away to implement class reloading. + +

For more details see PropertyUtilsBean.

+

+

+
See Also:
PropertyUtilsBean.clearDescriptors()
+
+
+
+ +

+copyProperties

+
+public static void copyProperties(Object dest,
+                                  Object orig)
+                           throws IllegalAccessException,
+                                  InvocationTargetException,
+                                  NoSuchMethodException
+
+

Copy property values from the "origin" bean to the "destination" bean + for all cases where the property names are the same (even though the + actual getter and setter methods might have been customized via + BeanInfo classes).

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
dest - Destination bean whose properties are modified
orig - Origin bean whose properties are retrieved +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if the dest or + orig argument is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.copyProperties(java.lang.Object, java.lang.Object)
+
+
+
+ +

+describe

+
+public static Map describe(Object bean)
+                    throws IllegalAccessException,
+                           InvocationTargetException,
+                           NoSuchMethodException
+
+

Return the entire set of properties for which the specified bean + provides a read method.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose properties are to be extracted +
Returns:
The set of properties for the bean +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.describe(java.lang.Object)
+
+
+
+ +

+getIndexedProperty

+
+public static Object getIndexedProperty(Object bean,
+                                        String name)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified indexed property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted +
Returns:
the indexed property value +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getIndexedProperty(Object,String)
+
+
+
+ +

+getIndexedProperty

+
+public static Object getIndexedProperty(Object bean,
+                                        String name,
+                                        int index)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified indexed property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted +
Returns:
the indexed property value +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getIndexedProperty(Object,String, int)
+
+
+
+ +

+getMappedProperty

+
+public static Object getMappedProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified mapped property of the + specified bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(key) of the property value + to be extracted +
Returns:
the mapped property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getMappedProperty(Object,String)
+
+
+
+ +

+getMappedProperty

+
+public static Object getMappedProperty(Object bean,
+                                       String name,
+                                       String key)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified mapped property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Mapped property name of the property value to be extracted
key - Key of the property value to be extracted +
Returns:
the mapped property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getMappedProperty(Object,String, String)
+
+
+
+ +

+getMappedPropertyDescriptors

+
+public static FastHashMap getMappedPropertyDescriptors(Class beanClass)
+
+
Deprecated. This method should not be exposed +

+

Return the mapped property descriptors for this bean class.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
beanClass - Bean class to be introspected +
Returns:
the mapped property descriptors
See Also:
PropertyUtilsBean.getMappedPropertyDescriptors(Class)
+
+
+
+ +

+getMappedPropertyDescriptors

+
+public static FastHashMap getMappedPropertyDescriptors(Object bean)
+
+
Deprecated. This method should not be exposed +

+

Return the mapped property descriptors for this bean.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean to be introspected +
Returns:
the mapped property descriptors
See Also:
PropertyUtilsBean.getMappedPropertyDescriptors(Object)
+
+
+
+ +

+getNestedProperty

+
+public static Object getNestedProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted +
Returns:
the nested property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
NestedNullException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getNestedProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+getProperty

+
+public static Object getProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+

Return the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted +
Returns:
the property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+getPropertyDescriptor

+
+public static PropertyDescriptor getPropertyDescriptor(Object bean,
+                                                       String name)
+                                                throws IllegalAccessException,
+                                                       InvocationTargetException,
+                                                       NoSuchMethodException
+
+

Retrieve the property descriptor for the specified property of the + specified bean, or return null if there is no such + descriptor.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean for which a property descriptor is requested
name - Possibly indexed and/or nested name of the property for + which a property descriptor is requested +
Returns:
the property descriptor +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getPropertyDescriptor(java.lang.Object, java.lang.String)
+
+
+
+ +

+getPropertyDescriptors

+
+public static PropertyDescriptor[] getPropertyDescriptors(Class beanClass)
+
+

Retrieve the property descriptors for the specified class, + introspecting and caching them the first time a particular bean class + is encountered.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
beanClass - Bean class for which property descriptors are requested +
Returns:
the property descriptors +
Throws: +
IllegalArgumentException - if beanClass is null
See Also:
PropertyUtilsBean.getPropertyDescriptors(Class)
+
+
+
+ +

+getPropertyDescriptors

+
+public static PropertyDescriptor[] getPropertyDescriptors(Object bean)
+
+

Retrieve the property descriptors for the specified bean, + introspecting and caching them the first time a particular bean class + is encountered.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean for which property descriptors are requested +
Returns:
the property descriptors +
Throws: +
IllegalArgumentException - if bean is null
See Also:
PropertyUtilsBean.getPropertyDescriptors(Object)
+
+
+
+ +

+getPropertyEditorClass

+
+public static Class getPropertyEditorClass(Object bean,
+                                           String name)
+                                    throws IllegalAccessException,
+                                           InvocationTargetException,
+                                           NoSuchMethodException
+
+

Return the Java Class repesenting the property editor class that has + been registered for this property (if any).

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean for which a property descriptor is requested
name - Possibly indexed and/or nested name of the property for + which a property descriptor is requested +
Returns:
the property editor class +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getPropertyEditorClass(Object,String)
+
+
+
+ +

+getPropertyType

+
+public static Class getPropertyType(Object bean,
+                                    String name)
+                             throws IllegalAccessException,
+                                    InvocationTargetException,
+                                    NoSuchMethodException
+
+

Return the Java Class representing the property type of the specified + property, or null if there is no such property for the + specified bean.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean for which a property descriptor is requested
name - Possibly indexed and/or nested name of the property for + which a property descriptor is requested +
Returns:
The property type +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getPropertyType(Object, String)
+
+
+
+ +

+getReadMethod

+
+public static Method getReadMethod(PropertyDescriptor descriptor)
+
+

Return an accessible property getter method for this property, + if there is one; otherwise return null.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
descriptor - Property descriptor to return a getter for +
Returns:
The read method
See Also:
PropertyUtilsBean.getReadMethod(PropertyDescriptor)
+
+
+
+ +

+getSimpleProperty

+
+public static Object getSimpleProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified simple property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if the property name + is nested or indexed +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.getSimpleProperty(java.lang.Object, java.lang.String)
+
+
+
+ +

+getWriteMethod

+
+public static Method getWriteMethod(PropertyDescriptor descriptor)
+
+

Return an accessible property setter method for this property, + if there is one; otherwise return null.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
descriptor - Property descriptor to return a setter for +
Returns:
The write method
See Also:
PropertyUtilsBean.getWriteMethod(PropertyDescriptor)
+
+
+
+ +

+isReadable

+
+public static boolean isReadable(Object bean,
+                                 String name)
+
+

Return true if the specified property name identifies + a readable property on the specified bean; otherwise, return + false.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean to be examined (may be a DynaBean
name - Property name to be evaluated +
Returns:
true if the property is readable, + otherwise false +
Throws: +
IllegalArgumentException - if bean + or name is null
Since:
+
BeanUtils 1.6
+
See Also:
PropertyUtilsBean.isReadable(java.lang.Object, java.lang.String)
+
+
+
+ +

+isWriteable

+
+public static boolean isWriteable(Object bean,
+                                  String name)
+
+

Return true if the specified property name identifies + a writeable property on the specified bean; otherwise, return + false.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean to be examined (may be a DynaBean
name - Property name to be evaluated +
Returns:
true if the property is writeable, + otherwise false +
Throws: +
IllegalArgumentException - if bean + or name is null
Since:
+
BeanUtils 1.6
+
See Also:
PropertyUtilsBean.isWriteable(java.lang.Object, java.lang.String)
+
+
+
+ +

+setIndexedProperty

+
+public static void setIndexedProperty(Object bean,
+                                      String name,
+                                      Object value)
+                               throws IllegalAccessException,
+                                      InvocationTargetException,
+                                      NoSuchMethodException
+
+

Sets the value of the specified indexed property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be modified
name - propertyname[index] of the property value + to be modified
value - Value to which the specified property element + should be set +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setIndexedProperty(Object, String, Object)
+
+
+
+ +

+setIndexedProperty

+
+public static void setIndexedProperty(Object bean,
+                                      String name,
+                                      int index,
+                                      Object value)
+                               throws IllegalAccessException,
+                                      InvocationTargetException,
+                                      NoSuchMethodException
+
+

Sets the value of the specified indexed property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be set
name - Simple property name of the property value to be set
index - Index of the property value to be set
value - Value to which the indexed property element is to be set +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setIndexedProperty(Object, String, Object)
+
+
+
+ +

+setMappedProperty

+
+public static void setMappedProperty(Object bean,
+                                     String name,
+                                     Object value)
+                              throws IllegalAccessException,
+                                     InvocationTargetException,
+                                     NoSuchMethodException
+
+

Sets the value of the specified mapped property of the + specified bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be set
name - propertyname(key) of the property value + to be set
value - The property value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setMappedProperty(Object, String, Object)
+
+
+
+ +

+setMappedProperty

+
+public static void setMappedProperty(Object bean,
+                                     String name,
+                                     String key,
+                                     Object value)
+                              throws IllegalAccessException,
+                                     InvocationTargetException,
+                                     NoSuchMethodException
+
+

Sets the value of the specified mapped property of the specified + bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be set
name - Mapped property name of the property value to be set
key - Key of the property value to be set
value - The property value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setMappedProperty(Object, String, String, Object)
+
+
+
+ +

+setNestedProperty

+
+public static void setNestedProperty(Object bean,
+                                     String name,
+                                     Object value)
+                              throws IllegalAccessException,
+                                     InvocationTargetException,
+                                     NoSuchMethodException
+
+

Sets the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be modified
name - Possibly nested name of the property to be modified
value - Value to which the property is to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setNestedProperty(java.lang.Object, java.lang.String, java.lang.Object)
+
+
+
+ +

+setProperty

+
+public static void setProperty(Object bean,
+                               String name,
+                               Object value)
+                        throws IllegalAccessException,
+                               InvocationTargetException,
+                               NoSuchMethodException
+
+

Set the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be modified
name - Possibly indexed and/or nested name of the property + to be modified
value - Value to which this property is to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setProperty(java.lang.Object, java.lang.String, java.lang.Object)
+
+
+
+ +

+setSimpleProperty

+
+public static void setSimpleProperty(Object bean,
+                                     String name,
+                                     Object value)
+                              throws IllegalAccessException,
+                                     InvocationTargetException,
+                                     NoSuchMethodException
+
+

Set the value of the specified simple property of the specified bean, + with no type conversions.

+ +

For more details see PropertyUtilsBean.

+

+

+
Parameters:
bean - Bean whose property is to be modified
name - Name of the property to be modified
value - Value to which the property should be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if the property name is + nested or indexed +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
PropertyUtilsBean.setSimpleProperty(java.lang.Object, java.lang.String, java.lang.Object)
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtilsBean.html new file mode 100644 index 0000000..ac2b6b8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/PropertyUtilsBean.html @@ -0,0 +1,1589 @@ + + + + + + + +PropertyUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class PropertyUtilsBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.PropertyUtilsBean
+
+
+
+
public class PropertyUtilsBean
extends Object
+ + +

+Utility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects. Much of this + code was originally included in BeanUtils, but has been + separated because of the volume of code involved. +

+ In general, the objects that are examined and modified using these + methods are expected to conform to the property getter and setter method + naming conventions described in the JavaBeans Specification (Version 1.0.1). + No data type conversions are performed, and there are no usage of any + PropertyEditor classes that have been registered, although + a convenient way to access the registered classes themselves is included. +

+ For the purposes of this class, five formats for referencing a particular + property value of a bean are defined, with the default layout of an + identifying String in parentheses. However the notation for these formats + and how they are resolved is now (since BeanUtils 1.8.0) controlled by + the configured Resolver implementation: +

    +
  • Simple (name) - The specified + name identifies an individual property of a particular + JavaBean. The name of the actual getter or setter method to be used + is determined using standard JavaBeans instrospection, so that (unless + overridden by a BeanInfo class, a property named "xyz" + will have a getter method named getXyz() or (for boolean + properties only) isXyz(), and a setter method named + setXyz().
  • +
  • Nested (name1.name2.name3) The first + name element is used to select a property getter, as for simple + references above. The object returned for this property is then + consulted, using the same approach, for a property getter for a + property named name2, and so on. The property value that + is ultimately retrieved or modified is the one identified by the + last name element.
  • +
  • Indexed (name[index]) - The underlying + property value is assumed to be an array, or this JavaBean is assumed + to have indexed property getter and setter methods. The appropriate + (zero-relative) entry in the array is selected. List + objects are now also supported for read/write. You simply need to define + a getter that returns the List
  • +
  • Mapped (name(key)) - The JavaBean + is assumed to have an property getter and setter methods with an + additional attribute of type java.lang.String.
  • +
  • Combined (name1.name2[index].name3(key)) - + Combining mapped, nested, and indexed references is also + supported.
  • +
+

+ +

+

+
Since:
+
1.7
+
Version:
+
$Revision: 822777 $ $Date: 2009-10-07 16:23:23 +0100 (Wed, 07 Oct 2009) $
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman, Jan Sorensen, Scott Sanders, Erik Meade
+
See Also:
Resolver, +PropertyUtils
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
PropertyUtilsBean() + +
+          Base constructor
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclearDescriptors() + +
+          Clear any cached property descriptors information for all classes + loaded by any class loaders.
+ voidcopyProperties(Object dest, + Object orig) + +
+          Copy property values from the "origin" bean to the "destination" bean + for all cases where the property names are the same (even though the + actual getter and setter methods might have been customized via + BeanInfo classes).
+ Mapdescribe(Object bean) + +
+          Return the entire set of properties for which the specified bean + provides a read method.
+ ObjectgetIndexedProperty(Object bean, + String name) + +
+          Return the value of the specified indexed property of the specified + bean, with no type conversions.
+ ObjectgetIndexedProperty(Object bean, + String name, + int index) + +
+          Return the value of the specified indexed property of the specified + bean, with no type conversions.
+protected static PropertyUtilsBeangetInstance() + +
+          Return the PropertyUtils bean instance.
+ ObjectgetMappedProperty(Object bean, + String name) + +
+          Return the value of the specified mapped property of the + specified bean, with no type conversions.
+ ObjectgetMappedProperty(Object bean, + String name, + String key) + +
+          Return the value of the specified mapped property of the specified + bean, with no type conversions.
+ FastHashMapgetMappedPropertyDescriptors(Class beanClass) + +
+          Deprecated. This method should not be exposed
+ FastHashMapgetMappedPropertyDescriptors(Object bean) + +
+          Deprecated. This method should not be exposed
+ ObjectgetNestedProperty(Object bean, + String name) + +
+          Return the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions.
+ ObjectgetProperty(Object bean, + String name) + +
+          Return the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions.
+ PropertyDescriptorgetPropertyDescriptor(Object bean, + String name) + +
+          Retrieve the property descriptor for the specified property of the + specified bean, or return null if there is no such + descriptor.
+ PropertyDescriptor[]getPropertyDescriptors(Class beanClass) + +
+          Retrieve the property descriptors for the specified class, + introspecting and caching them the first time a particular bean class + is encountered.
+ PropertyDescriptor[]getPropertyDescriptors(Object bean) + +
+          Retrieve the property descriptors for the specified bean, + introspecting and caching them the first time a particular bean class + is encountered.
+ ClassgetPropertyEditorClass(Object bean, + String name) + +
+          Return the Java Class repesenting the property editor class that has + been registered for this property (if any).
+protected  ObjectgetPropertyOfMapBean(Map bean, + String propertyName) + +
+          This method is called by getNestedProperty and setNestedProperty to + define what it means to get a property from an object which implements + Map.
+ ClassgetPropertyType(Object bean, + String name) + +
+          Return the Java Class representing the property type of the specified + property, or null if there is no such property for the + specified bean.
+ MethodgetReadMethod(PropertyDescriptor descriptor) + +
+          Return an accessible property getter method for this property, + if there is one; otherwise return null.
+ ResolvergetResolver() + +
+          Return the configured Resolver implementation used by BeanUtils.
+ ObjectgetSimpleProperty(Object bean, + String name) + +
+          Return the value of the specified simple property of the specified + bean, with no type conversions.
+ MethodgetWriteMethod(PropertyDescriptor descriptor) + +
+          Return an accessible property setter method for this property, + if there is one; otherwise return null.
+ booleanisReadable(Object bean, + String name) + +
+          Return true if the specified property name identifies + a readable property on the specified bean; otherwise, return + false.
+ booleanisWriteable(Object bean, + String name) + +
+          Return true if the specified property name identifies + a writeable property on the specified bean; otherwise, return + false.
+ voidsetIndexedProperty(Object bean, + String name, + int index, + Object value) + +
+          Set the value of the specified indexed property of the specified + bean, with no type conversions.
+ voidsetIndexedProperty(Object bean, + String name, + Object value) + +
+          Set the value of the specified indexed property of the specified + bean, with no type conversions.
+ voidsetMappedProperty(Object bean, + String name, + Object value) + +
+          Set the value of the specified mapped property of the + specified bean, with no type conversions.
+ voidsetMappedProperty(Object bean, + String name, + String key, + Object value) + +
+          Set the value of the specified mapped property of the specified + bean, with no type conversions.
+ voidsetNestedProperty(Object bean, + String name, + Object value) + +
+          Set the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions.
+ voidsetProperty(Object bean, + String name, + Object value) + +
+          Set the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions.
+protected  voidsetPropertyOfMapBean(Map bean, + String propertyName, + Object value) + +
+          This method is called by method setNestedProperty when the current bean + is found to be a Map object, and defines how to deal with setting + a property on a Map.
+ voidsetResolver(Resolver resolver) + +
+          Configure the Resolver implementation used by BeanUtils.
+ voidsetSimpleProperty(Object bean, + String name, + Object value) + +
+          Set the value of the specified simple property of the specified bean, + with no type conversions.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+PropertyUtilsBean

+
+public PropertyUtilsBean()
+
+
Base constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+getInstance

+
+protected static PropertyUtilsBean getInstance()
+
+
Return the PropertyUtils bean instance. +

+

+ +
Returns:
The PropertyUtils bean instance
+
+
+
+ +

+getResolver

+
+public Resolver getResolver()
+
+
Return the configured Resolver implementation used by BeanUtils. +

+ The Resolver handles the property name + expressions and the implementation in use effectively + controls the dialect of the expression language + that BeanUtils recongnises. +

+ DefaultResolver is the default implementation used. +

+

+ +
Returns:
resolver The property expression resolver.
Since:
+
1.8.0
+
+
+
+
+ +

+setResolver

+
+public void setResolver(Resolver resolver)
+
+
Configure the Resolver implementation used by BeanUtils. +

+ The Resolver handles the property name + expressions and the implementation in use effectively + controls the dialect of the expression language + that BeanUtils recongnises. +

+ DefaultResolver is the default implementation used. +

+

+
Parameters:
resolver - The property expression resolver.
Since:
+
1.8.0
+
+
+
+
+ +

+clearDescriptors

+
+public void clearDescriptors()
+
+
Clear any cached property descriptors information for all classes + loaded by any class loaders. This is useful in cases where class + loaders are thrown away to implement class reloading. +

+

+
+
+
+
+ +

+copyProperties

+
+public void copyProperties(Object dest,
+                           Object orig)
+                    throws IllegalAccessException,
+                           InvocationTargetException,
+                           NoSuchMethodException
+
+

Copy property values from the "origin" bean to the "destination" bean + for all cases where the property names are the same (even though the + actual getter and setter methods might have been customized via + BeanInfo classes). No conversions are performed on the + actual property values -- it is assumed that the values retrieved from + the origin bean are assignment-compatible with the types expected by + the destination bean.

+ +

If the origin "bean" is actually a Map, it is assumed + to contain String-valued simple property names as the keys, pointing + at the corresponding property values that will be set in the destination + bean.Note that this method is intended to perform + a "shallow copy" of the properties and so complex properties + (for example, nested ones) will not be copied.

+ +

Note, that this method will not copy a List to a List, or an Object[] + to an Object[]. It's specifically for copying JavaBean properties.

+

+

+
Parameters:
dest - Destination bean whose properties are modified
orig - Origin bean whose properties are retrieved +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if the dest or + orig argument is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+describe

+
+public Map describe(Object bean)
+             throws IllegalAccessException,
+                    InvocationTargetException,
+                    NoSuchMethodException
+
+

Return the entire set of properties for which the specified bean + provides a read method. This map contains the unconverted property + values for all properties for which a read method is provided + (i.e. where the getReadMethod() returns non-null).

+ +

FIXME - Does not account for mapped properties.

+

+

+
Parameters:
bean - Bean whose properties are to be extracted +
Returns:
The set of properties for the bean +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public Object getIndexedProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified indexed property of the specified + bean, with no type conversions. The zero-relative index of the + required value must be included (in square brackets) as a suffix to + the property name, or IllegalArgumentException will be + thrown. In addition to supporting the JavaBeans specification, this + method has been extended to support List objects as well. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted +
Returns:
the indexed property value +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying array or List +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public Object getIndexedProperty(Object bean,
+                                 String name,
+                                 int index)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified indexed property of the specified + bean, with no type conversions. In addition to supporting the JavaBeans + specification, this method has been extended to support + List objects as well. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted +
Returns:
the indexed property value +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedProperty

+
+public Object getMappedProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified mapped property of the + specified bean, with no type conversions. The key of the + required value must be included (in brackets) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(key) of the property value + to be extracted +
Returns:
the mapped property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedProperty

+
+public Object getMappedProperty(Object bean,
+                                String name,
+                                String key)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified mapped property of the specified + bean, with no type conversions. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Mapped property name of the property value to be extracted
key - Key of the property value to be extracted +
Returns:
the mapped property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedPropertyDescriptors

+
+public FastHashMap getMappedPropertyDescriptors(Class beanClass)
+
+
Deprecated. This method should not be exposed +

+

Return the mapped property descriptors for this bean class.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
beanClass - Bean class to be introspected +
Returns:
the mapped property descriptors
+
+
+
+ +

+getMappedPropertyDescriptors

+
+public FastHashMap getMappedPropertyDescriptors(Object bean)
+
+
Deprecated. This method should not be exposed +

+

Return the mapped property descriptors for this bean.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
bean - Bean to be introspected +
Returns:
the mapped property descriptors
+
+
+
+ +

+getNestedProperty

+
+public Object getNestedProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted +
Returns:
the nested property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
NestedNullException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getPropertyOfMapBean

+
+protected Object getPropertyOfMapBean(Map bean,
+                                      String propertyName)
+                               throws IllegalArgumentException,
+                                      IllegalAccessException,
+                                      InvocationTargetException,
+                                      NoSuchMethodException
+
+
This method is called by getNestedProperty and setNestedProperty to + define what it means to get a property from an object which implements + Map. See setPropertyOfMapBean for more information. +

+

+
Parameters:
bean - Map bean
propertyName - The property name +
Returns:
the property value +
Throws: +
IllegalArgumentException - when the propertyName is regarded as + being invalid. +
IllegalAccessException - just in case subclasses override this + method to try to access real getter methods and find permission is denied. +
InvocationTargetException - just in case subclasses override this + method to try to access real getter methods, and find it throws an + exception when invoked. +
NoSuchMethodException - just in case subclasses override this + method to try to access real getter methods, and want to fail if + no simple method is available.
Since:
+
1.8.0
+
+
+
+
+ +

+getProperty

+
+public Object getProperty(Object bean,
+                          String name)
+                   throws IllegalAccessException,
+                          InvocationTargetException,
+                          NoSuchMethodException
+
+
Return the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted +
Returns:
the property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getPropertyDescriptor

+
+public PropertyDescriptor getPropertyDescriptor(Object bean,
+                                                String name)
+                                         throws IllegalAccessException,
+                                                InvocationTargetException,
+                                                NoSuchMethodException
+
+

Retrieve the property descriptor for the specified property of the + specified bean, or return null if there is no such + descriptor. This method resolves indexed and nested property + references in the same manner as other methods in this class, except + that if the last (or only) name element is indexed, the descriptor + for the last resolved property itself is returned.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
bean - Bean for which a property descriptor is requested
name - Possibly indexed and/or nested name of the property for + which a property descriptor is requested +
Returns:
the property descriptor +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getPropertyDescriptors

+
+public PropertyDescriptor[] getPropertyDescriptors(Class beanClass)
+
+

Retrieve the property descriptors for the specified class, + introspecting and caching them the first time a particular bean class + is encountered.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
beanClass - Bean class for which property descriptors are requested +
Returns:
the property descriptors +
Throws: +
IllegalArgumentException - if beanClass is null
+
+
+
+ +

+getPropertyDescriptors

+
+public PropertyDescriptor[] getPropertyDescriptors(Object bean)
+
+

Retrieve the property descriptors for the specified bean, + introspecting and caching them the first time a particular bean class + is encountered.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
bean - Bean for which property descriptors are requested +
Returns:
the property descriptors +
Throws: +
IllegalArgumentException - if bean is null
+
+
+
+ +

+getPropertyEditorClass

+
+public Class getPropertyEditorClass(Object bean,
+                                    String name)
+                             throws IllegalAccessException,
+                                    InvocationTargetException,
+                                    NoSuchMethodException
+
+

Return the Java Class repesenting the property editor class that has + been registered for this property (if any). This method follows the + same name resolution rules used by getPropertyDescriptor(), + so if the last element of a name reference is indexed, the property + editor for the underlying property's class is returned.

+ +

Note that null will be returned if there is no property, + or if there is no registered property editor class. Because this + return value is ambiguous, you should determine the existence of the + property itself by other means.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
bean - Bean for which a property descriptor is requested
name - Possibly indexed and/or nested name of the property for + which a property descriptor is requested +
Returns:
the property editor class +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getPropertyType

+
+public Class getPropertyType(Object bean,
+                             String name)
+                      throws IllegalAccessException,
+                             InvocationTargetException,
+                             NoSuchMethodException
+
+
Return the Java Class representing the property type of the specified + property, or null if there is no such property for the + specified bean. This method follows the same name resolution rules + used by getPropertyDescriptor(), so if the last element + of a name reference is indexed, the type of the property itself will + be returned. If the last (or only) element has no property with the + specified name, null is returned. +

+

+
Parameters:
bean - Bean for which a property descriptor is requested
name - Possibly indexed and/or nested name of the property for + which a property descriptor is requested +
Returns:
The property type +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getReadMethod

+
+public Method getReadMethod(PropertyDescriptor descriptor)
+
+

Return an accessible property getter method for this property, + if there is one; otherwise return null.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
descriptor - Property descriptor to return a getter for +
Returns:
The read method
+
+
+
+ +

+getSimpleProperty

+
+public Object getSimpleProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified simple property of the specified + bean, with no type conversions. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The property value +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if the property name + is nested or indexed +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getWriteMethod

+
+public Method getWriteMethod(PropertyDescriptor descriptor)
+
+

Return an accessible property setter method for this property, + if there is one; otherwise return null.

+ +

FIXME - Does not work with DynaBeans.

+

+

+
Parameters:
descriptor - Property descriptor to return a setter for +
Returns:
The write method
+
+
+
+ +

+isReadable

+
+public boolean isReadable(Object bean,
+                          String name)
+
+

Return true if the specified property name identifies + a readable property on the specified bean; otherwise, return + false. +

+

+
Parameters:
bean - Bean to be examined (may be a DynaBean
name - Property name to be evaluated +
Returns:
true if the property is readable, + otherwise false +
Throws: +
IllegalArgumentException - if bean + or name is null
Since:
+
BeanUtils 1.6
+
+
+
+
+ +

+isWriteable

+
+public boolean isWriteable(Object bean,
+                           String name)
+
+

Return true if the specified property name identifies + a writeable property on the specified bean; otherwise, return + false. +

+

+
Parameters:
bean - Bean to be examined (may be a DynaBean
name - Property name to be evaluated +
Returns:
true if the property is writeable, + otherwise false +
Throws: +
IllegalArgumentException - if bean + or name is null
Since:
+
BeanUtils 1.6
+
+
+
+
+ +

+setIndexedProperty

+
+public void setIndexedProperty(Object bean,
+                               String name,
+                               Object value)
+                        throws IllegalAccessException,
+                               InvocationTargetException,
+                               NoSuchMethodException
+
+
Set the value of the specified indexed property of the specified + bean, with no type conversions. The zero-relative index of the + required value must be included (in square brackets) as a suffix to + the property name, or IllegalArgumentException will be + thrown. In addition to supporting the JavaBeans specification, this + method has been extended to support List objects as well. +

+

+
Parameters:
bean - Bean whose property is to be modified
name - propertyname[index] of the property value + to be modified
value - Value to which the specified property element + should be set +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setIndexedProperty

+
+public void setIndexedProperty(Object bean,
+                               String name,
+                               int index,
+                               Object value)
+                        throws IllegalAccessException,
+                               InvocationTargetException,
+                               NoSuchMethodException
+
+
Set the value of the specified indexed property of the specified + bean, with no type conversions. In addition to supporting the JavaBeans + specification, this method has been extended to support + List objects as well. +

+

+
Parameters:
bean - Bean whose property is to be set
name - Simple property name of the property value to be set
index - Index of the property value to be set
value - Value to which the indexed property element is to be set +
Throws: +
IndexOutOfBoundsException - if the specified index + is outside the valid range for the underlying property +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setMappedProperty

+
+public void setMappedProperty(Object bean,
+                              String name,
+                              Object value)
+                       throws IllegalAccessException,
+                              InvocationTargetException,
+                              NoSuchMethodException
+
+
Set the value of the specified mapped property of the + specified bean, with no type conversions. The key of the + value to set must be included (in brackets) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Parameters:
bean - Bean whose property is to be set
name - propertyname(key) of the property value + to be set
value - The property value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setMappedProperty

+
+public void setMappedProperty(Object bean,
+                              String name,
+                              String key,
+                              Object value)
+                       throws IllegalAccessException,
+                              InvocationTargetException,
+                              NoSuchMethodException
+
+
Set the value of the specified mapped property of the specified + bean, with no type conversions. +

+

+
Parameters:
bean - Bean whose property is to be set
name - Mapped property name of the property value to be set
key - Key of the property value to be set
value - The property value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setNestedProperty

+
+public void setNestedProperty(Object bean,
+                              String name,
+                              Object value)
+                       throws IllegalAccessException,
+                              InvocationTargetException,
+                              NoSuchMethodException
+
+
Set the value of the (possibly nested) property of the specified + name, for the specified bean, with no type conversions. +

+ Example values for parameter "name" are: +

    +
  • "a" -- sets the value of property a of the specified bean
  • +
  • "a.b" -- gets the value of property a of the specified bean, + then on that object sets the value of property b.
  • +
  • "a(key)" -- sets a value of mapped-property a on the specified + bean. This effectively means bean.setA("key").
  • +
  • "a[3]" -- sets a value of indexed-property a on the specified + bean. This effectively means bean.setA(3).
  • +
+

+

+
Parameters:
bean - Bean whose property is to be modified
name - Possibly nested name of the property to be modified
value - Value to which the property is to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setPropertyOfMapBean

+
+protected void setPropertyOfMapBean(Map bean,
+                                    String propertyName,
+                                    Object value)
+                             throws IllegalArgumentException,
+                                    IllegalAccessException,
+                                    InvocationTargetException,
+                                    NoSuchMethodException
+
+
This method is called by method setNestedProperty when the current bean + is found to be a Map object, and defines how to deal with setting + a property on a Map. +

+ The standard implementation here is to: +

    +
  • call bean.set(propertyName) for all propertyName values.
  • +
  • throw an IllegalArgumentException if the property specifier + contains MAPPED_DELIM or INDEXED_DELIM, as Map entries are essentially + simple properties; mapping and indexing operations do not make sense + when accessing a map (even thought the returned object may be a Map + or an Array).
  • +
+

+ The default behaviour of beanutils 1.7.1 or later is for assigning to + "a.b" to mean a.put(b, obj) always. However the behaviour of beanutils + version 1.6.0, 1.6.1, 1.7.0 was for "a.b" to mean a.setB(obj) if such + a method existed, and a.put(b, obj) otherwise. In version 1.5 it meant + a.put(b, obj) always (ie the same as the behaviour in the current version). + In versions prior to 1.5 it meant a.setB(obj) always. [yes, this is + all very unfortunate] +

+ Users who would like to customise the meaning of "a.b" in method + setNestedProperty when a is a Map can create a custom subclass of + this class and override this method to implement the behaviour of + their choice, such as restoring the pre-1.4 behaviour of this class + if they wish. When overriding this method, do not forget to deal + with MAPPED_DELIM and INDEXED_DELIM characters in the propertyName. +

+ Note, however, that the recommended solution for objects that + implement Map but want their simple properties to come first is + for those objects to override their get/put methods to implement + that behaviour, and not to solve the problem by modifying the + default behaviour of the PropertyUtilsBean class by overriding this + method. +

+

+
Parameters:
bean - Map bean
propertyName - The property name
value - the property value +
Throws: +
IllegalArgumentException - when the propertyName is regarded as + being invalid. +
IllegalAccessException - just in case subclasses override this + method to try to access real setter methods and find permission is denied. +
InvocationTargetException - just in case subclasses override this + method to try to access real setter methods, and find it throws an + exception when invoked. +
NoSuchMethodException - just in case subclasses override this + method to try to access real setter methods, and want to fail if + no simple method is available.
Since:
+
1.8.0
+
+
+
+
+ +

+setProperty

+
+public void setProperty(Object bean,
+                        String name,
+                        Object value)
+                 throws IllegalAccessException,
+                        InvocationTargetException,
+                        NoSuchMethodException
+
+
Set the value of the specified property of the specified bean, + no matter which property reference format is used, with no + type conversions. +

+

+
Parameters:
bean - Bean whose property is to be modified
name - Possibly indexed and/or nested name of the property + to be modified
value - Value to which this property is to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setSimpleProperty

+
+public void setSimpleProperty(Object bean,
+                              String name,
+                              Object value)
+                       throws IllegalAccessException,
+                              InvocationTargetException,
+                              NoSuchMethodException
+
+
Set the value of the specified simple property of the specified bean, + with no type conversions. +

+

+
Parameters:
bean - Bean whose property is to be modified
name - Name of the property to be modified
value - Value to which the property should be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if bean or + name is null +
IllegalArgumentException - if the property name is + nested or indexed +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetDynaClass.html new file mode 100644 index 0000000..008dd56 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetDynaClass.html @@ -0,0 +1,867 @@ + + + + + + + +ResultSetDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ResultSetDynaClass

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ResultSetDynaClass
+
+
+
All Implemented Interfaces:
Serializable, DynaClass
+
+
+
+
public class ResultSetDynaClass
extends Object
implements DynaClass
+ + +

+

Implementation of DynaClass for DynaBeans that wrap the + java.sql.Row objects of a java.sql.ResultSet. + The normal usage pattern is something like:

+
+   ResultSet rs = ...;
+   ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);
+   Iterator rows = rsdc.iterator();
+   while (rows.hasNext())  {
+     DynaBean row = (DynaBean) rows.next();
+     ... process this row ...
+   }
+   rs.close();
+ 
+ +

Each column in the result set will be represented as a DynaBean + property of the corresponding name (optionally forced to lower case + for portability).

+ +

WARNING - Any DynaBean instance returned by + this class, or from the Iterator returned by the + iterator() method, is directly linked to the row that the + underlying result set is currently positioned at. This has the following + implications:

+
    +
  • Once you retrieve a different DynaBean instance, you should + no longer use any previous instance.
  • +
  • Changing the position of the underlying result set will change the + data that the DynaBean references.
  • +
  • Once the underlying result set is closed, the DynaBean + instance may no longer be used.
  • +
+ +

Any database data that you wish to utilize outside the context of the + current row of an open result set must be copied. For example, you could + use the following code to create standalone copies of the information in + a result set:

+
+   ArrayList results = new ArrayList(); // To hold copied list
+   ResultSetDynaClass rsdc = ...;
+   DynaProperty[] properties = rsdc.getDynaProperties();
+   BasicDynaClass bdc =
+     new BasicDynaClass("foo", BasicDynaBean.class,
+                        rsdc.getDynaProperties());
+   Iterator rows = rsdc.iterator();
+   while (rows.hasNext()) {
+     DynaBean oldRow = (DynaBean) rows.next();
+     DynaBean newRow = bdc.newInstance();
+     PropertyUtils.copyProperties(newRow, oldRow);
+     results.add(newRow);
+   }
+ 
+

+ +

+

+
Version:
+
$Revision: 926685 $ $Date: 2010-03-23 17:59:08 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Craig R. McClanahan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  booleanlowerCase + +
+          Flag defining whether column names should be lower cased when + converted to property names.
+protected  DynaProperty[]properties + +
+          The set of dynamic properties that are part of this + DynaClass.
+protected  MappropertiesMap + +
+          The set of dynamic properties that are part of this + DynaClass, keyed by the property name.
+protected  ResultSetresultSet + +
+          The ResultSet we are wrapping.
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
ResultSetDynaClass(ResultSet resultSet) + +
+          Construct a new ResultSetDynaClass for the specified + ResultSet.
ResultSetDynaClass(ResultSet resultSet, + boolean lowerCase) + +
+          Construct a new ResultSetDynaClass for the specified + ResultSet.
ResultSetDynaClass(ResultSet resultSet, + boolean lowerCase, + boolean useColumnLabel) + +
+          Construct a new ResultSetDynaClass for the specified + ResultSet.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  DynaPropertycreateDynaProperty(ResultSetMetaData metadata, + int i) + +
+          Factory method to create a new DynaProperty for the given index + into the result set metadata.
+protected  StringgetColumnName(String name) + +
+          Get the table column name for the specified property name.
+ DynaProperty[]getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it + exists; otherwise, return null.
+ StringgetName() + +
+          Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.
+protected  ObjectgetObject(ResultSet resultSet, + String name) + +
+          Get a column value from a ResultSet for the specified name.
+ ObjectgetObjectFromResultSet(String name) + +
+          Get a value from the ResultSet for the specified + property name.
+protected  voidintrospect(ResultSet resultSet) + +
+          Introspect the metadata associated with our result set, and populate + the properties and propertiesMap instance + variables.
+ Iteratoriterator() + +
+          Return an Iterator of DynaBean instances for + each row of the wrapped ResultSet, in "forward" order.
+protected  ClassloadClass(String className) + +
+          Loads the class of the given name which by default uses the class loader used + to load this library.
+ DynaBeannewInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+ voidsetUseColumnLabel(boolean useColumnLabel) + +
+          Set whether the column label or name should be used for the property name.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+ + + + + + + +
Methods inherited from interface org.apache.commons.beanutils.DynaClass
getDynaProperties, getDynaProperty, getName, newInstance
+  +

+ + + + + + + + +
+Field Detail
+ +

+resultSet

+
+protected ResultSet resultSet
+
+

The ResultSet we are wrapping.

+

+

+
+
+
+ +

+lowerCase

+
+protected boolean lowerCase
+
+

Flag defining whether column names should be lower cased when + converted to property names.

+

+

+
+
+
+ +

+properties

+
+protected DynaProperty[] properties
+
+

The set of dynamic properties that are part of this + DynaClass.

+

+

+
+
+
+ +

+propertiesMap

+
+protected Map propertiesMap
+
+

The set of dynamic properties that are part of this + DynaClass, keyed by the property name. Individual descriptor + instances will be the same instances as those in the + properties list.

+

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ResultSetDynaClass

+
+public ResultSetDynaClass(ResultSet resultSet)
+                   throws SQLException
+
+

Construct a new ResultSetDynaClass for the specified + ResultSet. The property names corresponding + to column names in the result set will be lower cased.

+

+

+
Parameters:
resultSet - The result set to be wrapped +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
+
+
+ +

+ResultSetDynaClass

+
+public ResultSetDynaClass(ResultSet resultSet,
+                          boolean lowerCase)
+                   throws SQLException
+
+

Construct a new ResultSetDynaClass for the specified + ResultSet. The property names corresponding + to the column names in the result set will be lower cased or not, + depending on the specified lowerCase value.

+ +

WARNING - If you specify false + for lowerCase, the returned property names will + exactly match the column names returned by your JDBC driver. + Because different drivers might return column names in different + cases, the property names seen by your application will vary + depending on which JDBC driver you are using.

+

+

+
Parameters:
resultSet - The result set to be wrapped
lowerCase - Should property names be lower cased? +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
+
+
+ +

+ResultSetDynaClass

+
+public ResultSetDynaClass(ResultSet resultSet,
+                          boolean lowerCase,
+                          boolean useColumnLabel)
+                   throws SQLException
+
+

Construct a new ResultSetDynaClass for the specified + ResultSet. The property names corresponding + to the column names in the result set will be lower cased or not, + depending on the specified lowerCase value.

+ +

WARNING - If you specify false + for lowerCase, the returned property names will + exactly match the column names returned by your JDBC driver. + Because different drivers might return column names in different + cases, the property names seen by your application will vary + depending on which JDBC driver you are using.

+

+

+
Parameters:
resultSet - The result set to be wrapped
lowerCase - Should property names be lower cased?
useColumnLabel - true if the column label should be used, otherwise false +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
Since:
+
1.8.3
+
+
+ + + + + + + + +
+Method Detail
+ +

+iterator

+
+public Iterator iterator()
+
+

Return an Iterator of DynaBean instances for + each row of the wrapped ResultSet, in "forward" order. + Unless the underlying result set supports scrolling, this method + should be called only once.

+

+

+
+
+
+ +
Returns:
An Iterator of DynaBean instances
+
+
+
+ +

+getObjectFromResultSet

+
+public Object getObjectFromResultSet(String name)
+                              throws SQLException
+
+
Get a value from the ResultSet for the specified + property name. +

+

+
+
+
+
Parameters:
name - The property name +
Returns:
The value +
Throws: +
SQLException - if an error occurs
Since:
+
1.8.0
+
+
+
+
+ +

+loadClass

+
+protected Class loadClass(String className)
+                   throws SQLException
+
+

Loads the class of the given name which by default uses the class loader used + to load this library. + Dervations of this class could implement alternative class loading policies such as + using custom ClassLoader or using the Threads's context class loader etc. +

+

+

+
+
+
+
Parameters:
className - The name of the class to load +
Returns:
The loaded class +
Throws: +
SQLException - if the class cannot be loaded
+
+
+
+ +

+getName

+
+public String getName()
+
+

Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.

+

+

+
Specified by:
getName in interface DynaClass
+
+
+ +
Returns:
the name of the DynaClass
+
+
+
+ +

+getDynaProperty

+
+public DynaProperty getDynaProperty(String name)
+
+

Return a property descriptor for the specified property, if it + exists; otherwise, return null.

+

+

+
Specified by:
getDynaProperty in interface DynaClass
+
+
+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+getDynaProperties

+
+public DynaProperty[] getDynaProperties()
+
+

Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. If no properties are defined, a + zero-length array will be returned.

+

+

+
Specified by:
getDynaProperties in interface DynaClass
+
+
+ +
Returns:
the set of properties for this DynaClass
+
+
+
+ +

+newInstance

+
+public DynaBean newInstance()
+                     throws IllegalAccessException,
+                            InstantiationException
+
+

Instantiate and return a new DynaBean instance, associated + with this DynaClass. NOTE - This operation is not + supported, and throws an exception.

+

+

+
Specified by:
newInstance in interface DynaClass
+
+
+ +
Returns:
A new DynaBean instance +
Throws: +
IllegalAccessException - if the Class or the appropriate + constructor is not accessible +
InstantiationException - if this Class represents an abstract + class, an array class, a primitive type, or void; or if instantiation + fails for some other reason
+
+
+
+ +

+setUseColumnLabel

+
+public void setUseColumnLabel(boolean useColumnLabel)
+
+
Set whether the column label or name should be used for the property name. +

+

+
+
+
+
Parameters:
useColumnLabel - true if the column label should be used, otherwise false
+
+
+
+ +

+createDynaProperty

+
+protected DynaProperty createDynaProperty(ResultSetMetaData metadata,
+                                          int i)
+                                   throws SQLException
+
+

Factory method to create a new DynaProperty for the given index + into the result set metadata.

+

+

+
+
+
+
Parameters:
metadata - is the result set metadata
i - is the column index in the metadata +
Returns:
the newly created DynaProperty instance +
Throws: +
SQLException - If an error occurs accessing the SQL metadata
+
+
+
+ +

+introspect

+
+protected void introspect(ResultSet resultSet)
+                   throws SQLException
+
+

Introspect the metadata associated with our result set, and populate + the properties and propertiesMap instance + variables.

+

+

+
+
+
+
Parameters:
resultSet - The resultSet whose metadata is to + be introspected +
Throws: +
SQLException - if an error is encountered processing the + result set metadata
+
+
+
+ +

+getObject

+
+protected Object getObject(ResultSet resultSet,
+                           String name)
+                    throws SQLException
+
+
Get a column value from a ResultSet for the specified name. +

+

+
+
+
+
Parameters:
resultSet - The result set
name - The property name +
Returns:
The value +
Throws: +
SQLException - if an error occurs
+
+
+
+ +

+getColumnName

+
+protected String getColumnName(String name)
+
+
Get the table column name for the specified property name. +

+

+
+
+
+
Parameters:
name - The property name +
Returns:
The column name (which can be different if the lowerCase + option is used).
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetIterator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetIterator.html new file mode 100644 index 0000000..dc39c94 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/ResultSetIterator.html @@ -0,0 +1,699 @@ + + + + + + + +ResultSetIterator (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class ResultSetIterator

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.ResultSetIterator
+
+
+
All Implemented Interfaces:
Iterator, DynaBean
+
+
+
+
public class ResultSetIterator
extends Object
implements DynaBean, Iterator
+ + +

+

Implementation of java.util.Iterator returned by the + iterator() method of ResultSetDynaClass. Each + object returned by this iterator will be a DynaBean that + represents a single row from the result set being wrapped.

+

+ +

+

+
Version:
+
$Revision: 556221 $ $Date: 2007-07-14 05:19:21 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  booleancurrent + +
+          Flag indicating whether the result set is currently positioned at a + row for which we have not yet returned an element in the iteration.
+protected  ResultSetDynaClassdynaClass + +
+          The ResultSetDynaClass we are associated with.
+protected  booleaneof + +
+          Flag indicating whether the result set has indicated that there are + no further rows.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidadvance() + +
+          Advance the result set to the next row, if there is not a current + row (and if we are not already at eof).
+ booleancontains(String name, + String key) + +
+          Does the specified mapped property contain a value for the specified + key value?
+ Objectget(String name) + +
+          Return the value of a simple property with the specified name.
+ Objectget(String name, + int index) + +
+          Return the value of an indexed property with the specified name.
+ Objectget(String name, + String key) + +
+          Return the value of a mapped property with the specified name, + or null if there is no value for the specified key.
+ DynaClassgetDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ booleanhasNext() + +
+          Return true if the iteration has more elements.
+ Objectnext() + +
+          Return the next element in the iteration.
+ voidremove() + +
+          Remove the current element from the iteration.
+ voidremove(String name, + String key) + +
+          Remove any existing value for the specified key on the + specified mapped property.
+ voidset(String name, + int index, + Object value) + +
+          Set the value of an indexed property with the specified name.
+ voidset(String name, + Object value) + +
+          Set the value of a simple property with the specified name.
+ voidset(String name, + String key, + Object value) + +
+          Set the value of a mapped property with the specified name.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+current

+
+protected boolean current
+
+

Flag indicating whether the result set is currently positioned at a + row for which we have not yet returned an element in the iteration.

+

+

+
+
+
+ +

+dynaClass

+
+protected ResultSetDynaClass dynaClass
+
+

The ResultSetDynaClass we are associated with.

+

+

+
+
+
+ +

+eof

+
+protected boolean eof
+
+

Flag indicating whether the result set has indicated that there are + no further rows.

+

+

+
+
+ + + + + + + + +
+Method Detail
+ +

+contains

+
+public boolean contains(String name,
+                        String key)
+
+
Does the specified mapped property contain a value for the specified + key value? +

+

+
Specified by:
contains in interface DynaBean
+
+
+
Parameters:
name - Name of the property to check
key - Name of the key to check +
Returns:
true if the mapped property contains a value for + the specified key, otherwise false +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+public Object get(String name)
+
+
Return the value of a simple property with the specified name. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved +
Returns:
The property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+public Object get(String name,
+                  int index)
+
+
Return the value of an indexed property with the specified name. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
index - Index of the value to be retrieved +
Returns:
The indexed property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property +
NullPointerException - if no array or List has been + initialized for this property
+
+
+
+ +

+get

+
+public Object get(String name,
+                  String key)
+
+
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
key - Key of the value to be retrieved +
Returns:
The mapped property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getDynaClass

+
+public DynaClass getDynaClass()
+
+
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +

+

+
Specified by:
getDynaClass in interface DynaBean
+
+
+ +
Returns:
The associated DynaClass
+
+
+
+ +

+remove

+
+public void remove(String name,
+                   String key)
+
+
Remove any existing value for the specified key on the + specified mapped property. +

+

+
Specified by:
remove in interface DynaBean
+
+
+
Parameters:
name - Name of the property for which a value is to + be removed
key - Key of the value to be removed +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+set

+
+public void set(String name,
+                Object value)
+
+
Set the value of a simple property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
NullPointerException - if an attempt is made to set a + primitive property to null
+
+
+
+ +

+set

+
+public void set(String name,
+                int index,
+                Object value)
+
+
Set the value of an indexed property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
index - Index of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property
+
+
+
+ +

+set

+
+public void set(String name,
+                String key,
+                Object value)
+
+
Set the value of a mapped property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
key - Key of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+hasNext

+
+public boolean hasNext()
+
+

Return true if the iteration has more elements.

+

+

+
Specified by:
hasNext in interface Iterator
+
+
+ +
Returns:
true if the result set has another + row, otherwise false
+
+
+
+ +

+next

+
+public Object next()
+
+

Return the next element in the iteration.

+

+

+
Specified by:
next in interface Iterator
+
+
+ +
Returns:
advance to the new row and return this
+
+
+
+ +

+remove

+
+public void remove()
+
+

Remove the current element from the iteration. This method is + not supported.

+

+

+
Specified by:
remove in interface Iterator
+
+
+
+
+
+
+ +

+advance

+
+protected void advance()
+                throws SQLException
+
+

Advance the result set to the next row, if there is not a current + row (and if we are not already at eof).

+

+

+
+
+
+ +
Throws: +
SQLException - if the result set throws an exception
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/RowSetDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/RowSetDynaClass.html new file mode 100644 index 0000000..5046c9a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/RowSetDynaClass.html @@ -0,0 +1,1021 @@ + + + + + + + +RowSetDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class RowSetDynaClass

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.RowSetDynaClass
+
+
+
All Implemented Interfaces:
Serializable, DynaClass
+
+
+
+
public class RowSetDynaClass
extends Object
implements DynaClass, Serializable
+ + +

+

Implementation of DynaClass that creates an in-memory collection + of DynaBeans representing the results of an SQL query. Once the + DynaClass instance has been created, the JDBC ResultSet + and Statement on which it is based can be closed, and the + underlying Connection can be returned to its connection pool + (if you are using one).

+ +

The normal usage pattern is something like:

+
+   Connection conn = ...;  // Acquire connection from pool
+   Statement stmt = conn.createStatement();
+   ResultSet rs = stmt.executeQuery("SELECT ...");
+   RowSetDynaClass rsdc = new RowSetDynaClass(rs);
+   rs.close();
+   stmt.close();
+   ...;                    // Return connection to pool
+   List rows = rsdc.getRows();
+   ...;                   // Process the rows as desired
+ 
+ +

Each column in the result set will be represented as a DynaBean + property of the corresponding name (optionally forced to lower case + for portability). There will be one DynaBean in the + List returned by getRows() for each + row in the original ResultSet.

+ +

In general, instances of RowSetDynaClass can be serialized + and deserialized, which will automatically include the list of + DynaBeans representing the data content. The only exception + to this rule would be when the underlying property values that were + copied from the ResultSet originally cannot themselves + be serialized. Therefore, a RowSetDynaClass makes a very + convenient mechanism for transporting data sets to remote Java-based + application components.

+

+ +

+

+
Version:
+
$Revision: 926685 $ $Date: 2010-03-23 17:59:08 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Craig R. McClanahan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  intlimit + +
+          Limits the size of the returned list.
+protected  booleanlowerCase + +
+          Flag defining whether column names should be lower cased when + converted to property names.
+protected  DynaProperty[]properties + +
+          The set of dynamic properties that are part of this + DynaClass.
+protected  MappropertiesMap + +
+          The set of dynamic properties that are part of this + DynaClass, keyed by the property name.
+protected  Listrows + +
+          The list of DynaBeans representing the contents of + the original ResultSet on which this + RowSetDynaClass was based.
+  + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
RowSetDynaClass(ResultSet resultSet) + +
+          Construct a new RowSetDynaClass for the specified + ResultSet.
RowSetDynaClass(ResultSet resultSet, + boolean lowerCase) + +
+          Construct a new RowSetDynaClass for the specified + ResultSet.
RowSetDynaClass(ResultSet resultSet, + boolean lowerCase, + boolean useColumnLabel) + +
+          Construct a new RowSetDynaClass for the specified + ResultSet.
RowSetDynaClass(ResultSet resultSet, + boolean lowerCase, + int limit) + +
+          Construct a new RowSetDynaClass for the specified + ResultSet.
RowSetDynaClass(ResultSet resultSet, + boolean lowerCase, + int limit, + boolean useColumnLabel) + +
+          Construct a new RowSetDynaClass for the specified + ResultSet.
RowSetDynaClass(ResultSet resultSet, + int limit) + +
+          Construct a new RowSetDynaClass for the specified + ResultSet.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidcopy(ResultSet resultSet) + +
+          Copy the column values for each row in the specified + ResultSet into a newly created DynaBean, and add + this bean to the list of DynaBeans that will later by + returned by a call to getRows().
+protected  DynaBeancreateDynaBean() + +
+          Create and return a new DynaBean instance to be used for + representing a row in the underlying result set.
+protected  DynaPropertycreateDynaProperty(ResultSetMetaData metadata, + int i) + +
+          Factory method to create a new DynaProperty for the given index + into the result set metadata.
+protected  StringgetColumnName(String name) + +
+          Get the table column name for the specified property name.
+ DynaProperty[]getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it + exists; otherwise, return null.
+ StringgetName() + +
+          Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.
+protected  ObjectgetObject(ResultSet resultSet, + String name) + +
+          Get a column value from a ResultSet for the specified name.
+ ListgetRows() + +
+          Return a List containing the DynaBeans that + represent the contents of each Row from the + ResultSet that was the basis of this + RowSetDynaClass instance.
+protected  voidintrospect(ResultSet resultSet) + +
+          Introspect the metadata associated with our result set, and populate + the properties and propertiesMap instance + variables.
+protected  ClassloadClass(String className) + +
+          Loads and returns the Class of the given name.
+ DynaBeannewInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+ voidsetUseColumnLabel(boolean useColumnLabel) + +
+          Set whether the column label or name should be used for the property name.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+ + + + + + + +
Methods inherited from interface org.apache.commons.beanutils.DynaClass
getDynaProperties, getDynaProperty, getName, newInstance
+  +

+ + + + + + + + +
+Field Detail
+ +

+limit

+
+protected int limit
+
+

Limits the size of the returned list. The call to + getRows() will return at most limit number of rows. + If less than or equal to 0, does not limit the size of the result. +

+

+
+
+
+ +

+rows

+
+protected List rows
+
+

The list of DynaBeans representing the contents of + the original ResultSet on which this + RowSetDynaClass was based.

+

+

+
+
+
+ +

+lowerCase

+
+protected boolean lowerCase
+
+

Flag defining whether column names should be lower cased when + converted to property names.

+

+

+
+
+
+ +

+properties

+
+protected DynaProperty[] properties
+
+

The set of dynamic properties that are part of this + DynaClass.

+

+

+
+
+
+ +

+propertiesMap

+
+protected Map propertiesMap
+
+

The set of dynamic properties that are part of this + DynaClass, keyed by the property name. Individual descriptor + instances will be the same instances as those in the + properties list.

+

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+RowSetDynaClass

+
+public RowSetDynaClass(ResultSet resultSet)
+                throws SQLException
+
+

Construct a new RowSetDynaClass for the specified + ResultSet. The property names corresponding + to column names in the result set will be lower cased.

+

+

+
Parameters:
resultSet - The result set to be wrapped +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
+
+
+ +

+RowSetDynaClass

+
+public RowSetDynaClass(ResultSet resultSet,
+                       int limit)
+                throws SQLException
+
+

Construct a new RowSetDynaClass for the specified + ResultSet. The property names corresponding + to column names in the result set will be lower cased.

+ + If limit is not less than 0, max limit + number of rows will be copied into the list. +

+

+
Parameters:
resultSet - The result set to be wrapped
limit - The maximum for the size of the result. +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
+
+
+ +

+RowSetDynaClass

+
+public RowSetDynaClass(ResultSet resultSet,
+                       boolean lowerCase)
+                throws SQLException
+
+

Construct a new RowSetDynaClass for the specified + ResultSet. The property names corresponding + to the column names in the result set will be lower cased or not, + depending on the specified lowerCase value.

+ + If limit is not less than 0, max limit + number of rows will be copied into the resultset. +

+

+
Parameters:
resultSet - The result set to be wrapped
lowerCase - Should property names be lower cased? +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
+
+
+ +

+RowSetDynaClass

+
+public RowSetDynaClass(ResultSet resultSet,
+                       boolean lowerCase,
+                       int limit)
+                throws SQLException
+
+

Construct a new RowSetDynaClass for the specified + ResultSet. The property names corresponding + to the column names in the result set will be lower cased or not, + depending on the specified lowerCase value.

+ +

WARNING - If you specify false + for lowerCase, the returned property names will + exactly match the column names returned by your JDBC driver. + Because different drivers might return column names in different + cases, the property names seen by your application will vary + depending on which JDBC driver you are using.

+

+

+
Parameters:
resultSet - The result set to be wrapped
lowerCase - Should property names be lower cased?
limit - Maximum limit for the List of DynaBean +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
+
+
+ +

+RowSetDynaClass

+
+public RowSetDynaClass(ResultSet resultSet,
+                       boolean lowerCase,
+                       boolean useColumnLabel)
+                throws SQLException
+
+

Construct a new RowSetDynaClass for the specified + ResultSet. The property names corresponding + to the column names in the result set will be lower cased or not, + depending on the specified lowerCase value.

+ +

WARNING - If you specify false + for lowerCase, the returned property names will + exactly match the column names returned by your JDBC driver. + Because different drivers might return column names in different + cases, the property names seen by your application will vary + depending on which JDBC driver you are using.

+

+

+
Parameters:
resultSet - The result set to be wrapped
lowerCase - Should property names be lower cased?
useColumnLabel - true if the column label should be used, otherwise false +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
Since:
+
1.8.3
+
+
+
+ +

+RowSetDynaClass

+
+public RowSetDynaClass(ResultSet resultSet,
+                       boolean lowerCase,
+                       int limit,
+                       boolean useColumnLabel)
+                throws SQLException
+
+

Construct a new RowSetDynaClass for the specified + ResultSet. The property names corresponding + to the column names in the result set will be lower cased or not, + depending on the specified lowerCase value.

+ +

WARNING - If you specify false + for lowerCase, the returned property names will + exactly match the column names returned by your JDBC driver. + Because different drivers might return column names in different + cases, the property names seen by your application will vary + depending on which JDBC driver you are using.

+

+

+
Parameters:
resultSet - The result set to be wrapped
lowerCase - Should property names be lower cased?
limit - Maximum limit for the List of DynaBean
useColumnLabel - true if the column label should be used, otherwise false +
Throws: +
NullPointerException - if resultSet + is null +
SQLException - if the metadata for this result set + cannot be introspected
Since:
+
1.8.3
+
+
+ + + + + + + + +
+Method Detail
+ +

+getRows

+
+public List getRows()
+
+

Return a List containing the DynaBeans that + represent the contents of each Row from the + ResultSet that was the basis of this + RowSetDynaClass instance. These DynaBeans are + disconnected from the database itself, so there is no problem with + modifying the contents of the list, or the values of the properties + of these DynaBeans. However, it is the application's + responsibility to persist any such changes back to the database, + if it so desires.

+

+

+
+
+
+ +
Returns:
A List of DynaBean instances
+
+
+
+ +

+copy

+
+protected void copy(ResultSet resultSet)
+             throws SQLException
+
+

Copy the column values for each row in the specified + ResultSet into a newly created DynaBean, and add + this bean to the list of DynaBeans that will later by + returned by a call to getRows().

+

+

+
+
+
+
Parameters:
resultSet - The ResultSet whose data is to be + copied +
Throws: +
SQLException - if an error is encountered copying the data
+
+
+
+ +

+createDynaBean

+
+protected DynaBean createDynaBean()
+
+

Create and return a new DynaBean instance to be used for + representing a row in the underlying result set.

+

+

+
+
+
+ +
Returns:
A new DynaBean instance
+
+
+
+ +

+getName

+
+public String getName()
+
+

Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.

+

+

+
Specified by:
getName in interface DynaClass
+
+
+ +
Returns:
the name of the DynaClass
+
+
+
+ +

+getDynaProperty

+
+public DynaProperty getDynaProperty(String name)
+
+

Return a property descriptor for the specified property, if it + exists; otherwise, return null.

+

+

+
Specified by:
getDynaProperty in interface DynaClass
+
+
+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+getDynaProperties

+
+public DynaProperty[] getDynaProperties()
+
+

Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. If no properties are defined, a + zero-length array will be returned.

+

+

+
Specified by:
getDynaProperties in interface DynaClass
+
+
+ +
Returns:
the set of properties for this DynaClass
+
+
+
+ +

+newInstance

+
+public DynaBean newInstance()
+                     throws IllegalAccessException,
+                            InstantiationException
+
+

Instantiate and return a new DynaBean instance, associated + with this DynaClass. NOTE - This operation is not + supported, and throws an exception.

+

+

+
Specified by:
newInstance in interface DynaClass
+
+
+ +
Returns:
A new DynaBean instance +
Throws: +
IllegalAccessException - if the Class or the appropriate + constructor is not accessible +
InstantiationException - if this Class represents an abstract + class, an array class, a primitive type, or void; or if instantiation + fails for some other reason
+
+
+
+ +

+setUseColumnLabel

+
+public void setUseColumnLabel(boolean useColumnLabel)
+
+
Set whether the column label or name should be used for the property name. +

+

+
+
+
+
Parameters:
useColumnLabel - true if the column label should be used, otherwise false
+
+
+
+ +

+loadClass

+
+protected Class loadClass(String className)
+                   throws SQLException
+
+

Loads and returns the Class of the given name. + By default, a load from the thread context class loader is attempted. + If there is no such class loader, the class loader used to load this + class will be utilized.

+

+

+
+
+
+
Parameters:
className - The name of the class to load +
Returns:
The loaded class +
Throws: +
SQLException - if an exception was thrown trying to load + the specified class
+
+
+
+ +

+createDynaProperty

+
+protected DynaProperty createDynaProperty(ResultSetMetaData metadata,
+                                          int i)
+                                   throws SQLException
+
+

Factory method to create a new DynaProperty for the given index + into the result set metadata.

+

+

+
+
+
+
Parameters:
metadata - is the result set metadata
i - is the column index in the metadata +
Returns:
the newly created DynaProperty instance +
Throws: +
SQLException - If an error occurs accessing the SQL metadata
+
+
+
+ +

+introspect

+
+protected void introspect(ResultSet resultSet)
+                   throws SQLException
+
+

Introspect the metadata associated with our result set, and populate + the properties and propertiesMap instance + variables.

+

+

+
+
+
+
Parameters:
resultSet - The resultSet whose metadata is to + be introspected +
Throws: +
SQLException - if an error is encountered processing the + result set metadata
+
+
+
+ +

+getObject

+
+protected Object getObject(ResultSet resultSet,
+                           String name)
+                    throws SQLException
+
+
Get a column value from a ResultSet for the specified name. +

+

+
+
+
+
Parameters:
resultSet - The result set
name - The property name +
Returns:
The value +
Throws: +
SQLException - if an error occurs
+
+
+
+ +

+getColumnName

+
+protected String getColumnName(String name)
+
+
Get the table column name for the specified property name. +

+

+
+
+
+
Parameters:
name - The property name +
Returns:
The column name (which can be different if the lowerCase + option is used).
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaBean.html new file mode 100644 index 0000000..d77afe9 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaBean.html @@ -0,0 +1,685 @@ + + + + + + + +WrapDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class WrapDynaBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.WrapDynaBean
+
+
+
All Implemented Interfaces:
Serializable, DynaBean
+
+
+
Direct Known Subclasses:
ConvertingWrapDynaBean
+
+
+
+
public class WrapDynaBean
extends Object
implements DynaBean, Serializable
+ + +

+

Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties.

+ +

+ The most common use cases for this class involve wrapping an existing java bean. + (This makes it different from the typical use cases for other DynaBean's.) + For example: +

+
+  Object aJavaBean = ...;
+  ...
+  DynaBean db = new WrapDynaBean(aJavaBean);
+  ...
+ 
+ +

IMPLEMENTATION NOTE - This implementation does not + support the contains() and remove() methods.

+

+ +

+

+
Version:
+
$Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+
Author:
+
Craig McClanahan
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+protected  WrapDynaClassdynaClass + +
+          The DynaClass "base class" that this DynaBean + is associated with.
+protected  Objectinstance + +
+          The JavaBean instance wrapped by this WrapDynaBean.
+  + + + + + + + + + + +
+Constructor Summary
WrapDynaBean(Object instance) + +
+          Construct a new DynaBean associated with the specified + JavaBean instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleancontains(String name, + String key) + +
+          Does the specified mapped property contain a value for the specified + key value?
+ Objectget(String name) + +
+          Return the value of a simple property with the specified name.
+ Objectget(String name, + int index) + +
+          Return the value of an indexed property with the specified name.
+ Objectget(String name, + String key) + +
+          Return the value of a mapped property with the specified name, + or null if there is no value for the specified key.
+ DynaClassgetDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+protected  DynaPropertygetDynaProperty(String name) + +
+          Return the property descriptor for the specified property name.
+ ObjectgetInstance() + +
+          Gets the bean instance wrapped by this DynaBean.
+ voidremove(String name, + String key) + +
+          Remove any existing value for the specified key on the + specified mapped property.
+ voidset(String name, + int index, + Object value) + +
+          Set the value of an indexed property with the specified name.
+ voidset(String name, + Object value) + +
+          Set the value of a simple property with the specified name.
+ voidset(String name, + String key, + Object value) + +
+          Set the value of a mapped property with the specified name.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+dynaClass

+
+protected transient WrapDynaClass dynaClass
+
+
The DynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+
+ +

+instance

+
+protected Object instance
+
+
The JavaBean instance wrapped by this WrapDynaBean. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WrapDynaBean

+
+public WrapDynaBean(Object instance)
+
+
Construct a new DynaBean associated with the specified + JavaBean instance. +

+

+
Parameters:
instance - JavaBean instance to be wrapped
+
+ + + + + + + + +
+Method Detail
+ +

+contains

+
+public boolean contains(String name,
+                        String key)
+
+
Does the specified mapped property contain a value for the specified + key value? +

+

+
Specified by:
contains in interface DynaBean
+
+
+
Parameters:
name - Name of the property to check
key - Name of the key to check +
Returns:
true if the mapped property contains a value for + the specified key, otherwise false +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+public Object get(String name)
+
+
Return the value of a simple property with the specified name. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved +
Returns:
The property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+get

+
+public Object get(String name,
+                  int index)
+
+
Return the value of an indexed property with the specified name. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
index - Index of the value to be retrieved +
Returns:
The indexed property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property +
NullPointerException - if no array or List has been + initialized for this property
+
+
+
+ +

+get

+
+public Object get(String name,
+                  String key)
+
+
Return the value of a mapped property with the specified name, + or null if there is no value for the specified key. +

+

+
Specified by:
get in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be retrieved
key - Key of the value to be retrieved +
Returns:
The mapped property's value +
Throws: +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getDynaClass

+
+public DynaClass getDynaClass()
+
+
Return the DynaClass instance that describes the set of + properties available for this DynaBean. +

+

+
Specified by:
getDynaClass in interface DynaBean
+
+
+ +
Returns:
The associated DynaClass
+
+
+
+ +

+remove

+
+public void remove(String name,
+                   String key)
+
+
Remove any existing value for the specified key on the + specified mapped property. +

+

+
Specified by:
remove in interface DynaBean
+
+
+
Parameters:
name - Name of the property for which a value is to + be removed
key - Key of the value to be removed +
Throws: +
IllegalArgumentException - if there is no property + of the specified name
+
+
+
+ +

+set

+
+public void set(String name,
+                Object value)
+
+
Set the value of a simple property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
NullPointerException - if an attempt is made to set a + primitive property to null
+
+
+
+ +

+set

+
+public void set(String name,
+                int index,
+                Object value)
+
+
Set the value of an indexed property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
index - Index of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not indexed +
IndexOutOfBoundsException - if the specified index + is outside the range of the underlying property
+
+
+
+ +

+set

+
+public void set(String name,
+                String key,
+                Object value)
+
+
Set the value of a mapped property with the specified name. +

+

+
Specified by:
set in interface DynaBean
+
+
+
Parameters:
name - Name of the property whose value is to be set
key - Key of the property to be set
value - Value to which this property is to be set +
Throws: +
ConversionException - if the specified value cannot be + converted to the type required for this property +
IllegalArgumentException - if there is no property + of the specified name +
IllegalArgumentException - if the specified property + exists, but is not mapped
+
+
+
+ +

+getInstance

+
+public Object getInstance()
+
+
Gets the bean instance wrapped by this DynaBean. + For most common use cases, + this object should already be known + and this method safely be ignored. + But some creators of frameworks using DynaBean's may + find this useful. +

+

+
+
+
+ +
Returns:
the java bean Object wrapped by this DynaBean
+
+
+
+ +

+getDynaProperty

+
+protected DynaProperty getDynaProperty(String name)
+
+
Return the property descriptor for the specified property name. +

+

+
+
+
+
Parameters:
name - Name of the property for which to retrieve the descriptor +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if this is not a valid property + name for our DynaClass
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaClass.html new file mode 100644 index 0000000..cfa0715 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/WrapDynaClass.html @@ -0,0 +1,674 @@ + + + + + + + +WrapDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils +
+Class WrapDynaClass

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.WrapDynaClass
+
+
+
All Implemented Interfaces:
DynaClass
+
+
+
+
public class WrapDynaClass
extends Object
implements DynaClass
+ + +

+

Implementation of DynaClass for DynaBeans that wrap + standard JavaBean instances.

+ +

+ It is suggested that this class should not usually need to be used directly + to create new WrapDynaBean instances. + It's usually better to call the WrapDynaBean constructor directly. + For example:

+
+   Object javaBean = ...;
+   DynaBean wrapper = new WrapDynaBean(javaBean);
+ 
+

+

+ +

+

+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig McClanahan
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  ClassbeanClass + +
+          Deprecated. No longer initialized, use getBeanClass() method instead
+protected  PropertyDescriptor[]descriptors + +
+          The set of PropertyDescriptors for this bean class.
+protected  HashMapdescriptorsMap + +
+          The set of PropertyDescriptors for this bean class, keyed by the + property name.
+protected static HashMapdynaClasses + +
+          Deprecated. The dynaClasses Map will be removed in a subsequent release
+protected  DynaProperty[]properties + +
+          The set of dynamic properties that are part of this DynaClass.
+protected  HashMappropertiesMap + +
+          The set of dynamic properties that are part of this DynaClass, + keyed by the property name.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static voidclear() + +
+          Clear our cache of WrapDynaClass instances.
+static WrapDynaClasscreateDynaClass(Class beanClass) + +
+          Create (if necessary) and return a new WrapDynaClass + instance for the specified bean class.
+protected  ClassgetBeanClass() + +
+          Return the class of the underlying wrapped bean.
+ DynaProperty[]getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertygetDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it exists; + otherwise, return null.
+ StringgetName() + +
+          Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties.
+ PropertyDescriptorgetPropertyDescriptor(String name) + +
+          Return the PropertyDescriptor for the specified property name, if any; + otherwise return null.
+protected  voidintrospect() + +
+          Introspect our bean class to identify the supported properties.
+ DynaBeannewInstance() + +
+          Instantiates a new standard JavaBean instance associated with + this DynaClass and return it wrapped in a new WrapDynaBean + instance.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+beanClass

+
+protected Class beanClass
+
+
Deprecated. No longer initialized, use getBeanClass() method instead
The JavaBean Class which is represented by this + WrapDynaClass. +

+

+
+
+
+ +

+descriptors

+
+protected PropertyDescriptor[] descriptors
+
+
The set of PropertyDescriptors for this bean class. +

+

+
+
+
+ +

+descriptorsMap

+
+protected HashMap descriptorsMap
+
+
The set of PropertyDescriptors for this bean class, keyed by the + property name. Individual descriptor instances will be the same + instances as those in the descriptors list. +

+

+
+
+
+ +

+properties

+
+protected DynaProperty[] properties
+
+
The set of dynamic properties that are part of this DynaClass. +

+

+
+
+
+ +

+propertiesMap

+
+protected HashMap propertiesMap
+
+
The set of dynamic properties that are part of this DynaClass, + keyed by the property name. Individual descriptor instances will + be the same instances as those in the properties list. +

+

+
+
+
+ +

+dynaClasses

+
+protected static HashMap dynaClasses
+
+
Deprecated. The dynaClasses Map will be removed in a subsequent release
The set of WrapDynaClass instances that have ever been + created, keyed by the underlying bean Class. The keys to this map + are Class objects, and the values are corresponding WrapDynaClass + objects. +

+ This static variable is safe even when this code is deployed via a + shared classloader because it is keyed via a Class object. The same + class loaded via two different classloaders will result in different + entries in this map. +

+ Note, however, that this HashMap can result in a memory leak. When + this class is in a shared classloader it will retain references to + classes loaded via a webapp classloader even after the webapp has been + undeployed. That will prevent the entire classloader and all the classes + it refers to and all their static members from being freed. + + !!!!!!!!!!!! PLEASE NOTE !!!!!!!!!!!! ************* + + THE FOLLOWING IS A NASTY HACK TO SO THAT BEANUTILS REMAINS BINARY + COMPATIBLE WITH PREVIOUS RELEASES. + + There are two issues here: + + 1) Memory Issues: The static HashMap caused memory problems (See BEANUTILS-59) + to resolve this it has been moved into a ContextClassLoaderLocal instance + (named CLASSLOADER_CACHE above) which holds one copy per + ClassLoader in a WeakHashMap. + + 2) Binary Compatibility: As the "dynaClasses" static HashMap is "protected" + removing it breaks BeanUtils binary compatibility with previous versions. + To resolve this all the methods have been overriden to delegate to the + Map for the ClassLoader in the ContextClassLoaderLocal. +

+

+
+
+ + + + + + + + +
+Method Detail
+ +

+getBeanClass

+
+protected Class getBeanClass()
+
+
Return the class of the underlying wrapped bean. +

+

+
+
+
+ +
Returns:
the class of the underlying wrapped bean
Since:
+
1.8.0
+
+
+
+
+ +

+getName

+
+public String getName()
+
+
Return the name of this DynaClass (analogous to the + getName() method of java.lang.ClassDynaClass implementation class to support + different dynamic classes, with different sets of properties. +

+

+
Specified by:
getName in interface DynaClass
+
+
+ +
Returns:
the name of the DynaClass
+
+
+
+ +

+getDynaProperty

+
+public DynaProperty getDynaProperty(String name)
+
+
Return a property descriptor for the specified property, if it exists; + otherwise, return null. +

+

+
Specified by:
getDynaProperty in interface DynaClass
+
+
+
Parameters:
name - Name of the dynamic property for which a descriptor + is requested +
Returns:
The descriptor for the specified property +
Throws: +
IllegalArgumentException - if no property name is specified
+
+
+
+ +

+getDynaProperties

+
+public DynaProperty[] getDynaProperties()
+
+

Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass. If no properties are defined, a + zero-length array will be returned.

+ +

FIXME - Should we really be implementing + getBeanInfo() instead, which returns property descriptors + and a bunch of other stuff?

+

+

+
Specified by:
getDynaProperties in interface DynaClass
+
+
+ +
Returns:
the set of properties for this DynaClass
+
+
+
+ +

+newInstance

+
+public DynaBean newInstance()
+                     throws IllegalAccessException,
+                            InstantiationException
+
+

Instantiates a new standard JavaBean instance associated with + this DynaClass and return it wrapped in a new WrapDynaBean + instance. NOTE the JavaBean should have a + no argument constructor.

+ + NOTE - Most common use cases should not need to use + this method. It is usually better to create new + WrapDynaBean instances by calling its constructor. + For example:

+
+   Object javaBean = ...;
+   DynaBean wrapper = new WrapDynaBean(javaBean);
+ 
+

+ (This method is needed for some kinds of DynaBean framework.) +

+

+

+
Specified by:
newInstance in interface DynaClass
+
+
+ +
Returns:
A new DynaBean instance +
Throws: +
IllegalAccessException - if the Class or the appropriate + constructor is not accessible +
InstantiationException - if this Class represents an abstract + class, an array class, a primitive type, or void; or if instantiation + fails for some other reason
+
+
+
+ +

+getPropertyDescriptor

+
+public PropertyDescriptor getPropertyDescriptor(String name)
+
+
Return the PropertyDescriptor for the specified property name, if any; + otherwise return null. +

+

+
+
+
+
Parameters:
name - Name of the property to be retrieved +
Returns:
The descriptor for the specified property
+
+
+
+ +

+clear

+
+public static void clear()
+
+
Clear our cache of WrapDynaClass instances. +

+

+
+
+
+
+
+
+
+ +

+createDynaClass

+
+public static WrapDynaClass createDynaClass(Class beanClass)
+
+
Create (if necessary) and return a new WrapDynaClass + instance for the specified bean class. +

+

+
+
+
+
Parameters:
beanClass - Bean class for which a WrapDynaClass is requested +
Returns:
A new Wrap DynaClass
+
+
+
+ +

+introspect

+
+protected void introspect()
+
+
Introspect our bean class to identify the supported properties. +

+

+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaBean.html new file mode 100644 index 0000000..77fef13 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaBean.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BasicDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BasicDynaBean

+
+No usage of org.apache.commons.beanutils.BasicDynaBean +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaClass.html new file mode 100644 index 0000000..20f31b3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BasicDynaClass.html @@ -0,0 +1,185 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BasicDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BasicDynaClass

+
+ + + + + + + + + +
+Packages that use BasicDynaClass
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of BasicDynaClass in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subclasses of BasicDynaClass in org.apache.commons.beanutils
+ classLazyDynaClass + +
+          DynaClass which implements the MutableDynaClass interface.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanAccessLanguageException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanAccessLanguageException.html new file mode 100644 index 0000000..d6d8b4e --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanAccessLanguageException.html @@ -0,0 +1,186 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanAccessLanguageException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanAccessLanguageException

+
+ + + + + + + + + +
+Packages that use BeanAccessLanguageException
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of BeanAccessLanguageException in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subclasses of BeanAccessLanguageException in org.apache.commons.beanutils
+ classNestedNullException + +
+          Thrown to indicate that the Bean Access Language cannot execute query + against given bean since a nested bean referenced is null.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanComparator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanComparator.html new file mode 100644 index 0000000..fb77b34 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanComparator.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanComparator (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanComparator

+
+No usage of org.apache.commons.beanutils.BeanComparator +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.Entry.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.Entry.html new file mode 100644 index 0000000..781697b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.Entry.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanMap.Entry (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanMap.Entry

+
+No usage of org.apache.commons.beanutils.BeanMap.Entry +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.html new file mode 100644 index 0000000..9fb8f01 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanMap.html @@ -0,0 +1,202 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanMap (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanMap

+
+ + + + + + + + + +
+Packages that use BeanMap
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of BeanMap in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils with parameters of type BeanMap
+ voidBeanMap.putAllWriteable(BeanMap map) + +
+          Puts all of the writable properties from the given BeanMap into this + BeanMap.
+  +

+ + + + + + + + +
Constructors in org.apache.commons.beanutils with parameters of type BeanMap
BeanMap.Entry(BeanMap owner, + Object key, + Object value) + +
+          Constructs a new Entry.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPredicate.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPredicate.html new file mode 100644 index 0000000..20f30f5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPredicate.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanPredicate (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanPredicate

+
+No usage of org.apache.commons.beanutils.BeanPredicate +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueChangeClosure.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueChangeClosure.html new file mode 100644 index 0000000..c748393 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueChangeClosure.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanPropertyValueChangeClosure (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanPropertyValueChangeClosure

+
+No usage of org.apache.commons.beanutils.BeanPropertyValueChangeClosure +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueEqualsPredicate.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueEqualsPredicate.html new file mode 100644 index 0000000..6069989 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanPropertyValueEqualsPredicate.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate

+
+No usage of org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanToPropertyValueTransformer.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanToPropertyValueTransformer.html new file mode 100644 index 0000000..f3c24f4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanToPropertyValueTransformer.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanToPropertyValueTransformer (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanToPropertyValueTransformer

+
+No usage of org.apache.commons.beanutils.BeanToPropertyValueTransformer +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtils.html new file mode 100644 index 0000000..94978f1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtils.html @@ -0,0 +1,182 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanUtils

+
+ + + + + + + + + +
+Packages that use BeanUtils
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of BeanUtils in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Subclasses of BeanUtils in org.apache.commons.beanutils.locale
+ classLocaleBeanUtils + +
+          Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean.html new file mode 100644 index 0000000..6a9d8d5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean.html @@ -0,0 +1,249 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanUtilsBean

+
+ + + + + + + + + + + + + +
+Packages that use BeanUtilsBean
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of BeanUtilsBean in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subclasses of BeanUtilsBean in org.apache.commons.beanutils
+ classBeanUtilsBean2 + +
+          BeanUtilsBean implementation that creates a + ConvertUtilsBean2 and delegates conversion to + ConvertUtilsBean.convert(Object, Class).
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils that return BeanUtilsBean
+static BeanUtilsBeanBeanUtilsBean.getInstance() + +
+          Gets the instance which provides the functionality for BeanUtils.
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils with parameters of type BeanUtilsBean
+static voidBeanUtilsBean.setInstance(BeanUtilsBean newInstance) + +
+          Sets the instance which provides the functionality for BeanUtils.
+  +

+ + + + + +
+Uses of BeanUtilsBean in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Subclasses of BeanUtilsBean in org.apache.commons.beanutils.locale
+ classLocaleBeanUtilsBean + +
+          Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean2.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean2.html new file mode 100644 index 0000000..5a6e541 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/BeanUtilsBean2.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.BeanUtilsBean2 (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.BeanUtilsBean2

+
+No usage of org.apache.commons.beanutils.BeanUtilsBean2 +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConstructorUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConstructorUtils.html new file mode 100644 index 0000000..71c1d9c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConstructorUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ConstructorUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ConstructorUtils

+
+No usage of org.apache.commons.beanutils.ConstructorUtils +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ContextClassLoaderLocal.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ContextClassLoaderLocal.html new file mode 100644 index 0000000..d42c3be --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ContextClassLoaderLocal.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ContextClassLoaderLocal (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ContextClassLoaderLocal

+
+No usage of org.apache.commons.beanutils.ContextClassLoaderLocal +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConversionException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConversionException.html new file mode 100644 index 0000000..1d4c8bd --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConversionException.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ConversionException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ConversionException

+
+No usage of org.apache.commons.beanutils.ConversionException +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtils.html new file mode 100644 index 0000000..7be2323 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ConvertUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ConvertUtils

+
+No usage of org.apache.commons.beanutils.ConvertUtils +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean.html new file mode 100644 index 0000000..fa0087b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean.html @@ -0,0 +1,261 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ConvertUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ConvertUtilsBean

+
+ + + + + + + + + + + + + +
+Packages that use ConvertUtilsBean
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of ConvertUtilsBean in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subclasses of ConvertUtilsBean in org.apache.commons.beanutils
+ classConvertUtilsBean2 + +
+          ConvertUtilsBean implementation that delegates convert() + methods to the new convert(Object, Class) method.
+  +

+ + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return ConvertUtilsBean
+ ConvertUtilsBeanBeanUtilsBean.getConvertUtils() + +
+          Gets the ConvertUtilsBean instance used to perform the conversions.
+protected static ConvertUtilsBeanConvertUtilsBean.getInstance() + +
+          Get singleton instance
+  +

+ + + + + + + + + + + +
Constructors in org.apache.commons.beanutils with parameters of type ConvertUtilsBean
BeanUtilsBean(ConvertUtilsBean convertUtilsBean) + +
+          Constructs an instance using given conversion instances + and new PropertyUtilsBean instance.
BeanUtilsBean(ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Constructs an instance using given property and conversion instances.
+  +

+ + + + + +
+Uses of ConvertUtilsBean in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + +
Constructors in org.apache.commons.beanutils.locale with parameters of type ConvertUtilsBean
LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils, + ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Construct instance that uses given locale conversion
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean2.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean2.html new file mode 100644 index 0000000..516bf20 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertUtilsBean2.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ConvertUtilsBean2 (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ConvertUtilsBean2

+
+No usage of org.apache.commons.beanutils.ConvertUtilsBean2 +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/Converter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/Converter.html new file mode 100644 index 0000000..813ee88 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/Converter.html @@ -0,0 +1,858 @@ + + + + + + + +Uses of Interface org.apache.commons.beanutils.Converter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.beanutils.Converter

+
+ + + + + + + + + + + + + + + + + + + + + +
+Packages that use Converter
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of Converter in org.apache.commons.beanutils
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return Converter
+ ConverterConvertUtilsBean.lookup(Class clazz) + +
+          Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null.
+static ConverterConvertUtils.lookup(Class clazz) + +
+          Look up and return any registered Converter for the specified + destination class; if there is no registered Converter, return + null.
+ ConverterConvertUtilsBean.lookup(Class sourceType, + Class targetType) + +
+          Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null.
+static ConverterConvertUtils.lookup(Class sourceType, + Class targetType) + +
+          Look up and return any registered Converter for the specified + source and destination class; if there is no registered Converter, + return null.
+  +

+ + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils with parameters of type Converter
+ voidConvertUtilsBean.register(Converter converter, + Class clazz) + +
+          Register a custom Converter for the specified destination + Class, replacing any previously registered Converter.
+static voidConvertUtils.register(Converter converter, + Class clazz) + +
+          Register a custom Converter for the specified destination + Class, replacing any previously registered Converter.
+  +

+ + + + + +
+Uses of Converter in org.apache.commons.beanutils.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes in org.apache.commons.beanutils.converters that implement Converter
+ classAbstractArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classAbstractConverter + +
+          Base Converter implementation that provides the structure + for handling conversion to and from a specified type.
+ classArrayConverter + +
+          Generic Converter implementaion that handles conversion + to and from array objects.
+ classBigDecimalConverter + +
+          NumberConverter implementation that handles conversion to + and from java.math.BigDecimal objects.
+ classBigIntegerConverter + +
+          NumberConverter implementation that handles conversion to + and from java.math.BigInteger objects.
+ classBooleanArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classBooleanConverter + +
+          Converter implementaion that handles conversion + to and from Boolean objects.
+ classByteArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classByteConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Byte objects.
+ classCalendarConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.util.Calendar objects.
+ classCharacterArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classCharacterConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Character objects.
+ classClassConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Class objects.
+ classConverterFacade + +
+          Provides a facade for Converter implementations + preventing access to any public API in the implementation, + other than that specified by Converter.
+ classDateConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.util.Date objects.
+ classDateTimeConverter + +
+          Converter implementaion + that handles conversion to and from date/time objects.
+ classDoubleArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classDoubleConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Double objects.
+ classFileConverter + +
+          Converter implementaion that handles conversion + to and from java.io.File objects.
+ classFloatArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classFloatConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Float objects.
+ classIntegerArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classIntegerConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Integer objects.
+ classLongArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classLongConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Long objects.
+ classNumberConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Number objects.
+ classShortArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classShortConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Short objects.
+ classSqlDateConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Date objects.
+ classSqlTimeConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Time objects.
+ classSqlTimestampConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Timestamp objects.
+ classStringArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classStringConverter + +
+          Converter + implementation that converts an incoming + object into a java.lang.String object.
+ classURLConverter + +
+          Converter implementaion that handles conversion + to and from java.net.URL objects.
+  +

+ + + + + + + + + + + + + + +
Constructors in org.apache.commons.beanutils.converters with parameters of type Converter
ArrayConverter(Class defaultType, + Converter elementConverter) + +
+          Construct an array Converter with the specified + component Converter that throws a + ConversionException if an error occurs.
ArrayConverter(Class defaultType, + Converter elementConverter, + int defaultSize) + +
+          Construct an array Converter with the specified + component Converter that returns a default + array of the specified size (or null) if an error occurs.
ConverterFacade(Converter converter) + +
+          Construct a converter which delegates to the specified + Converter implementation.
+  +

+ + + + + +
+Uses of Converter in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Subinterfaces of Converter in org.apache.commons.beanutils.locale
+ interfaceLocaleConverter + +
+          General purpose locale-sensitive data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
+  +

+ + + + + + + + + +
Classes in org.apache.commons.beanutils.locale that implement Converter
+ classBaseLocaleConverter + +
+          The base class for all standart type locale-sensitive converters.
+  +

+ + + + + +
+Uses of Converter in org.apache.commons.beanutils.locale.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes in org.apache.commons.beanutils.locale.converters that implement Converter
+ classBigDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classBigIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classByteLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDoubleLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classFloatLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classLongLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classShortLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimeLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimestampLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classStringLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive object into a java.lang.String object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertingWrapDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertingWrapDynaBean.html new file mode 100644 index 0000000..c34a08d --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ConvertingWrapDynaBean.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ConvertingWrapDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ConvertingWrapDynaBean

+
+No usage of org.apache.commons.beanutils.ConvertingWrapDynaBean +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBean.html new file mode 100644 index 0000000..aad667c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBean.html @@ -0,0 +1,324 @@ + + + + + + + +Uses of Interface org.apache.commons.beanutils.DynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.beanutils.DynaBean

+
+ + + + + + + + + +
+Packages that use DynaBean
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of DynaBean in org.apache.commons.beanutils
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes in org.apache.commons.beanutils that implement DynaBean
+ classBasicDynaBean + +
+          Minimal implementation of the DynaBean interface.
+ classConvertingWrapDynaBean + +
+          Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties, + though this implementation allows type conversion to occur when properties are set.
+ classLazyDynaBean + +
+          DynaBean which automatically adds properties to the DynaClass + and provides Lazy List and Lazy Map features.
+ classLazyDynaMap + +
+          Provides a light weight DynaBean facade to a Map + with lazy map/list processing.
+ classResultSetIterator + +
+          Implementation of java.util.Iterator returned by the + iterator() method of ResultSetDynaClass.
+ classWrapDynaBean + +
+          Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties.
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return DynaBean
+protected  DynaBeanRowSetDynaClass.createDynaBean() + +
+          Create and return a new DynaBean instance to be used for + representing a row in the underlying result set.
+ DynaBeanDynaBeanMapDecorator.getDynaBean() + +
+          Provide access to the underlying DynaBean + this Map decorates.
+ DynaBeanWrapDynaClass.newInstance() + +
+          Instantiates a new standard JavaBean instance associated with + this DynaClass and return it wrapped in a new WrapDynaBean + instance.
+ DynaBeanLazyDynaMap.newInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+ DynaBeanDynaClass.newInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+ DynaBeanBasicDynaClass.newInstance() + +
+          Instantiate and return a new DynaBean instance, associated + with this DynaClass.
+ DynaBean[]LazyDynaList.toDynaBeanArray() + +
+          Converts the List to an DynaBean Array.
+  +

+ + + + + + + + + + + +
Constructors in org.apache.commons.beanutils with parameters of type DynaBean
DynaBeanMapDecorator(DynaBean dynaBean) + +
+          Constructs a read only Map for the specified + DynaBean.
DynaBeanMapDecorator(DynaBean dynaBean, + boolean readOnly) + +
+          Construct a Map for the specified DynaBean.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBeanMapDecorator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBeanMapDecorator.html new file mode 100644 index 0000000..cc14e52 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaBeanMapDecorator.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.DynaBeanMapDecorator (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.DynaBeanMapDecorator

+
+No usage of org.apache.commons.beanutils.DynaBeanMapDecorator +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaClass.html new file mode 100644 index 0000000..00e8802 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaClass.html @@ -0,0 +1,368 @@ + + + + + + + +Uses of Interface org.apache.commons.beanutils.DynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.beanutils.DynaClass

+
+ + + + + + + + + +
+Packages that use DynaClass
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of DynaClass in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subinterfaces of DynaClass in org.apache.commons.beanutils
+ interfaceMutableDynaClass + +
+          A specialized extension to DynaClass that allows properties + to be added or removed dynamically.
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes in org.apache.commons.beanutils that implement DynaClass
+ classBasicDynaClass + +
+          Minimal implementation of the DynaClass interface.
+ classLazyDynaClass + +
+          DynaClass which implements the MutableDynaClass interface.
+ classLazyDynaMap + +
+          Provides a light weight DynaBean facade to a Map + with lazy map/list processing.
+ classResultSetDynaClass + +
+          Implementation of DynaClass for DynaBeans that wrap the + java.sql.Row objects of a java.sql.ResultSet.
+ classRowSetDynaClass + +
+          Implementation of DynaClass that creates an in-memory collection + of DynaBeans representing the results of an SQL query.
+ classWrapDynaClass + +
+          Implementation of DynaClass for DynaBeans that wrap + standard JavaBean instances.
+  +

+ + + + + + + + + +
Fields in org.apache.commons.beanutils declared as DynaClass
+protected  DynaClassBasicDynaBean.dynaClass + +
+          The DynaClass "base class" that this DynaBean + is associated with.
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return DynaClass
+ DynaClassWrapDynaBean.getDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ DynaClassResultSetIterator.getDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ DynaClassLazyDynaBean.getDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ DynaClassDynaBean.getDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+ DynaClassBasicDynaBean.getDynaClass() + +
+          Return the DynaClass instance that describes the set of + properties available for this DynaBean.
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils with parameters of type DynaClass
+ voidLazyDynaList.setElementDynaClass(DynaClass elementDynaClass) + +
+          Set the element Type and DynaClass.
+  +

+ + + + + + + + + + + + + + + + + +
Constructors in org.apache.commons.beanutils with parameters of type DynaClass
BasicDynaBean(DynaClass dynaClass) + +
+          Construct a new DynaBean associated with the specified + DynaClass instance.
LazyDynaBean(DynaClass dynaClass) + +
+          Construct a new DynaBean associated with the specified + DynaClass instance - if its not a MutableDynaClass + then a new LazyDynaClass is created and the properties copied.
LazyDynaList(DynaClass elementDynaClass) + +
+          Construct a LazyDynaList with a + specified DynaClass for its elements.
LazyDynaMap(DynaClass dynaClass) + +
+          Construct a new LazyDynaMap based on an exisiting DynaClass
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaProperty.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaProperty.html new file mode 100644 index 0000000..84513f4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/DynaProperty.html @@ -0,0 +1,372 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.DynaProperty (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.DynaProperty

+
+ + + + + + + + + +
+Packages that use DynaProperty
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of DynaProperty in org.apache.commons.beanutils
+  +

+ + + + + + + + + + + + + +
Fields in org.apache.commons.beanutils declared as DynaProperty
+protected  DynaProperty[]WrapDynaClass.properties + +
+          The set of dynamic properties that are part of this DynaClass.
+protected  DynaProperty[]BasicDynaClass.properties + +
+          The set of dynamic properties that are part of this DynaClass.
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return DynaProperty
+ DynaProperty[]WrapDynaClass.getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaProperty[]LazyDynaMap.getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaProperty[]DynaClass.getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaProperty[]BasicDynaClass.getDynaProperties() + +
+          Return an array of ProperyDescriptors for the properties + currently defined in this DynaClass.
+ DynaPropertyWrapDynaClass.getDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it exists; + otherwise, return null.
+protected  DynaPropertyWrapDynaBean.getDynaProperty(String name) + +
+          Return the property descriptor for the specified property name.
+ DynaPropertyLazyDynaMap.getDynaProperty(String name) + +
+          Return a property descriptor for the specified property.
+ DynaPropertyLazyDynaClass.getDynaProperty(String name) + +
+          Return a property descriptor for the specified property.
+ DynaPropertyDynaClass.getDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it exists; + otherwise, return null.
+ DynaPropertyBasicDynaClass.getDynaProperty(String name) + +
+          Return a property descriptor for the specified property, if it exists; + otherwise, return null.
+protected  DynaPropertyBasicDynaBean.getDynaProperty(String name) + +
+          Return the property descriptor for the specified property name.
+  +

+ + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils with parameters of type DynaProperty
+protected  voidLazyDynaMap.add(DynaProperty property) + +
+          Add a new dynamic property.
+protected  voidLazyDynaClass.add(DynaProperty property) + +
+          Add a new dynamic property.
+protected  voidBasicDynaClass.setProperties(DynaProperty[] properties) + +
+          Set the list of dynamic properties supported by this DynaClass.
+  +

+ + + + + + + + + + + + + + + + + + + + +
Constructors in org.apache.commons.beanutils with parameters of type DynaProperty
BasicDynaClass(String name, + Class dynaBeanClass, + DynaProperty[] properties) + +
+          Construct a new BasicDynaClass with the specified parameters.
LazyDynaClass(String name, + Class dynaBeanClass, + DynaProperty[] properties) + +
+          Construct a new LazyDynaClass with the specified name, DynaBean class and properties.
LazyDynaClass(String name, + DynaProperty[] properties) + +
+          Construct a new LazyDynaClass with the specified name and properties.
LazyDynaMap(DynaProperty[] properties) + +
+          Construct a new LazyDynaMap with the specified properties.
LazyDynaMap(String name, + DynaProperty[] properties) + +
+          Construct a new LazyDynaMap with the specified name and properties.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaBean.html new file mode 100644 index 0000000..f333453 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaBean.html @@ -0,0 +1,186 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.LazyDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.LazyDynaBean

+
+ + + + + + + + + +
+Packages that use LazyDynaBean
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of LazyDynaBean in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subclasses of LazyDynaBean in org.apache.commons.beanutils
+ classLazyDynaMap + +
+          Provides a light weight DynaBean facade to a Map + with lazy map/list processing.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaClass.html new file mode 100644 index 0000000..4fab5ef --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaClass.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.LazyDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.LazyDynaClass

+
+No usage of org.apache.commons.beanutils.LazyDynaClass +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaList.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaList.html new file mode 100644 index 0000000..b277855 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaList.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.LazyDynaList (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.LazyDynaList

+
+No usage of org.apache.commons.beanutils.LazyDynaList +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaMap.html new file mode 100644 index 0000000..9cd8a34 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/LazyDynaMap.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.LazyDynaMap (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.LazyDynaMap

+
+No usage of org.apache.commons.beanutils.LazyDynaMap +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MappedPropertyDescriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MappedPropertyDescriptor.html new file mode 100644 index 0000000..49100c5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MappedPropertyDescriptor.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.MappedPropertyDescriptor (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.MappedPropertyDescriptor

+
+No usage of org.apache.commons.beanutils.MappedPropertyDescriptor +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MethodUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MethodUtils.html new file mode 100644 index 0000000..f42b7e3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MethodUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.MethodUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.MethodUtils

+
+No usage of org.apache.commons.beanutils.MethodUtils +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MutableDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MutableDynaClass.html new file mode 100644 index 0000000..f85f07e --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/MutableDynaClass.html @@ -0,0 +1,211 @@ + + + + + + + +Uses of Interface org.apache.commons.beanutils.MutableDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.beanutils.MutableDynaClass

+
+ + + + + + + + + +
+Packages that use MutableDynaClass
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of MutableDynaClass in org.apache.commons.beanutils
+  +

+ + + + + + + + + + + + + +
Classes in org.apache.commons.beanutils that implement MutableDynaClass
+ classLazyDynaClass + +
+          DynaClass which implements the MutableDynaClass interface.
+ classLazyDynaMap + +
+          Provides a light weight DynaBean facade to a Map + with lazy map/list processing.
+  +

+ + + + + + + + + +
Fields in org.apache.commons.beanutils declared as MutableDynaClass
+protected  MutableDynaClassLazyDynaBean.dynaClass + +
+          The MutableDynaClass "base class" that this DynaBean + is associated with.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/NestedNullException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/NestedNullException.html new file mode 100644 index 0000000..f213065 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/NestedNullException.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.NestedNullException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.NestedNullException

+
+No usage of org.apache.commons.beanutils.NestedNullException +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtils.html new file mode 100644 index 0000000..5db0d06 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.PropertyUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.PropertyUtils

+
+No usage of org.apache.commons.beanutils.PropertyUtils +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtilsBean.html new file mode 100644 index 0000000..1eed5c1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/PropertyUtilsBean.html @@ -0,0 +1,237 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.PropertyUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.PropertyUtilsBean

+
+ + + + + + + + + + + + + +
+Packages that use PropertyUtilsBean
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of PropertyUtilsBean in org.apache.commons.beanutils
+  +

+ + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return PropertyUtilsBean
+protected static PropertyUtilsBeanPropertyUtilsBean.getInstance() + +
+          Return the PropertyUtils bean instance.
+ PropertyUtilsBeanBeanUtilsBean.getPropertyUtils() + +
+          Gets the PropertyUtilsBean instance used to access properties.
+  +

+ + + + + + + + +
Constructors in org.apache.commons.beanutils with parameters of type PropertyUtilsBean
BeanUtilsBean(ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Constructs an instance using given property and conversion instances.
+  +

+ + + + + +
+Uses of PropertyUtilsBean in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + +
Constructors in org.apache.commons.beanutils.locale with parameters of type PropertyUtilsBean
LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils, + ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Construct instance that uses given locale conversion
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetDynaClass.html new file mode 100644 index 0000000..615954e --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetDynaClass.html @@ -0,0 +1,185 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ResultSetDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ResultSetDynaClass

+
+ + + + + + + + + +
+Packages that use ResultSetDynaClass
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of ResultSetDynaClass in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Fields in org.apache.commons.beanutils declared as ResultSetDynaClass
+protected  ResultSetDynaClassResultSetIterator.dynaClass + +
+          The ResultSetDynaClass we are associated with.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetIterator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetIterator.html new file mode 100644 index 0000000..321f37b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/ResultSetIterator.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.ResultSetIterator (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.ResultSetIterator

+
+No usage of org.apache.commons.beanutils.ResultSetIterator +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/RowSetDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/RowSetDynaClass.html new file mode 100644 index 0000000..23e88e3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/RowSetDynaClass.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.RowSetDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.RowSetDynaClass

+
+No usage of org.apache.commons.beanutils.RowSetDynaClass +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaBean.html new file mode 100644 index 0000000..191aaeb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaBean.html @@ -0,0 +1,187 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.WrapDynaBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.WrapDynaBean

+
+ + + + + + + + + +
+Packages that use WrapDynaBean
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of WrapDynaBean in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Subclasses of WrapDynaBean in org.apache.commons.beanutils
+ classConvertingWrapDynaBean + +
+          Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties, + though this implementation allows type conversion to occur when properties are set.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaClass.html new file mode 100644 index 0000000..df19619 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/class-use/WrapDynaClass.html @@ -0,0 +1,203 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.WrapDynaClass (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.WrapDynaClass

+
+ + + + + + + + + +
+Packages that use WrapDynaClass
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
+  +

+ + + + + +
+Uses of WrapDynaClass in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Fields in org.apache.commons.beanutils declared as WrapDynaClass
+protected  WrapDynaClassWrapDynaBean.dynaClass + +
+          The DynaClass "base class" that this DynaBean + is associated with.
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils that return WrapDynaClass
+static WrapDynaClassWrapDynaClass.createDynaClass(Class beanClass) + +
+          Create (if necessary) and return a new WrapDynaClass + instance for the specified bean class.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractArrayConverter.html new file mode 100644 index 0000000..3c78922 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractArrayConverter.html @@ -0,0 +1,470 @@ + + + + + + + +AbstractArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class AbstractArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
Direct Known Subclasses:
BooleanArrayConverter, ByteArrayConverter, CharacterArrayConverter, DoubleArrayConverter, FloatArrayConverter, IntegerArrayConverter, LongArrayConverter, ShortArrayConverter, StringArrayConverter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public abstract class AbstractArrayConverter
extends Object
implements Converter
+ + +

+

Convenience base class for converters that translate the String + representation of an array into a corresponding array of primitives + object. This class encapsulates the functionality required to parse + the String into a list of String elements that can later be + individually converted to the appropriate primitive type.

+ +

The input syntax accepted by the parseElements() method + is designed to be compatible with the syntax used to initialize arrays + in a Java source program, except that only String literal values are + supported. For maximum flexibility, the surrounding '{' and '}' + characters are optional, and individual elements may be separated by + any combination of whitespace and comma characters.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  ObjectdefaultValue + +
+          Deprecated. The default value specified to our Constructor, if any.
+static ObjectNO_DEFAULT + +
+          Deprecated. This is a special reference that can be passed as the "default object" + to the constructor to indicate that no default is desired.
+protected static String[]strings + +
+          Deprecated. Model object for string arrays.
+protected  booleanuseDefault + +
+          Deprecated. Should we return the default value on conversion errors?
+  + + + + + + + + + + + + + +
+Constructor Summary
AbstractArrayConverter() + +
+          Deprecated. Create a Converter that will throw a ConversionException + if a conversion error occurs.
AbstractArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+abstract  Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+protected  ListparseElements(String svalue) + +
+          Deprecated. Parse an incoming String of the form similar to an array initializer + in the Java language into a List individual Strings + for each element, according to the following rules.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+NO_DEFAULT

+
+public static final Object NO_DEFAULT
+
+
Deprecated. 
This is a special reference that can be passed as the "default object" + to the constructor to indicate that no default is desired. Note that + the value 'null' cannot be used for this purpose, as the caller may + want a null to be returned as the default. +

+

+
Since:
+
1.8.0
+
+
+
+ +

+strings

+
+protected static String[] strings
+
+
Deprecated. 

Model object for string arrays.

+

+

+
+
+
+ +

+defaultValue

+
+protected Object defaultValue
+
+
Deprecated. 
The default value specified to our Constructor, if any. +

+

+
+
+
+ +

+useDefault

+
+protected boolean useDefault
+
+
Deprecated. 
Should we return the default value on conversion errors? +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+AbstractArrayConverter

+
+public AbstractArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw a ConversionException + if a conversion error occurs. +

+

+
+ +

+AbstractArrayConverter

+
+public AbstractArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
Since:
+
1.8.0
+
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public abstract Object convert(Class type,
+                               Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. This method must be implemented by a concrete + subclass. +

+

+
Specified by:
convert in interface Converter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+
+ +

+parseElements

+
+protected List parseElements(String svalue)
+
+
Deprecated. 

Parse an incoming String of the form similar to an array initializer + in the Java language into a List individual Strings + for each element, according to the following rules.

+
    +
  • The string is expected to be a comma-separated list of values.
  • +
  • The string may optionally have matching '{' and '}' delimiters + around the list.
  • +
  • Whitespace before and after each element is stripped.
  • +
  • Elements in the list may be delimited by single or double quotes. + Within a quoted elements, the normal Java escape sequences are valid.
  • +
+

+

+
+
+
+
Parameters:
svalue - String value to be parsed +
Returns:
The parsed list of String values +
Throws: +
ConversionException - if the syntax of svalue + is not syntactically valid +
NullPointerException - if svalue + is null
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractConverter.html new file mode 100644 index 0000000..aa823f6 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/AbstractConverter.html @@ -0,0 +1,628 @@ + + + + + + + +AbstractConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class AbstractConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
Direct Known Subclasses:
ArrayConverter, BooleanConverter, CharacterConverter, ClassConverter, DateTimeConverter, FileConverter, NumberConverter, StringConverter, URLConverter
+
+
+
+
public abstract class AbstractConverter
extends Object
implements Converter
+ + +

+Base Converter implementation that provides the structure + for handling conversion to and from a specified type. +

+ This implementation provides the basic structure for + converting to/from a specified type optionally using a default + value or throwing a ConversionException if a + conversion error occurs. +

+ Implementations should provide conversion to the specified + type and from the specified type to a String value + by implementing the following methods: +

    +
  • convertToString(value) - convert to a String + (default implementation uses the objects toString() + method).
  • +
  • convertToType(Class, value) - convert + to the specified type
  • +
+

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 640131 $ $Date: 2008-03-23 02:10:31 +0000 (Sun, 23 Mar 2008) $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
AbstractConverter() + +
+          Construct a Converter that throws a + ConversionException if an error occurs.
AbstractConverter(Object defaultValue) + +
+          Construct a Converter that returns a default + value if an error occurs.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Convert the input object into an output object of the + specified type.
+protected  ObjectconvertArray(Object value) + +
+          Return the first element from an Array (or Collection) + or the value unchanged if not an Array (or Collection).
+protected  StringconvertToString(Object value) + +
+          Convert the input object into a String.
+protected abstract  ObjectconvertToType(Class type, + Object value) + +
+          Convert the input object into an output object of the + specified type.
+protected  ObjectgetDefault(Class type) + +
+          Return the default value for conversions to the specified + type.
+protected abstract  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+protected  ObjecthandleError(Class type, + Object value, + Throwable cause) + +
+          Handle Conversion Errors.
+protected  ObjecthandleMissing(Class type) + +
+          Handle missing values.
+ booleanisUseDefault() + +
+          Indicates whether a default value will be returned or exception + thrown in the event of a conversion error.
+protected  voidsetDefaultValue(Object defaultValue) + +
+          Set the default value, converting as required.
+ StringtoString() + +
+          Provide a String representation of this converter.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AbstractConverter

+
+public AbstractConverter()
+
+
Construct a Converter that throws a + ConversionException if an error occurs. +

+

+
+ +

+AbstractConverter

+
+public AbstractConverter(Object defaultValue)
+
+
Construct a Converter that returns a default + value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+isUseDefault

+
+public boolean isUseDefault()
+
+
Indicates whether a default value will be returned or exception + thrown in the event of a conversion error. +

+

+
+
+
+ +
Returns:
true if a default value will be returned for + conversion errors or false if a ConversionException + will be thrown.
+
+
+
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Convert the input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
The converted value. +
Throws: +
ConversionException - if conversion cannot be performed + successfully and no default is specified.
+
+
+
+ +

+convertToString

+
+protected String convertToString(Object value)
+                          throws Throwable
+
+
Convert the input object into a String. +

+ N.B.This implementation simply uses the value's + toString() method and should be overriden if a + more sophisticated mechanism for conversion to a String + is required. +

+

+
+
+
+
Parameters:
value - The input value to be converted. +
Returns:
the converted String value. +
Throws: +
Throwable - if an error occurs converting to a String
+
+
+
+ +

+convertToType

+
+protected abstract Object convertToType(Class type,
+                                        Object value)
+                                 throws Throwable
+
+
Convert the input object into an output object of the + specified type. +

+ Typical implementations will provide a minimum of + String --> type conversion. +

+

+
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
+
+
+
+ +

+convertArray

+
+protected Object convertArray(Object value)
+
+
Return the first element from an Array (or Collection) + or the value unchanged if not an Array (or Collection). + + N.B. This needs to be overriden for array/Collection converters. +

+

+
+
+
+
Parameters:
value - The value to convert +
Returns:
The first element in an Array (or Collection) + or the value unchanged if not an Array (or Collection)
+
+
+
+ +

+handleError

+
+protected Object handleError(Class type,
+                             Object value,
+                             Throwable cause)
+
+
Handle Conversion Errors. +

+ If a default value has been specified then it is returned + otherwise a ConversionException is thrown. +

+

+
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted
cause - The exception thrown by the convert method +
Returns:
The default value. +
Throws: +
ConversionException - if no default value has been + specified for this Converter.
+
+
+
+ +

+handleMissing

+
+protected Object handleMissing(Class type)
+
+
Handle missing values. +

+ If a default value has been specified then it is returned + otherwise a ConversionException is thrown. +

+

+
+
+
+
Parameters:
type - Data type to which this value should be converted. +
Returns:
The default value. +
Throws: +
ConversionException - if no default value has been + specified for this Converter.
+
+
+
+ +

+setDefaultValue

+
+protected void setDefaultValue(Object defaultValue)
+
+
Set the default value, converting as required. +

+ If the default value is different from the type the + Converter handles, it will be converted + to the handled type. +

+

+
+
+
+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value. +
Throws: +
ConversionException - if an error occurs converting + the default value
+
+
+
+ +

+getDefaultType

+
+protected abstract Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
+
+
+ +
Returns:
The default type this Converter handles.
+
+
+
+ +

+getDefault

+
+protected Object getDefault(Class type)
+
+
Return the default value for conversions to the specified + type. +

+

+
+
+
+
Parameters:
type - Data type to which this value should be converted. +
Returns:
The default value for the specified type.
+
+
+
+ +

+toString

+
+public String toString()
+
+
Provide a String representation of this converter. +

+

+
Overrides:
toString in class Object
+
+
+ +
Returns:
A String representation of this converter
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ArrayConverter.html new file mode 100644 index 0000000..437ce0b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ArrayConverter.html @@ -0,0 +1,656 @@ + + + + + + + +ArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.ArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public class ArrayConverter
extends AbstractConverter
+ + +

+Generic Converter implementaion that handles conversion + to and from array objects. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ The main features of this implementation are: +

    +
  • Element Conversion - delegates to a Converter, + appropriate for the type, to convert individual elements + of the array. This leverages the power of existing converters + without having to replicate their functionality for converting + to the element type and removes the need to create a specifc + array type converters.
  • +
  • Arrays or Collections - can convert from either arrays or + Collections to an array, limited only by the capability + of the delegate Converter.
  • +
  • Delimited Lists - can Convert to and from a + delimited list in String format.
  • +
  • Conversion to String - converts an array to a + String in one of two ways: as a delimited list + or by converting the first element in the array to a String - this + is controlled by the setOnlyFirstToString(boolean) + parameter.
  • +
  • Multi Dimensional Arrays - its possible to convert a String + to a multi-dimensional arrays, by embedding ArrayConverter + within each other - see example below.
  • +
  • Default Value
  • +
      +
    • No Default - use the + ArrayConverter(Class, Converter) + constructor to create a converter which throws a + ConversionException if the value is missing or + invalid.
    • +
    • Default values - use the + ArrayConverter(Class, Converter, int) + constructor to create a converter which returns a default + value. The defaultSize parameter controls the + default value in the following way:
    • +
        +
      • defaultSize < 0 - default is null
      • +
      • defaultSize = 0 - default is an array of length zero
      • +
      • defaultSize > 0 - default is an array with a + length specified by defaultSize (N.B. elements + in the array will be null)
      • +
      +
    +
+ +

Parsing Delimited Lists

+ This implementation can convert a delimited list in String format + into an array of the appropriate type. By default, it uses a comma as the delimiter + but the following methods can be used to configure parsing: +
    +
  • setDelimiter(char) - allows the character used as + the delimiter to be configured [default is a comma].
  • +
  • setAllowedChars(char[]) - adds additional characters + (to the default alphabetic/numeric) to those considered to be + valid token characters. +
+ +

Multi Dimensional Arrays

+ It is possible to convert a String to mulit-dimensional arrays by using + ArrayConverter as the element Converter + within another ArrayConverter. +

+ For example, the following code demonstrates how to construct a Converter + to convert a delimited String into a two dimensional integer array: +

+

+    // Construct an Integer Converter
+    IntegerConverter integerConverter = new IntegerConverter();
+
+    // Construct an array Converter for an integer array (i.e. int[]) using
+    // an IntegerConverter as the element converter.
+    // N.B. Uses the default comma (i.e. ",") as the delimiter between individual numbers
+    ArrayConverter arrayConverter = new ArrayConverter(int[].class, integerConverter);
+
+    // Construct a "Matrix" Converter which converts arrays of integer arrays using
+    // the pre-ceeding ArrayConverter as the element Converter.
+    // N.B. Uses a semi-colon (i.e. ";") as the delimiter to separate the different sets of numbers.
+    //      Also the delimiter used by the first ArrayConverter needs to be added to the
+    //      "allowed characters" for this one.
+    ArrayConverter matrixConverter = new ArrayConverter(int[][].class, arrayConverter);
+    matrixConverter.setDelimiter(';');
+    matrixConverter.setAllowedChars(new char[] {','});
+
+    // Do the Conversion
+    String matrixString = "11,12,13 ; 21,22,23 ; 31,32,33 ; 41,42,43";
+    int[][] result = (int[][])matrixConverter.convert(int[][].class, matrixString);
+ 
+

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 640131 $ $Date: 2008-03-23 02:10:31 +0000 (Sun, 23 Mar 2008) $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
ArrayConverter(Class defaultType, + Converter elementConverter) + +
+          Construct an array Converter with the specified + component Converter that throws a + ConversionException if an error occurs.
ArrayConverter(Class defaultType, + Converter elementConverter, + int defaultSize) + +
+          Construct an array Converter with the specified + component Converter that returns a default + array of the specified size (or null) if an error occurs.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  ObjectconvertArray(Object value) + +
+          Returns the value unchanged.
+protected  CollectionconvertToCollection(Class type, + Object value) + +
+          Converts non-array values to a Collection prior + to being converted either to an array or a String.
+protected  StringconvertToString(Object value) + +
+          Handles conversion to a String.
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Handles conversion to an array of the specified type.
+protected  ObjectgetDefault(Class type) + +
+          Return the default value for conversions to the specified + type.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ voidsetAllowedChars(char[] allowedChars) + +
+          Set the allowed characters to be used for parsing a delimited String.
+ voidsetDelimiter(char delimiter) + +
+          Set the delimiter to be used for parsing a delimited String.
+ voidsetOnlyFirstToString(boolean onlyFirstToString) + +
+          Indicates whether converting to a String should create + a delimited list or just convert the first value.
+ StringtoString() + +
+          Provide a String representation of this array converter.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ArrayConverter

+
+public ArrayConverter(Class defaultType,
+                      Converter elementConverter)
+
+
Construct an array Converter with the specified + component Converter that throws a + ConversionException if an error occurs. +

+

+
Parameters:
defaultType - The default array type this + Converter handles
elementConverter - Converter used to convert + individual array elements.
+
+
+ +

+ArrayConverter

+
+public ArrayConverter(Class defaultType,
+                      Converter elementConverter,
+                      int defaultSize)
+
+
Construct an array Converter with the specified + component Converter that returns a default + array of the specified size (or null) if an error occurs. +

+

+
Parameters:
defaultType - The default array type this + Converter handles
elementConverter - Converter used to convert + individual array elements.
defaultSize - Specifies the size of the default array value or if less + than zero indicates that a null default value should be used.
+
+ + + + + + + + +
+Method Detail
+ +

+setDelimiter

+
+public void setDelimiter(char delimiter)
+
+
Set the delimiter to be used for parsing a delimited String. +

+

+
Parameters:
delimiter - The delimiter [default ',']
+
+
+
+ +

+setAllowedChars

+
+public void setAllowedChars(char[] allowedChars)
+
+
Set the allowed characters to be used for parsing a delimited String. +

+

+
Parameters:
allowedChars - Characters which are to be considered as part of + the tokens when parsing a delimited String [default is '.' and '-']
+
+
+
+ +

+setOnlyFirstToString

+
+public void setOnlyFirstToString(boolean onlyFirstToString)
+
+
Indicates whether converting to a String should create + a delimited list or just convert the first value. +

+

+
Parameters:
onlyFirstToString - true converts only + the first value in the array to a String, false + converts all values in the array into a delimited list (default + is true
+
+
+
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
+
+
+
+ +

+convertToString

+
+protected String convertToString(Object value)
+                          throws Throwable
+
+
Handles conversion to a String. +

+

+
Overrides:
convertToString in class AbstractConverter
+
+
+
Parameters:
value - The value to be converted. +
Returns:
the converted String value. +
Throws: +
Throwable - if an error occurs converting to a String
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Throwable
+
+
Handles conversion to an array of the specified type. +

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - The type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
+
+
+
+ +

+convertArray

+
+protected Object convertArray(Object value)
+
+
Returns the value unchanged. +

+

+
Overrides:
convertArray in class AbstractConverter
+
+
+
Parameters:
value - The value to convert +
Returns:
The value unchanged
+
+
+
+ +

+convertToCollection

+
+protected Collection convertToCollection(Class type,
+                                         Object value)
+
+
Converts non-array values to a Collection prior + to being converted either to an array or a String. +

+
    +
  • Collection values are returned unchanged
  • +
  • Number, Boolean and Date + values returned as a the only element in a List.
  • +
  • All other types are converted to a String and parsed + as a delimited list.
  • +
+ + N.B. The method is called by both the + convertToType(Class, Object) and + convertToString(Object) methods for + non-array types. +

+

+
Parameters:
type - The type to convert the value to
value - value to be converted +
Returns:
Collection elements.
+
+
+
+ +

+getDefault

+
+protected Object getDefault(Class type)
+
+
Return the default value for conversions to the specified + type. +

+

+
Overrides:
getDefault in class AbstractConverter
+
+
+
Parameters:
type - Data type to which this value should be converted. +
Returns:
The default value for the specified type.
+
+
+
+ +

+toString

+
+public String toString()
+
+
Provide a String representation of this array converter. +

+

+
Overrides:
toString in class AbstractConverter
+
+
+ +
Returns:
A String representation of this array converter
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigDecimalConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigDecimalConverter.html new file mode 100644 index 0000000..7891f20 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigDecimalConverter.html @@ -0,0 +1,331 @@ + + + + + + + +BigDecimalConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class BigDecimalConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.BigDecimalConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class BigDecimalConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.math.BigDecimal objects. +

+ This implementation can be configured to handle conversion either + by using BigDecimal's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
BigDecimalConverter() + +
+          Construct a java.math.BigDecimal Converter that throws + a ConversionException if an error occurs.
BigDecimalConverter(Object defaultValue) + +
+          Construct a java.math.BigDecimal Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BigDecimalConverter

+
+public BigDecimalConverter()
+
+
Construct a java.math.BigDecimal Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+BigDecimalConverter

+
+public BigDecimalConverter(Object defaultValue)
+
+
Construct a java.math.BigDecimal Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigIntegerConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigIntegerConverter.html new file mode 100644 index 0000000..8433afb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BigIntegerConverter.html @@ -0,0 +1,331 @@ + + + + + + + +BigIntegerConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class BigIntegerConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.BigIntegerConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class BigIntegerConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.math.BigInteger objects. +

+ This implementation can be configured to handle conversion either + by using BigInteger's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
BigIntegerConverter() + +
+          Construct a java.math.BigInteger Converter that throws + a ConversionException if an error occurs.
BigIntegerConverter(Object defaultValue) + +
+          Construct a java.math.BigInteger Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BigIntegerConverter

+
+public BigIntegerConverter()
+
+
Construct a java.math.BigInteger Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+BigIntegerConverter

+
+public BigIntegerConverter(Object defaultValue)
+
+
Construct a java.math.BigInteger Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanArrayConverter.html new file mode 100644 index 0000000..9fd6515 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanArrayConverter.html @@ -0,0 +1,468 @@ + + + + + + + +BooleanArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class BooleanArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.BooleanArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class BooleanArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of boolean. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+ +

By default, the values to be converted are expected to be those + recognised by a default instance of BooleanConverter. A customised + BooleanConverter can be provided in order to recognise alternative values + as true/false.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+protected  BooleanConverterbooleanConverter + +
+          Deprecated. This object is used to perform the conversion of individual strings + into Boolean/boolean values.
+static ClassMODEL + +
+          Deprecated. Type which this class converts its input to.
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
BooleanArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
BooleanArrayConverter(BooleanConverter converter, + Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
BooleanArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of type + array-of-boolean.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+MODEL

+
+public static final Class MODEL
+
+
Deprecated. 
Type which this class converts its input to. This value can be + used as a parameter to the ConvertUtils.register method. +

+

+
Since:
+
1.8.0
+
+
+
+ +

+booleanConverter

+
+protected final BooleanConverter booleanConverter
+
+
Deprecated. 
This object is used to perform the conversion of individual strings + into Boolean/boolean values. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+BooleanArrayConverter

+
+public BooleanArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. + +

Conversion of strings to boolean values will be done via a default + instance of class BooleanConverter.

+

+

+
+ +

+BooleanArrayConverter

+
+public BooleanArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. + +

Conversion of strings to boolean values will be done via a default + instance of class BooleanConverter.

+

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+BooleanArrayConverter

+
+public BooleanArrayConverter(BooleanConverter converter,
+                             Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. + +

Conversion of strings to boolean values will be done via the + specified converter.

+

+

+
Parameters:
converter - is the converter object that will be used to + convert each input string-value into a boolean.
defaultValue - is the default value to be returned by method + convert if conversion fails; null is a valid default value. See the + documentation for method "convert" for more information. + The value BooleanArrayConverter.NO_DEFAULT may be passed here to + specify that an exception should be thrown on conversion failure.
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of type + array-of-boolean. + +

If the input value is null, then the default value specified in the + constructor is returned. If no such value was provided, then a + ConversionException is thrown instead.

+ +

If the input value is of type String[] then the returned array shall + be of the same size as this array, with a true or false value in each + array element depending on the result of applying method + BooleanConverter.convert to each string.

+ +

For all other types of value, the object's toString method is + expected to return a string containing a comma-separated list of + values, eg "true, false, true". See the documentation for + AbstractArrayConverter.parseElements(java.lang.String) for more information on + the exact formats supported.

+ +

If the result of value.toString() cannot be split into separate + words, then the default value is also returned (or an exception thrown). +

+ +

If any of the elements in the value array (or the elements resulting + from splitting up value.toString) are not recognised by the + BooleanConverter associated with this object, then what happens depends + on whether that BooleanConverter has a default value or not: if it does, + then that unrecognised element is converted into the BooleanConverter's + default value. If the BooleanConverter does not have a default + value, then the default value for this object is returned as the + complete conversion result (not just for the element), or an + exception is thrown if this object has no default value defined.

+

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - is the type to which this value should be converted. In the + case of this BooleanArrayConverter class, this value is ignored.
value - is the input value to be converted. +
Returns:
an object of type boolean[], or the default value if there was + any sort of error during conversion and the constructor + was provided with a default value. +
Throws: +
ConversionException - if conversion cannot be performed + successfully and the constructor was not provided with a default + value to return on conversion failure. +
NullPointerException - if value is an array, and any of the + array elements are null.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanConverter.html new file mode 100644 index 0000000..f0b486b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/BooleanConverter.html @@ -0,0 +1,498 @@ + + + + + + + +BooleanConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class BooleanConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.BooleanConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class BooleanConverter
extends AbstractConverter
+ + +

+Converter implementaion that handles conversion + to and from Boolean objects. + Converter implementaion that + handles conversion to and from java.lang.Boolean objects. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ By default any object whose string representation is one of the values + {"yes", "y", "true", "on", "1"} is converted to Boolean.TRUE, and + string representations {"no", "n", "false", "off", "0"} are converted + to Boolean.FALSE. The recognised true/false strings can be changed by: +

+  String[] trueStrings = {"oui", "o", "1"};
+  String[] falseStrings = {"non", "n", "0"};
+  Converter bc = new BooleanConverter(trueStrings, falseStrings);
+  ConvertUtils.register(bc, Boolean.class);
+  ConvertUtils.register(bc, Boolean.TYPE);
+ 
+ In addition, it is recommended that the BooleanArrayConverter also be + modified to recognise the same set of values: +
+   Converter bac = new BooleanArrayConverter(bc, BooleanArrayConverter.NO_DEFAULT);
+   ConvertUtils.register(bac, bac.MODEL);
+ 
+

+ +

Case is ignored when converting values to true or false.

+

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 801644 $ $Date: 2009-08-06 14:38:56 +0100 (Thu, 06 Aug 2009) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+static ObjectNO_DEFAULT + +
+          Deprecated. Use constructors without default value.
+  + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
BooleanConverter() + +
+          Create a Converter that will throw a ConversionException + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings.
BooleanConverter(Object defaultValue) + +
+          Create a Converter that will return the specified default value + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings.
BooleanConverter(String[] trueStrings, + String[] falseStrings) + +
+          Create a Converter that will throw a ConversionException + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings.
BooleanConverter(String[] trueStrings, + String[] falseStrings, + Object defaultValue) + +
+          Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Convert the specified input object into an output object of the + specified type.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, convertToString, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+NO_DEFAULT

+
+public static final Object NO_DEFAULT
+
+
Deprecated. Use constructors without default value.
This is a special reference that can be passed as the "default object" + to the constructor to indicate that no default is desired. Note that + the value 'null' cannot be used for this purpose, as the caller may + want a null to be returned as the default. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+BooleanConverter

+
+public BooleanConverter()
+
+
Create a Converter that will throw a ConversionException + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings. +

+

+
+ +

+BooleanConverter

+
+public BooleanConverter(Object defaultValue)
+
+
Create a Converter that will return the specified default value + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings. +

+

+
Parameters:
defaultValue - The default value to be returned if the value + being converted is not recognised. This value may be null, in which + case null will be returned on conversion failure. When non-null, it is + expected that this value will be either Boolean.TRUE or Boolean.FALSE. + The special value BooleanConverter.NO_DEFAULT can also be passed here, + in which case this constructor acts like the no-argument one.
+
+
+ +

+BooleanConverter

+
+public BooleanConverter(String[] trueStrings,
+                        String[] falseStrings)
+
+
Create a Converter that will throw a ConversionException + if a conversion error occurs, ie the string value being converted is + not one of the known true strings, nor one of the known false strings. +

+ The provided string arrays are copied, so that changes to the elements + of the array after this call is made do not affect this object. +

+

+
Parameters:
trueStrings - is the set of strings which should convert to the + value Boolean.TRUE. The value null must not be present. Case is + ignored.
falseStrings - is the set of strings which should convert to the + value Boolean.TRUE. The value null must not be present. Case is + ignored.
Since:
+
1.8.0
+
+
+
+ +

+BooleanConverter

+
+public BooleanConverter(String[] trueStrings,
+                        String[] falseStrings,
+                        Object defaultValue)
+
+
Create a Converter that will return + the specified default value if a conversion error occurs. +

+ The provided string arrays are copied, so that changes to the elements + of the array after this call is made do not affect this object. +

+

+
Parameters:
trueStrings - is the set of strings which should convert to the + value Boolean.TRUE. The value null must not be present. Case is + ignored.
falseStrings - is the set of strings which should convert to the + value Boolean.TRUE. The value null must not be present. Case is + ignored.
defaultValue - The default value to be returned if the value + being converted is not recognised. This value may be null, in which + case null will be returned on conversion failure. When non-null, it is + expected that this value will be either Boolean.TRUE or Boolean.FALSE. + The special value BooleanConverter.NO_DEFAULT can also be passed here, + in which case an exception will be thrown on conversion failure.
Since:
+
1.8.0
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Throwable
+
+
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - is the type to which this value should be converted. In the + case of this BooleanConverter class, this value is ignored.
value - is the input value to be converted. The toString method + shall be invoked on this object, and the result compared (ignoring + case) against the known "true" and "false" string values. +
Returns:
Boolean.TRUE if the value was a recognised "true" value, + Boolean.FALSE if the value was a recognised "false" value, or + the default value if the value was not recognised and the constructor + was provided with a default value. +
Throws: +
Throwable - if an error occurs converting to the specified type
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteArrayConverter.html new file mode 100644 index 0000000..0635eff --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +ByteArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ByteArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.ByteArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class ByteArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of byte. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
ByteArrayConverter() + +
+          Deprecated. Create a Converter that will + throw a ConversionException if a conversion error occurs.
ByteArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ByteArrayConverter

+
+public ByteArrayConverter()
+
+
Deprecated. 
Create a Converter that will + throw a ConversionException if a conversion error occurs. +

+

+
+ +

+ByteArrayConverter

+
+public ByteArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteConverter.html new file mode 100644 index 0000000..6ed7cba --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ByteConverter.html @@ -0,0 +1,331 @@ + + + + + + + +ByteConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ByteConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.ByteConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class ByteConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.lang.Byte objects. +

+ This implementation can be configured to handle conversion either + by using Byte's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
ByteConverter() + +
+          Construct a java.lang.Byte Converter that throws + a ConversionException if an error occurs.
ByteConverter(Object defaultValue) + +
+          Construct a java.lang.Byte Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ByteConverter

+
+public ByteConverter()
+
+
Construct a java.lang.Byte Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+ByteConverter

+
+public ByteConverter(Object defaultValue)
+
+
Construct a java.lang.Byte Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CalendarConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CalendarConverter.html new file mode 100644 index 0000000..fc697cd --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CalendarConverter.html @@ -0,0 +1,327 @@ + + + + + + + +CalendarConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class CalendarConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.DateTimeConverter
+          extended by org.apache.commons.beanutils.converters.CalendarConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class CalendarConverter
extends DateTimeConverter
+ + +

+DateTimeConverter implementation that handles conversion to + and from java.util.Calendar objects. +

+ This implementation can be configured to handle conversion either + by using a Locale's default format or by specifying a set of format + patterns (note, there is no default String conversion for Calendar). + See the DateTimeConverter documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 640131 $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
CalendarConverter() + +
+          Construct a java.util.Calendar Converter that throws + a ConversionException if an error occurs.
CalendarConverter(Object defaultValue) + +
+          Construct a java.util.Calendar Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.DateTimeConverter
convertToString, convertToType, getFormat, getLocale, getPatterns, getTimeZone, setLocale, setPattern, setPatterns, setTimeZone, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+CalendarConverter

+
+public CalendarConverter()
+
+
Construct a java.util.Calendar Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+CalendarConverter

+
+public CalendarConverter(Object defaultValue)
+
+
Construct a java.util.Calendar Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterArrayConverter.html new file mode 100644 index 0000000..74bb40a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +CharacterArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class CharacterArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.CharacterArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class CharacterArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of char. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
CharacterArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
CharacterArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+CharacterArrayConverter

+
+public CharacterArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+CharacterArrayConverter

+
+public CharacterArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterConverter.html new file mode 100644 index 0000000..0aa170b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/CharacterConverter.html @@ -0,0 +1,375 @@ + + + + + + + +CharacterConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class CharacterConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.CharacterConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class CharacterConverter
extends AbstractConverter
+ + +

+Converter implementaion that handles conversion + to and from java.lang.Character objects. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
CharacterConverter() + +
+          Construct a java.lang.Character Converter that throws + a ConversionException if an error occurs.
CharacterConverter(Object defaultValue) + +
+          Construct a java.lang.Character Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  StringconvertToString(Object value) + +
+          Convert a java.lang.Class or object into a String.
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Convert the input object into a java.lang.Character.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+CharacterConverter

+
+public CharacterConverter()
+
+
Construct a java.lang.Character Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+CharacterConverter

+
+public CharacterConverter(Object defaultValue)
+
+
Construct a java.lang.Character Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToString

+
+protected String convertToString(Object value)
+
+

Convert a java.lang.Class or object into a String.

+

+

+
Overrides:
convertToString in class AbstractConverter
+
+
+
Parameters:
value - The input value to be converted +
Returns:
the converted String value.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Exception
+
+

Convert the input object into a java.lang.Character.

+

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Exception - if conversion cannot be performed successfully
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ClassConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ClassConverter.html new file mode 100644 index 0000000..3f912ed --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ClassConverter.html @@ -0,0 +1,379 @@ + + + + + + + +ClassConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ClassConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.ClassConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class ClassConverter
extends AbstractConverter
+ + +

+Converter implementaion that handles conversion + to and from java.lang.Class objects. +

+ The class will be loaded from the thread context class + loader (if it exists); otherwise the class loader that loaded this class + will be used. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Tomas Viberg
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
ClassConverter() + +
+          Construct a java.lang.Class Converter that throws + a ConversionException if an error occurs.
ClassConverter(Object defaultValue) + +
+          Construct a java.lang.Class Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  StringconvertToString(Object value) + +
+          Convert a java.lang.Class or object into a String.
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Convert the input object into a java.lang.Class.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ClassConverter

+
+public ClassConverter()
+
+
Construct a java.lang.Class Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+ClassConverter

+
+public ClassConverter(Object defaultValue)
+
+
Construct a java.lang.Class Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToString

+
+protected String convertToString(Object value)
+
+

Convert a java.lang.Class or object into a String.

+

+

+
Overrides:
convertToString in class AbstractConverter
+
+
+
Parameters:
value - The input value to be converted +
Returns:
the converted String value.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Throwable
+
+

Convert the input object into a java.lang.Class.

+

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ConverterFacade.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ConverterFacade.html new file mode 100644 index 0000000..95f6a0a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ConverterFacade.html @@ -0,0 +1,318 @@ + + + + + + + +ConverterFacade (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ConverterFacade

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.ConverterFacade
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class ConverterFacade
extends Object
implements Converter
+ + +

+Provides a facade for Converter implementations + preventing access to any public API in the implementation, + other than that specified by Converter. +

+ This implementation can be used to prevent registered Converter + implementations that provide configuration options from being + retrieved and modified. +

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 552084 $ $Date: 2007-06-30 04:04:13 +0100 (Sat, 30 Jun 2007) $
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ConverterFacade(Converter converter) + +
+          Construct a converter which delegates to the specified + Converter implementation.
+  + + + + + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Convert the input object into an output object of the + specified type by delegating to the underlying Converter + implementation.
+ StringtoString() + +
+          Provide a String representation of this facade implementation + sand the underlying Converter it delegates to.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ConverterFacade

+
+public ConverterFacade(Converter converter)
+
+
Construct a converter which delegates to the specified + Converter implementation. +

+

+
Parameters:
converter - The converter to delegate to
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Convert the input object into an output object of the + specified type by delegating to the underlying Converter + implementation. +

+

+
Specified by:
convert in interface Converter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
The converted value.
+
+
+
+ +

+toString

+
+public String toString()
+
+
Provide a String representation of this facade implementation + sand the underlying Converter it delegates to. +

+

+
Overrides:
toString in class Object
+
+
+ +
Returns:
A String representation of this facade implementation + sand the underlying Converter it delegates to
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateConverter.html new file mode 100644 index 0000000..01327ed --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateConverter.html @@ -0,0 +1,327 @@ + + + + + + + +DateConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class DateConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.DateTimeConverter
+          extended by org.apache.commons.beanutils.converters.DateConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class DateConverter
extends DateTimeConverter
+ + +

+DateTimeConverter implementation that handles conversion to + and from java.util.Date objects. +

+ This implementation can be configured to handle conversion either + by using a Locale's default format or by specifying a set of format + patterns (note, there is no default String conversion for Date). + See the DateTimeConverter documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 640131 $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
DateConverter() + +
+          Construct a java.util.Date Converter that throws + a ConversionException if an error occurs.
DateConverter(Object defaultValue) + +
+          Construct a java.util.Date Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.DateTimeConverter
convertToString, convertToType, getFormat, getLocale, getPatterns, getTimeZone, setLocale, setPattern, setPatterns, setTimeZone, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DateConverter

+
+public DateConverter()
+
+
Construct a java.util.Date Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+DateConverter

+
+public DateConverter(Object defaultValue)
+
+
Construct a java.util.Date Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateTimeConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateTimeConverter.html new file mode 100644 index 0000000..d6308b5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DateTimeConverter.html @@ -0,0 +1,650 @@ + + + + + + + +DateTimeConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class DateTimeConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.DateTimeConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
Direct Known Subclasses:
CalendarConverter, DateConverter, SqlDateConverter, SqlTimeConverter, SqlTimestampConverter
+
+
+
+
public abstract class DateTimeConverter
extends AbstractConverter
+ + +

+Converter implementaion + that handles conversion to and from date/time objects. +

+ This implementation handles conversion for the following + date/time types. +

    +
  • java.util.Date
  • +
  • java.util.Calendar
  • +
  • java.sql.Date
  • +
  • java.sql.Time
  • +
  • java.sql.Timestamp
  • +
+ +

String Conversions (to and from)

+ This class provides a number of ways in which date/time + conversions to/from Strings can be achieved: +
    +
  • Using the SHORT date format for the default Locale, configure using:
  • +
      +
    • setUseLocaleFormat(true)
    • +
    +
  • Using the SHORT date format for a specified Locale, configure using:
  • +
      +
    • setLocale(Locale)
    • +
    +
  • Using the specified date pattern(s) for the default Locale, configure using:
  • +
      +
    • Either setPattern(String) or + setPatterns(String[])
    • +
    +
  • Using the specified date pattern(s) for a specified Locale, configure using:
  • +
      +
    • setPattern(String) or + setPatterns(String[]) and...
    • +
    • setLocale(Locale)
    • +
    +
  • If none of the above are configured the + toDate(String) method is used to convert + from String to Date and the Dates's + toString() method used to convert from + Date to String.
  • +
+ +

+ The Time Zone to use with the date format can be specified + using the setTimeZone() method. +

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 640131 $ $Date: 2008-03-23 02:10:31 +0000 (Sun, 23 Mar 2008) $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
DateTimeConverter() + +
+          Construct a Date/Time Converter that throws a + ConversionException if an error occurs.
DateTimeConverter(Object defaultValue) + +
+          Construct a Date/Time Converter that returns a default + value if an error occurs.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  StringconvertToString(Object value) + +
+          Convert an input Date/Calendar object into a String.
+protected  ObjectconvertToType(Class targetType, + Object value) + +
+          Convert the input object into a Date object of the + specified type.
+protected  DateFormatgetFormat(Locale locale, + TimeZone timeZone) + +
+          Return a DateFormat for the Locale.
+ LocalegetLocale() + +
+          Return the Locale for the Converter + (or null if none specified).
+ String[]getPatterns() + +
+          Return the date format patterns used to convert + dates to/from a java.lang.String + (or null if none specified).
+ TimeZonegetTimeZone() + +
+          Return the Time Zone to use when converting dates + (or null if none specified.
+ voidsetLocale(Locale locale) + +
+          Set the Locale for the Converter.
+ voidsetPattern(String pattern) + +
+          Set a date format pattern to use to convert + dates to/from a java.lang.String.
+ voidsetPatterns(String[] patterns) + +
+          Set the date format patterns to use to convert + dates to/from a java.lang.String.
+ voidsetTimeZone(TimeZone timeZone) + +
+          Set the Time Zone to use when converting dates.
+ voidsetUseLocaleFormat(boolean useLocaleFormat) + +
+          Indicate whether conversion should use a format/pattern or not.
+ StringtoString() + +
+          Provide a String representation of this date/time converter.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, getDefaultType, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DateTimeConverter

+
+public DateTimeConverter()
+
+
Construct a Date/Time Converter that throws a + ConversionException if an error occurs. +

+

+
+ +

+DateTimeConverter

+
+public DateTimeConverter(Object defaultValue)
+
+
Construct a Date/Time Converter that returns a default + value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+setUseLocaleFormat

+
+public void setUseLocaleFormat(boolean useLocaleFormat)
+
+
Indicate whether conversion should use a format/pattern or not. +

+

+
Parameters:
useLocaleFormat - true if the format + for the locale should be used, otherwise false
+
+
+
+ +

+getTimeZone

+
+public TimeZone getTimeZone()
+
+
Return the Time Zone to use when converting dates + (or null if none specified. +

+

+ +
Returns:
The Time Zone.
+
+
+
+ +

+setTimeZone

+
+public void setTimeZone(TimeZone timeZone)
+
+
Set the Time Zone to use when converting dates. +

+

+
Parameters:
timeZone - The Time Zone.
+
+
+
+ +

+getLocale

+
+public Locale getLocale()
+
+
Return the Locale for the Converter + (or null if none specified). +

+

+ +
Returns:
The locale to use for conversion
+
+
+
+ +

+setLocale

+
+public void setLocale(Locale locale)
+
+
Set the Locale for the Converter. +

+

+
Parameters:
locale - The Locale.
+
+
+
+ +

+setPattern

+
+public void setPattern(String pattern)
+
+
Set a date format pattern to use to convert + dates to/from a java.lang.String. +

+

+
Parameters:
pattern - The format pattern.
See Also:
SimpleDateFormat
+
+
+
+ +

+getPatterns

+
+public String[] getPatterns()
+
+
Return the date format patterns used to convert + dates to/from a java.lang.String + (or null if none specified). +

+

+ +
Returns:
Array of format patterns.
See Also:
SimpleDateFormat
+
+
+
+ +

+setPatterns

+
+public void setPatterns(String[] patterns)
+
+
Set the date format patterns to use to convert + dates to/from a java.lang.String. +

+

+
Parameters:
patterns - Array of format patterns.
See Also:
SimpleDateFormat
+
+
+
+ +

+convertToString

+
+protected String convertToString(Object value)
+                          throws Throwable
+
+
Convert an input Date/Calendar object into a String. +

+ N.B.If the converter has been configured to with + one or more patterns (using setPatterns()), then + the first pattern will be used to format the date into a String. + Otherwise the default DateFormat for the default locale + (and style if configured) will be used. +

+

+
Overrides:
convertToString in class AbstractConverter
+
+
+
Parameters:
value - The input value to be converted +
Returns:
the converted String value. +
Throws: +
Throwable - if an error occurs converting to a String
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class targetType,
+                               Object value)
+                        throws Exception
+
+
Convert the input object into a Date object of the + specified type. +

+ This method handles conversions between the following + types: +

    +
  • java.util.Date
  • +
  • java.util.Calendar
  • +
  • java.sql.Date
  • +
  • java.sql.Time
  • +
  • java.sql.Timestamp
  • +
+ + It also handles conversion from a String to + any of the above types. +

+ + For String conversion, if the converter has been configured + with one or more patterns (using setPatterns()), then + the conversion is attempted with each of the specified patterns. + Otherwise the default DateFormat for the default locale + (and style if configured) will be used. +

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
targetType - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Exception - if conversion cannot be performed successfully
+
+
+
+ +

+getFormat

+
+protected DateFormat getFormat(Locale locale,
+                               TimeZone timeZone)
+
+
Return a DateFormat for the Locale. +

+

+
Parameters:
locale - The Locale to create the Format with (may be null)
timeZone - The Time Zone create the Format with (may be null) +
Returns:
A Date Format.
+
+
+
+ +

+toString

+
+public String toString()
+
+
Provide a String representation of this date/time converter. +

+

+
Overrides:
toString in class AbstractConverter
+
+
+ +
Returns:
A String representation of this date/time converter
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleArrayConverter.html new file mode 100644 index 0000000..41d555a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +DoubleArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class DoubleArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.DoubleArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class DoubleArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of double. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
DoubleArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
DoubleArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DoubleArrayConverter

+
+public DoubleArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+DoubleArrayConverter

+
+public DoubleArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleConverter.html new file mode 100644 index 0000000..ad00f0f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/DoubleConverter.html @@ -0,0 +1,331 @@ + + + + + + + +DoubleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class DoubleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.DoubleConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class DoubleConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.lang.Double objects. +

+ This implementation can be configured to handle conversion either + by using Double's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
DoubleConverter() + +
+          Construct a java.lang.Double Converter that throws + a ConversionException if an error occurs.
DoubleConverter(Object defaultValue) + +
+          Construct a java.lang.Double Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DoubleConverter

+
+public DoubleConverter()
+
+
Construct a java.lang.Double Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+DoubleConverter

+
+public DoubleConverter(Object defaultValue)
+
+
Construct a java.lang.Double Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FileConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FileConverter.html new file mode 100644 index 0000000..7a38e6c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FileConverter.html @@ -0,0 +1,348 @@ + + + + + + + +FileConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class FileConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.FileConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class FileConverter
extends AbstractConverter
+ + +

+Converter implementaion that handles conversion + to and from java.io.File objects. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.6
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
James Strachan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
FileConverter() + +
+          Construct a java.io.File Converter that throws + a ConversionException if an error occurs.
FileConverter(Object defaultValue) + +
+          Construct a java.io.File Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Convert the input object into a java.io.File.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, convertToString, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+FileConverter

+
+public FileConverter()
+
+
Construct a java.io.File Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+FileConverter

+
+public FileConverter(Object defaultValue)
+
+
Construct a java.io.File Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Throwable
+
+

Convert the input object into a java.io.File.

+

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatArrayConverter.html new file mode 100644 index 0000000..6c60956 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +FloatArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class FloatArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.FloatArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class FloatArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of float. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
FloatArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
FloatArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+FloatArrayConverter

+
+public FloatArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+FloatArrayConverter

+
+public FloatArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatConverter.html new file mode 100644 index 0000000..c59c200 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/FloatConverter.html @@ -0,0 +1,331 @@ + + + + + + + +FloatConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class FloatConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.FloatConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class FloatConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.lang.Float objects. +

+ This implementation can be configured to handle conversion either + by using Float's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
FloatConverter() + +
+          Construct a java.lang.Float Converter that throws + a ConversionException if an error occurs.
FloatConverter(Object defaultValue) + +
+          Construct a java.lang.Float Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+FloatConverter

+
+public FloatConverter()
+
+
Construct a java.lang.Float Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+FloatConverter

+
+public FloatConverter(Object defaultValue)
+
+
Construct a java.lang.Float Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerArrayConverter.html new file mode 100644 index 0000000..e63dbeb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +IntegerArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class IntegerArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.IntegerArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class IntegerArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of int. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
IntegerArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
IntegerArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+IntegerArrayConverter

+
+public IntegerArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+IntegerArrayConverter

+
+public IntegerArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerConverter.html new file mode 100644 index 0000000..ac30988 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/IntegerConverter.html @@ -0,0 +1,331 @@ + + + + + + + +IntegerConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class IntegerConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.IntegerConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class IntegerConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.lang.Integer objects. +

+ This implementation can be configured to handle conversion either + by using Integer's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
IntegerConverter() + +
+          Construct a java.lang.Integer Converter that throws + a ConversionException if an error occurs.
IntegerConverter(Object defaultValue) + +
+          Construct a java.lang.Integer Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+IntegerConverter

+
+public IntegerConverter()
+
+
Construct a java.lang.Integer Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+IntegerConverter

+
+public IntegerConverter(Object defaultValue)
+
+
Construct a java.lang.Integer Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongArrayConverter.html new file mode 100644 index 0000000..8610dac --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +LongArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class LongArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.LongArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class LongArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of long. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
LongArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
LongArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LongArrayConverter

+
+public LongArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+LongArrayConverter

+
+public LongArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongConverter.html new file mode 100644 index 0000000..b3b1ec9 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/LongConverter.html @@ -0,0 +1,331 @@ + + + + + + + +LongConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class LongConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.LongConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class LongConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.lang.Long objects. +

+ This implementation can be configured to handle conversion either + by using Long's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
LongConverter() + +
+          Construct a java.lang.Long Converter that throws + a ConversionException if an error occurs.
LongConverter(Object defaultValue) + +
+          Construct a java.lang.Long Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LongConverter

+
+public LongConverter()
+
+
Construct a java.lang.Long Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+LongConverter

+
+public LongConverter(Object defaultValue)
+
+
Construct a java.lang.Long Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/NumberConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/NumberConverter.html new file mode 100644 index 0000000..ea18ab9 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/NumberConverter.html @@ -0,0 +1,567 @@ + + + + + + + +NumberConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class NumberConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
Direct Known Subclasses:
BigDecimalConverter, BigIntegerConverter, ByteConverter, DoubleConverter, FloatConverter, IntegerConverter, LongConverter, ShortConverter
+
+
+
+
public abstract class NumberConverter
extends AbstractConverter
+ + +

+Converter implementaion that handles conversion + to and from java.lang.Number objects. +

+ This implementation handles conversion for the following + java.lang.Number types. +

    +
  • java.lang.Byte
  • +
  • java.lang.Short
  • +
  • java.lang.Integer
  • +
  • java.lang.Long
  • +
  • java.lang.Float
  • +
  • java.lang.Double
  • +
  • java.math.BigDecimal
  • +
  • java.math.BigInteger
  • +
+ +

String Conversions (to and from)

+ This class provides a number of ways in which number + conversions to/from Strings can be achieved: +
    +
  • Using the default format for the default Locale, configure using:
  • +
      +
    • setUseLocaleFormat(true)
    • +
    +
  • Using the default format for a specified Locale, configure using:
  • +
      +
    • setLocale(Locale)
    • +
    +
  • Using a specified pattern for the default Locale, configure using:
  • +
      +
    • setPattern(String)
    • +
    +
  • Using a specified pattern for a specified Locale, configure using:
  • +
      +
    • setPattern(String)
    • +
    • setLocale(Locale)
    • +
    +
  • If none of the above are configured the + toNumber(String) method is used to convert + from String to Number and the Number's + toString() method used to convert from + Number to String.
  • +
+ +

+ N.B.Patterns can only be specified used the standard + pattern characters and NOT in localized form (see java.text.SimpleDateFormat). + For example to cater for number styles used in Germany such as 0.000,00 the pattern + is specified in the normal form 0,000.00 and the locale set to Locale.GERMANY. +

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 745081 $ $Date: 2009-02-17 14:05:20 +0000 (Tue, 17 Feb 2009) $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
NumberConverter(boolean allowDecimals) + +
+          Construct a java.lang.Number Converter + that throws a ConversionException if a error occurs.
NumberConverter(boolean allowDecimals, + Object defaultValue) + +
+          Construct a java.lang.Number Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  StringconvertToString(Object value) + +
+          Convert an input Number object into a String.
+protected  ObjectconvertToType(Class targetType, + Object value) + +
+          Convert the input object into a Number object of the + specified type.
+ LocalegetLocale() + +
+          Return the Locale for the Converter + (or null if none specified).
+ StringgetPattern() + +
+          Return the number format pattern used to convert + Numbers to/from a java.lang.String + (or null if none specified).
+ booleanisAllowDecimals() + +
+          Return whether decimals are allowed in the number.
+ voidsetLocale(Locale locale) + +
+          Set the Locale for the Converter.
+ voidsetPattern(String pattern) + +
+          Set a number format pattern to use to convert + Numbers to/from a java.lang.String.
+ voidsetUseLocaleFormat(boolean useLocaleFormat) + +
+          Set whether a format should be used to convert + the Number.
+ StringtoString() + +
+          Provide a String representation of this number converter.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, getDefaultType, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+NumberConverter

+
+public NumberConverter(boolean allowDecimals)
+
+
Construct a java.lang.Number Converter + that throws a ConversionException if a error occurs. +

+

+
Parameters:
allowDecimals - Indicates whether decimals are allowed
+
+
+ +

+NumberConverter

+
+public NumberConverter(boolean allowDecimals,
+                       Object defaultValue)
+
+
Construct a java.lang.Number Converter that returns + a default value if an error occurs. +

+

+
Parameters:
allowDecimals - Indicates whether decimals are allowed
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+isAllowDecimals

+
+public boolean isAllowDecimals()
+
+
Return whether decimals are allowed in the number. +

+

+ +
Returns:
Whether decimals are allowed in the number
+
+
+
+ +

+setUseLocaleFormat

+
+public void setUseLocaleFormat(boolean useLocaleFormat)
+
+
Set whether a format should be used to convert + the Number. +

+

+
Parameters:
useLocaleFormat - true if a number format + should be used.
+
+
+
+ +

+getPattern

+
+public String getPattern()
+
+
Return the number format pattern used to convert + Numbers to/from a java.lang.String + (or null if none specified). +

+ See java.text.SimpleDateFormat for details + of how to specify the pattern. +

+

+ +
Returns:
The format pattern.
+
+
+
+ +

+setPattern

+
+public void setPattern(String pattern)
+
+
Set a number format pattern to use to convert + Numbers to/from a java.lang.String. +

+ See java.text.SimpleDateFormat for details + of how to specify the pattern. +

+

+
Parameters:
pattern - The format pattern.
+
+
+
+ +

+getLocale

+
+public Locale getLocale()
+
+
Return the Locale for the Converter + (or null if none specified). +

+

+ +
Returns:
The locale to use for conversion
+
+
+
+ +

+setLocale

+
+public void setLocale(Locale locale)
+
+
Set the Locale for the Converter. +

+

+
Parameters:
locale - The locale to use for conversion
+
+
+
+ +

+convertToString

+
+protected String convertToString(Object value)
+                          throws Throwable
+
+
Convert an input Number object into a String. +

+

+
Overrides:
convertToString in class AbstractConverter
+
+
+
Parameters:
value - The input value to be converted +
Returns:
the converted String value. +
Throws: +
Throwable - if an error occurs converting to a String
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class targetType,
+                               Object value)
+                        throws Throwable
+
+
Convert the input object into a Number object of the + specified type. +

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
targetType - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
+
+
+
+ +

+toString

+
+public String toString()
+
+
Provide a String representation of this number converter. +

+

+
Overrides:
toString in class AbstractConverter
+
+
+ +
Returns:
A String representation of this number converter
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortArrayConverter.html new file mode 100644 index 0000000..445f155 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortArrayConverter.html @@ -0,0 +1,338 @@ + + + + + + + +ShortArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ShortArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.ShortArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class ShortArrayConverter
extends AbstractArrayConverter
+ + +

+

Standard Converter implementation that converts an incoming + String into a primitive array of short. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed.

+

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
ShortArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
ShortArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ShortArrayConverter

+
+public ShortArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+ShortArrayConverter

+
+public ShortArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortConverter.html new file mode 100644 index 0000000..9a9e293 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/ShortConverter.html @@ -0,0 +1,331 @@ + + + + + + + +ShortConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class ShortConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.NumberConverter
+          extended by org.apache.commons.beanutils.converters.ShortConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class ShortConverter
extends NumberConverter
+ + +

+NumberConverter implementation that handles conversion to + and from java.lang.Short objects. +

+ This implementation can be configured to handle conversion either + by using Short's default String conversion, or by using a Locale's pattern + or by specifying a format pattern. See the NumberConverter + documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
ShortConverter() + +
+          Construct a java.lang.Short Converter that throws + a ConversionException if an error occurs.
ShortConverter(Object defaultValue) + +
+          Construct a java.lang.Short Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.NumberConverter
convertToString, convertToType, getLocale, getPattern, isAllowDecimals, setLocale, setPattern, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ShortConverter

+
+public ShortConverter()
+
+
Construct a java.lang.Short Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+ShortConverter

+
+public ShortConverter(Object defaultValue)
+
+
Construct a java.lang.Short Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlDateConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlDateConverter.html new file mode 100644 index 0000000..eb5718c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlDateConverter.html @@ -0,0 +1,331 @@ + + + + + + + +SqlDateConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class SqlDateConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.DateTimeConverter
+          extended by org.apache.commons.beanutils.converters.SqlDateConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class SqlDateConverter
extends DateTimeConverter
+ + +

+DateTimeConverter implementation that handles conversion to + and from java.sql.Date objects. +

+ This implementation can be configured to handle conversion either + by using java.sql.Date's default String conversion, or by using a + Locale's default format or by specifying a set of format patterns. + See the DateTimeConverter documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
SqlDateConverter() + +
+          Construct a java.sql.Date Converter that throws + a ConversionException if an error occurs.
SqlDateConverter(Object defaultValue) + +
+          Construct a java.sql.Date Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.DateTimeConverter
convertToString, convertToType, getFormat, getLocale, getPatterns, getTimeZone, setLocale, setPattern, setPatterns, setTimeZone, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SqlDateConverter

+
+public SqlDateConverter()
+
+
Construct a java.sql.Date Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+SqlDateConverter

+
+public SqlDateConverter(Object defaultValue)
+
+
Construct a java.sql.Date Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimeConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimeConverter.html new file mode 100644 index 0000000..90ee108 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimeConverter.html @@ -0,0 +1,360 @@ + + + + + + + +SqlTimeConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class SqlTimeConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.DateTimeConverter
+          extended by org.apache.commons.beanutils.converters.SqlTimeConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class SqlTimeConverter
extends DateTimeConverter
+ + +

+DateTimeConverter implementation that handles conversion to + and from java.sql.Time objects. +

+ This implementation can be configured to handle conversion either + by using java.sql.Time's default String conversion, or by using a + Locale's default format or by specifying a set of format patterns. + See the DateTimeConverter documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
SqlTimeConverter() + +
+          Construct a java.sql.Time Converter that throws + a ConversionException if an error occurs.
SqlTimeConverter(Object defaultValue) + +
+          Construct a java.sql.Time Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+protected  DateFormatgetFormat(Locale locale, + TimeZone timeZone) + +
+          Return a DateFormat for the Locale.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.DateTimeConverter
convertToString, convertToType, getLocale, getPatterns, getTimeZone, setLocale, setPattern, setPatterns, setTimeZone, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SqlTimeConverter

+
+public SqlTimeConverter()
+
+
Construct a java.sql.Time Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+SqlTimeConverter

+
+public SqlTimeConverter(Object defaultValue)
+
+
Construct a java.sql.Time Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+getFormat

+
+protected DateFormat getFormat(Locale locale,
+                               TimeZone timeZone)
+
+
Return a DateFormat for the Locale. +

+

+
Overrides:
getFormat in class DateTimeConverter
+
+
+
Parameters:
locale - TODO
timeZone - TODO +
Returns:
The DateFormat.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimestampConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimestampConverter.html new file mode 100644 index 0000000..f4e6d1f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/SqlTimestampConverter.html @@ -0,0 +1,360 @@ + + + + + + + +SqlTimestampConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class SqlTimestampConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.DateTimeConverter
+          extended by org.apache.commons.beanutils.converters.SqlTimestampConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class SqlTimestampConverter
extends DateTimeConverter
+ + +

+DateTimeConverter implementation that handles conversion to + and from java.sql.Timestamp objects. +

+ This implementation can be configured to handle conversion either + by using java.sql.Timestamp's default String conversion, or by using a + Locale's default format or by specifying a set of format patterns. + See the DateTimeConverter documentation for further details. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
SqlTimestampConverter() + +
+          Construct a java.sql.Timestamp Converter that throws + a ConversionException if an error occurs.
SqlTimestampConverter(Object defaultValue) + +
+          Construct a java.sql.Timestamp Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+protected  DateFormatgetFormat(Locale locale, + TimeZone timeZone) + +
+          Return a DateFormat for the Locale.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.DateTimeConverter
convertToString, convertToType, getLocale, getPatterns, getTimeZone, setLocale, setPattern, setPatterns, setTimeZone, setUseLocaleFormat, toString
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SqlTimestampConverter

+
+public SqlTimestampConverter()
+
+
Construct a java.sql.Timestamp Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+SqlTimestampConverter

+
+public SqlTimestampConverter(Object defaultValue)
+
+
Construct a java.sql.Timestamp Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+getFormat

+
+protected DateFormat getFormat(Locale locale,
+                               TimeZone timeZone)
+
+
Return a DateFormat for the Locale. +

+

+
Overrides:
getFormat in class DateTimeConverter
+
+
+
Parameters:
locale - TODO
timeZone - TODO +
Returns:
The DateFormat.
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringArrayConverter.html new file mode 100644 index 0000000..fdc7ab9 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringArrayConverter.html @@ -0,0 +1,361 @@ + + + + + + + +StringArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class StringArrayConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractArrayConverter
+      extended by org.apache.commons.beanutils.converters.StringArrayConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+Deprecated. Replaced by the new ArrayConverter implementation +

+

+
public final class StringArrayConverter
extends AbstractArrayConverter
+ + +

+Standard Converter implementation that converts an incoming + String into an array of String objects. On a conversion failure, returns + a specified default value or throws a ConversionException depending + on how this instance is constructed. +

+ There is also some special handling where the input is of type int[]. + See method convert for more details. +

+ +

+

+
Since:
+
1.4
+
Version:
+
$Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
defaultValue, NO_DEFAULT, strings, useDefault
+  + + + + + + + + + + + + + +
+Constructor Summary
StringArrayConverter() + +
+          Deprecated. Create a Converter that will throw + a ConversionException if a conversion error occurs.
StringArrayConverter(Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Deprecated. Convert the specified input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractArrayConverter
parseElements
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+StringArrayConverter

+
+public StringArrayConverter()
+
+
Deprecated. 
Create a Converter that will throw + a ConversionException if a conversion error occurs. +

+

+
+ +

+StringArrayConverter

+
+public StringArrayConverter(Object defaultValue)
+
+
Deprecated. 
Create a Converter that will return + the specified default value if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Deprecated. 
Convert the specified input object into an output object of the + specified type. +

+ If the value is already of type String[] then it is simply returned + unaltered. +

+ If the value is of type int[], then a String[] is returned where each + element in the string array is the result of calling Integer.toString + on the corresponding element of the int array. This was added as a + result of bugzilla request #18297 though there is not complete + agreement that this feature should have been added. +

+ In all other cases, this method calls toString on the input object, then + assumes the result is a comma-separated list of values. The values are + split apart into the individual items and returned as the elements of an + array. See class AbstractArrayConverter for the exact input formats + supported. +

+

+
Specified by:
convert in interface Converter
Specified by:
convert in class AbstractArrayConverter
+
+
+
Parameters:
type - is the data type to which this value should be converted. + It is expected to be the class for type String[] (though this parameter + is actually ignored by this method).
value - is the input value to be converted. If null then the + default value is returned or an exception thrown if no default value + exists. +
Returns:
the converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully, or the input is null and there is no default value set + for this object.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringConverter.html new file mode 100644 index 0000000..50634b2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/StringConverter.html @@ -0,0 +1,364 @@ + + + + + + + +StringConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class StringConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.StringConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class StringConverter
extends AbstractConverter
+ + +

+Converter + implementation that converts an incoming + object into a java.lang.String object. +

+ Note that ConvertUtils really is designed to do string->object conversions, + and offers very little support for object->string conversions. The + ConvertUtils/ConvertUtilsBean methods only select a converter to apply + based upon the target type being converted to, and generally assume that + the input is a string (by calling its toString method if needed). +

+ This class is therefore just a dummy converter that converts its input + into a string by calling the input object's toString method and returning + that value. +

+ It is possible to replace this converter with something that has a big + if/else statement that selects behaviour based on the real type of the + object being converted (or possibly has a map of converters, and looks + them up based on the class of the input object). However this is not part + of the existing ConvertUtils framework. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
Author:
+
Craig R. McClanahan
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
StringConverter() + +
+          Construct a java.lang.String Converter that throws + a ConversionException if an error occurs.
StringConverter(Object defaultValue) + +
+          Construct a java.lang.String Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Convert the specified input object into an output object of the + specified type.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, convertToString, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+StringConverter

+
+public StringConverter()
+
+
Construct a java.lang.String Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+StringConverter

+
+public StringConverter(Object defaultValue)
+
+
Construct a java.lang.String Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Throwable
+
+
Convert the specified input object into an output object of the + specified type. +

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/URLConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/URLConverter.html new file mode 100644 index 0000000..c68c826 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/URLConverter.html @@ -0,0 +1,346 @@ + + + + + + + +URLConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.converters +
+Class URLConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.converters.AbstractConverter
+      extended by org.apache.commons.beanutils.converters.URLConverter
+
+
+
All Implemented Interfaces:
Converter
+
+
+
+
public final class URLConverter
extends AbstractConverter
+ + +

+Converter implementaion that handles conversion + to and from java.net.URL objects. +

+ Can be configured to either return a default value or throw a + ConversionException if a conversion error occurs. +

+ +

+

+
Since:
+
1.3
+
Version:
+
$Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
URLConverter() + +
+          Construct a java.net.URL Converter that throws + a ConversionException if an error occurs.
URLConverter(Object defaultValue) + +
+          Construct a java.net.URL Converter that returns + a default value if an error occurs.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  ObjectconvertToType(Class type, + Object value) + +
+          Convert a java.net.URL or object into a String.
+protected  ClassgetDefaultType() + +
+          Return the default type this Converter handles.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.converters.AbstractConverter
convert, convertArray, convertToString, getDefault, handleError, handleMissing, isUseDefault, setDefaultValue, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+URLConverter

+
+public URLConverter()
+
+
Construct a java.net.URL Converter that throws + a ConversionException if an error occurs. +

+

+
+ +

+URLConverter

+
+public URLConverter(Object defaultValue)
+
+
Construct a java.net.URL Converter that returns + a default value if an error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned + if the value to be converted is missing or an error + occurs converting the value.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultType

+
+protected Class getDefaultType()
+
+
Return the default type this Converter handles. +

+

+
Specified by:
getDefaultType in class AbstractConverter
+
+
+ +
Returns:
The default type this Converter handles.
Since:
+
1.8.0
+
+
+
+
+ +

+convertToType

+
+protected Object convertToType(Class type,
+                               Object value)
+                        throws Throwable
+
+

Convert a java.net.URL or object into a String.

+

+

+
Specified by:
convertToType in class AbstractConverter
+
+
+
Parameters:
type - Data type to which this value should be converted.
value - The input value to be converted. +
Returns:
The converted value. +
Throws: +
Throwable - if an error occurs converting to the specified type
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractArrayConverter.html new file mode 100644 index 0000000..7fc232f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractArrayConverter.html @@ -0,0 +1,249 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.AbstractArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.AbstractArrayConverter

+
+ + + + + + + + + +
+Packages that use AbstractArrayConverter
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of AbstractArrayConverter in org.apache.commons.beanutils.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subclasses of AbstractArrayConverter in org.apache.commons.beanutils.converters
+ classBooleanArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classByteArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classCharacterArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classDoubleArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classFloatArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classIntegerArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classLongArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classShortArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+ classStringArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractConverter.html new file mode 100644 index 0000000..7defd91 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/AbstractConverter.html @@ -0,0 +1,376 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.AbstractConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.AbstractConverter

+
+ + + + + + + + + +
+Packages that use AbstractConverter
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of AbstractConverter in org.apache.commons.beanutils.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subclasses of AbstractConverter in org.apache.commons.beanutils.converters
+ classArrayConverter + +
+          Generic Converter implementaion that handles conversion + to and from array objects.
+ classBigDecimalConverter + +
+          NumberConverter implementation that handles conversion to + and from java.math.BigDecimal objects.
+ classBigIntegerConverter + +
+          NumberConverter implementation that handles conversion to + and from java.math.BigInteger objects.
+ classBooleanConverter + +
+          Converter implementaion that handles conversion + to and from Boolean objects.
+ classByteConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Byte objects.
+ classCalendarConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.util.Calendar objects.
+ classCharacterConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Character objects.
+ classClassConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Class objects.
+ classDateConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.util.Date objects.
+ classDateTimeConverter + +
+          Converter implementaion + that handles conversion to and from date/time objects.
+ classDoubleConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Double objects.
+ classFileConverter + +
+          Converter implementaion that handles conversion + to and from java.io.File objects.
+ classFloatConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Float objects.
+ classIntegerConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Integer objects.
+ classLongConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Long objects.
+ classNumberConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Number objects.
+ classShortConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Short objects.
+ classSqlDateConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Date objects.
+ classSqlTimeConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Time objects.
+ classSqlTimestampConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Timestamp objects.
+ classStringConverter + +
+          Converter + implementation that converts an incoming + object into a java.lang.String object.
+ classURLConverter + +
+          Converter implementaion that handles conversion + to and from java.net.URL objects.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ArrayConverter.html new file mode 100644 index 0000000..17e4fa8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.ArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigDecimalConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigDecimalConverter.html new file mode 100644 index 0000000..0ec7d87 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigDecimalConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.BigDecimalConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.BigDecimalConverter

+
+No usage of org.apache.commons.beanutils.converters.BigDecimalConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigIntegerConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigIntegerConverter.html new file mode 100644 index 0000000..afe1ba7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BigIntegerConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.BigIntegerConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.BigIntegerConverter

+
+No usage of org.apache.commons.beanutils.converters.BigIntegerConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanArrayConverter.html new file mode 100644 index 0000000..f5ed576 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.BooleanArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.BooleanArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.BooleanArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanConverter.html new file mode 100644 index 0000000..faa8cbd --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/BooleanConverter.html @@ -0,0 +1,202 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.BooleanConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.BooleanConverter

+
+ + + + + + + + + +
+Packages that use BooleanConverter
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of BooleanConverter in org.apache.commons.beanutils.converters
+  +

+ + + + + + + + + +
Fields in org.apache.commons.beanutils.converters declared as BooleanConverter
+protected  BooleanConverterBooleanArrayConverter.booleanConverter + +
+          Deprecated. This object is used to perform the conversion of individual strings + into Boolean/boolean values.
+  +

+ + + + + + + + +
Constructors in org.apache.commons.beanutils.converters with parameters of type BooleanConverter
BooleanArrayConverter(BooleanConverter converter, + Object defaultValue) + +
+          Deprecated. Create a Converter that will return + the specified default value if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteArrayConverter.html new file mode 100644 index 0000000..6bc26bc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ByteArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ByteArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.ByteArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteConverter.html new file mode 100644 index 0000000..08cc0db --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ByteConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ByteConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ByteConverter

+
+No usage of org.apache.commons.beanutils.converters.ByteConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CalendarConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CalendarConverter.html new file mode 100644 index 0000000..ac6ee62 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CalendarConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.CalendarConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.CalendarConverter

+
+No usage of org.apache.commons.beanutils.converters.CalendarConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterArrayConverter.html new file mode 100644 index 0000000..516146c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.CharacterArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.CharacterArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.CharacterArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterConverter.html new file mode 100644 index 0000000..52fb9c1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/CharacterConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.CharacterConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.CharacterConverter

+
+No usage of org.apache.commons.beanutils.converters.CharacterConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ClassConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ClassConverter.html new file mode 100644 index 0000000..8333af0 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ClassConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ClassConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ClassConverter

+
+No usage of org.apache.commons.beanutils.converters.ClassConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ConverterFacade.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ConverterFacade.html new file mode 100644 index 0000000..595fd54 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ConverterFacade.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ConverterFacade (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ConverterFacade

+
+No usage of org.apache.commons.beanutils.converters.ConverterFacade +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateConverter.html new file mode 100644 index 0000000..acc914f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.DateConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.DateConverter

+
+No usage of org.apache.commons.beanutils.converters.DateConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateTimeConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateTimeConverter.html new file mode 100644 index 0000000..99cf23b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DateTimeConverter.html @@ -0,0 +1,222 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.DateTimeConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.DateTimeConverter

+
+ + + + + + + + + +
+Packages that use DateTimeConverter
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of DateTimeConverter in org.apache.commons.beanutils.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Subclasses of DateTimeConverter in org.apache.commons.beanutils.converters
+ classCalendarConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.util.Calendar objects.
+ classDateConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.util.Date objects.
+ classSqlDateConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Date objects.
+ classSqlTimeConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Time objects.
+ classSqlTimestampConverter + +
+          DateTimeConverter implementation that handles conversion to + and from java.sql.Timestamp objects.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleArrayConverter.html new file mode 100644 index 0000000..06929c4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.DoubleArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.DoubleArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.DoubleArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleConverter.html new file mode 100644 index 0000000..b8720ca --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/DoubleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.DoubleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.DoubleConverter

+
+No usage of org.apache.commons.beanutils.converters.DoubleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FileConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FileConverter.html new file mode 100644 index 0000000..0241317 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FileConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.FileConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.FileConverter

+
+No usage of org.apache.commons.beanutils.converters.FileConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatArrayConverter.html new file mode 100644 index 0000000..6d3ef12 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.FloatArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.FloatArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.FloatArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatConverter.html new file mode 100644 index 0000000..18620a7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/FloatConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.FloatConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.FloatConverter

+
+No usage of org.apache.commons.beanutils.converters.FloatConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerArrayConverter.html new file mode 100644 index 0000000..32ce360 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.IntegerArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.IntegerArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.IntegerArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerConverter.html new file mode 100644 index 0000000..21e63c0 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/IntegerConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.IntegerConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.IntegerConverter

+
+No usage of org.apache.commons.beanutils.converters.IntegerConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongArrayConverter.html new file mode 100644 index 0000000..7290e3b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.LongArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.LongArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.LongArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongConverter.html new file mode 100644 index 0000000..e3d6f43 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/LongConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.LongConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.LongConverter

+
+No usage of org.apache.commons.beanutils.converters.LongConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/NumberConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/NumberConverter.html new file mode 100644 index 0000000..aed6cc7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/NumberConverter.html @@ -0,0 +1,249 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.NumberConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.NumberConverter

+
+ + + + + + + + + +
+Packages that use NumberConverter
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of NumberConverter in org.apache.commons.beanutils.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subclasses of NumberConverter in org.apache.commons.beanutils.converters
+ classBigDecimalConverter + +
+          NumberConverter implementation that handles conversion to + and from java.math.BigDecimal objects.
+ classBigIntegerConverter + +
+          NumberConverter implementation that handles conversion to + and from java.math.BigInteger objects.
+ classByteConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Byte objects.
+ classDoubleConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Double objects.
+ classFloatConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Float objects.
+ classIntegerConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Integer objects.
+ classLongConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Long objects.
+ classShortConverter + +
+          NumberConverter implementation that handles conversion to + and from java.lang.Short objects.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortArrayConverter.html new file mode 100644 index 0000000..3125e50 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ShortArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ShortArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.ShortArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortConverter.html new file mode 100644 index 0000000..7b59b74 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/ShortConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.ShortConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.ShortConverter

+
+No usage of org.apache.commons.beanutils.converters.ShortConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlDateConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlDateConverter.html new file mode 100644 index 0000000..8f3e54a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlDateConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.SqlDateConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.SqlDateConverter

+
+No usage of org.apache.commons.beanutils.converters.SqlDateConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimeConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimeConverter.html new file mode 100644 index 0000000..ffd7d14 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimeConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.SqlTimeConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.SqlTimeConverter

+
+No usage of org.apache.commons.beanutils.converters.SqlTimeConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimestampConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimestampConverter.html new file mode 100644 index 0000000..d2efa8b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/SqlTimestampConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.SqlTimestampConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.SqlTimestampConverter

+
+No usage of org.apache.commons.beanutils.converters.SqlTimestampConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringArrayConverter.html new file mode 100644 index 0000000..a9877d4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringArrayConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.StringArrayConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.StringArrayConverter

+
+No usage of org.apache.commons.beanutils.converters.StringArrayConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringConverter.html new file mode 100644 index 0000000..3fd1f9c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/StringConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.StringConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.StringConverter

+
+No usage of org.apache.commons.beanutils.converters.StringConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/URLConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/URLConverter.html new file mode 100644 index 0000000..9905337 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/class-use/URLConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.converters.URLConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.converters.URLConverter

+
+No usage of org.apache.commons.beanutils.converters.URLConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-frame.html new file mode 100644 index 0000000..91742a6 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-frame.html @@ -0,0 +1,99 @@ + + + + + + + +org.apache.commons.beanutils.converters (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +org.apache.commons.beanutils.converters + + + + +
+Classes  + +
+AbstractArrayConverter +
+AbstractConverter +
+ArrayConverter +
+BigDecimalConverter +
+BigIntegerConverter +
+BooleanArrayConverter +
+BooleanConverter +
+ByteArrayConverter +
+ByteConverter +
+CalendarConverter +
+CharacterArrayConverter +
+CharacterConverter +
+ClassConverter +
+ConverterFacade +
+DateConverter +
+DateTimeConverter +
+DoubleArrayConverter +
+DoubleConverter +
+FileConverter +
+FloatArrayConverter +
+FloatConverter +
+IntegerArrayConverter +
+IntegerConverter +
+LongArrayConverter +
+LongConverter +
+NumberConverter +
+ShortArrayConverter +
+ShortConverter +
+SqlDateConverter +
+SqlTimeConverter +
+SqlTimestampConverter +
+StringArrayConverter +
+StringConverter +
+URLConverter
+ + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-summary.html new file mode 100644 index 0000000..25ffbba --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-summary.html @@ -0,0 +1,339 @@ + + + + + + + +org.apache.commons.beanutils.converters (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.apache.commons.beanutils.converters +

+Standard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. +

+See: +
+          Description +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
AbstractArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
AbstractConverterBase Converter implementation that provides the structure + for handling conversion to and from a specified type.
ArrayConverterGeneric Converter implementaion that handles conversion + to and from array objects.
BigDecimalConverterNumberConverter implementation that handles conversion to + and from java.math.BigDecimal objects.
BigIntegerConverterNumberConverter implementation that handles conversion to + and from java.math.BigInteger objects.
BooleanArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
BooleanConverterConverter implementaion that handles conversion + to and from Boolean objects.
ByteArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
ByteConverterNumberConverter implementation that handles conversion to + and from java.lang.Byte objects.
CalendarConverterDateTimeConverter implementation that handles conversion to + and from java.util.Calendar objects.
CharacterArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
CharacterConverterConverter implementaion that handles conversion + to and from java.lang.Character objects.
ClassConverterConverter implementaion that handles conversion + to and from java.lang.Class objects.
ConverterFacadeProvides a facade for Converter implementations + preventing access to any public API in the implementation, + other than that specified by Converter.
DateConverterDateTimeConverter implementation that handles conversion to + and from java.util.Date objects.
DateTimeConverterConverter implementaion + that handles conversion to and from date/time objects.
DoubleArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
DoubleConverterNumberConverter implementation that handles conversion to + and from java.lang.Double objects.
FileConverterConverter implementaion that handles conversion + to and from java.io.File objects.
FloatArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
FloatConverterNumberConverter implementation that handles conversion to + and from java.lang.Float objects.
IntegerArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
IntegerConverterNumberConverter implementation that handles conversion to + and from java.lang.Integer objects.
LongArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
LongConverterNumberConverter implementation that handles conversion to + and from java.lang.Long objects.
NumberConverterConverter implementaion that handles conversion + to and from java.lang.Number objects.
ShortArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
ShortConverterNumberConverter implementation that handles conversion to + and from java.lang.Short objects.
SqlDateConverterDateTimeConverter implementation that handles conversion to + and from java.sql.Date objects.
SqlTimeConverterDateTimeConverter implementation that handles conversion to + and from java.sql.Time objects.
SqlTimestampConverterDateTimeConverter implementation that handles conversion to + and from java.sql.Timestamp objects.
StringArrayConverterDeprecated. Replaced by the new ArrayConverter implementation
StringConverterConverter + implementation that converts an incoming + object into a java.lang.String object.
URLConverterConverter implementaion that handles conversion + to and from java.net.URL objects.
+  + +

+

+Package org.apache.commons.beanutils.converters Description +

+ +

+

Standard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time.

+

+ +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-tree.html new file mode 100644 index 0000000..e2a8c59 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-tree.html @@ -0,0 +1,165 @@ + + + + + + + +org.apache.commons.beanutils.converters Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.apache.commons.beanutils.converters +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-use.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-use.html new file mode 100644 index 0000000..8e7fd42 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/converters/package-use.html @@ -0,0 +1,203 @@ + + + + + + + +Uses of Package org.apache.commons.beanutils.converters (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
org.apache.commons.beanutils.converters

+
+ + + + + + + + + +
+Packages that use org.apache.commons.beanutils.converters
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
+  +

+ + + + + + + + + + + + + + + + + + + + +
+Classes in org.apache.commons.beanutils.converters used by org.apache.commons.beanutils.converters
AbstractArrayConverter + +
+          Deprecated. Replaced by the new ArrayConverter implementation
AbstractConverter + +
+          Base Converter implementation that provides the structure + for handling conversion to and from a specified type.
BooleanConverter + +
+          Converter implementaion that handles conversion + to and from Boolean objects.
DateTimeConverter + +
+          Converter implementaion + that handles conversion to and from date/time objects.
NumberConverter + +
+          Converter implementaion that handles conversion + to and from java.lang.Number objects.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/DefaultResolver.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/DefaultResolver.html new file mode 100644 index 0000000..a989454 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/DefaultResolver.html @@ -0,0 +1,495 @@ + + + + + + + +DefaultResolver (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.expression +
+Class DefaultResolver

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.expression.DefaultResolver
+
+
+
All Implemented Interfaces:
Resolver
+
+
+
+
public class DefaultResolver
extends Object
implements Resolver
+ + +

+Default Property Name Expression Resolver Implementation. +

+ This class assists in resolving property names in the following five formats, + with the layout of an identifying String in parentheses: +

    +
  • Simple (name) - The specified + name identifies an individual property of a particular + JavaBean. The name of the actual getter or setter method to be used + is determined using standard JavaBeans instrospection, so that (unless + overridden by a BeanInfo class, a property named "xyz" + will have a getter method named getXyz() or (for boolean + properties only) isXyz(), and a setter method named + setXyz().
  • +
  • Nested (name1.name2.name3) The first + name element is used to select a property getter, as for simple + references above. The object returned for this property is then + consulted, using the same approach, for a property getter for a + property named name2, and so on. The property value that + is ultimately retrieved or modified is the one identified by the + last name element.
  • +
  • Indexed (name[index]) - The underlying + property value is assumed to be an array, or this JavaBean is assumed + to have indexed property getter and setter methods. The appropriate + (zero-relative) entry in the array is selected. List + objects are now also supported for read/write. You simply need to define + a getter that returns the List
  • +
  • Mapped (name(key)) - The JavaBean + is assumed to have an property getter and setter methods with an + additional attribute of type java.lang.String.
  • +
  • Combined (name1.name2[index].name3(key)) - + Combining mapped, nested, and indexed references is also + supported.
  • +
+

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 473888 $ $Date: 2006-11-12 06:21:24 +0000 (Sun, 12 Nov 2006) $
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
DefaultResolver() + +
+          Default Constructor.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetIndex(String expression) + +
+          Return the index value from the property expression or -1.
+ StringgetKey(String expression) + +
+          Return the map key from the property expression or null.
+ StringgetProperty(String expression) + +
+          Return the property name from the property expression.
+ booleanhasNested(String expression) + +
+          Indicates whether or not the expression + contains nested property expressions or not.
+ booleanisIndexed(String expression) + +
+          Indicate whether the expression is for an indexed property or not.
+ booleanisMapped(String expression) + +
+          Indicate whether the expression is for a mapped property or not.
+ Stringnext(String expression) + +
+          Extract the next property expression from the + current expression.
+ Stringremove(String expression) + +
+          Remove the last property expresson from the + current expression.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DefaultResolver

+
+public DefaultResolver()
+
+
Default Constructor. +

+

+ + + + + + + + +
+Method Detail
+ +

+getIndex

+
+public int getIndex(String expression)
+
+
Return the index value from the property expression or -1. +

+

+
Specified by:
getIndex in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
The index value or -1 if the property is not indexed +
Throws: +
IllegalArgumentException - If the indexed property is illegally + formed or has an invalid (non-numeric) value.
+
+
+
+ +

+getKey

+
+public String getKey(String expression)
+
+
Return the map key from the property expression or null. +

+

+
Specified by:
getKey in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
The index value +
Throws: +
IllegalArgumentException - If the mapped property is illegally formed.
+
+
+
+ +

+getProperty

+
+public String getProperty(String expression)
+
+
Return the property name from the property expression. +

+

+
Specified by:
getProperty in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
The property name
+
+
+
+ +

+hasNested

+
+public boolean hasNested(String expression)
+
+
Indicates whether or not the expression + contains nested property expressions or not. +

+

+
Specified by:
hasNested in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
The next property expression
+
+
+
+ +

+isIndexed

+
+public boolean isIndexed(String expression)
+
+
Indicate whether the expression is for an indexed property or not. +

+

+
Specified by:
isIndexed in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
true if the expresion is indexed, + otherwise false
+
+
+
+ +

+isMapped

+
+public boolean isMapped(String expression)
+
+
Indicate whether the expression is for a mapped property or not. +

+

+
Specified by:
isMapped in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
true if the expresion is mapped, + otherwise false
+
+
+
+ +

+next

+
+public String next(String expression)
+
+
Extract the next property expression from the + current expression. +

+

+
Specified by:
next in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
The next property expression
+
+
+
+ +

+remove

+
+public String remove(String expression)
+
+
Remove the last property expresson from the + current expression. +

+

+
Specified by:
remove in interface Resolver
+
+
+
Parameters:
expression - The property expression +
Returns:
The new expression value, with first property + expression removed - null if there are no more expressions
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/Resolver.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/Resolver.html new file mode 100644 index 0000000..e40fb58 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/Resolver.html @@ -0,0 +1,455 @@ + + + + + + + +Resolver (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.expression +
+Interface Resolver

+
+
All Known Implementing Classes:
DefaultResolver
+
+
+
+
public interface Resolver
+ + +

+Property Name Expression Resolver. +

+ Methods such as PropertyUtilsBean's setNestedProperty() method + use a Resolver to process a property name + expression and resolve nested, indexed and mapped + property names. The following code provides an example usage + demonstrating all the methods: + +

+      // Iterate through a nested property expression
+      while (resolver.hasNested(name)) {
+
+          // isolate a single property from a nested expresion
+          String next = resolver.next(name);
+
+          // Process...
+          String property = resolver.getProperty(next);
+          if (resolver.isIndexed(next)) {
+
+              int index = resolver.getIndex(next);
+              bean = getIndexedProperty(bean, property, index);
+
+          } else if (resolver.isMapped(next)) {
+
+              String key = resolver.getKey(next);
+              bean = getMappedProperty(bean, property, key);
+
+          } else {
+
+              bean = getSimpleProperty(bean, property);
+
+          }
+
+          // remove the processed property from the expression
+          name = resolver.remove(name);
+      }
+ 
+ + In order to create an implementation, it is important to understand how + BeanUtils/PropertyUtils uses the resolver. The following are + the main methods that use it: + +

+ +

+

+
Since:
+
1.8.0
+
Version:
+
$Revision: 555845 $ $Date: 2007-07-13 03:52:05 +0100 (Fri, 13 Jul 2007) $
+
See Also:
PropertyUtilsBean.setResolver(Resolver)
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetIndex(String expression) + +
+          Extract the index value from the property expression or -1.
+ StringgetKey(String expression) + +
+          Extract the map key from the property expression or null.
+ StringgetProperty(String expression) + +
+          Return the property name from the property expression.
+ booleanhasNested(String expression) + +
+          Indicates whether or not the expression + contains nested property expressions or not.
+ booleanisIndexed(String expression) + +
+          Indicate whether the expression is for an indexed property or not.
+ booleanisMapped(String expression) + +
+          Indicate whether the expression is for a mapped property or not.
+ Stringnext(String expression) + +
+          Extract the next property expression from the + current expression.
+ Stringremove(String expression) + +
+          Remove the last property expresson from the + current expression.
+  +

+ + + + + + + + +
+Method Detail
+ +

+getIndex

+
+int getIndex(String expression)
+
+
Extract the index value from the property expression or -1. +

+

+
Parameters:
expression - The property expression +
Returns:
The index value or -1 if the property is not indexed +
Throws: +
IllegalArgumentException - If the indexed property is illegally + formed or has an invalid (non-numeric) value
+
+
+
+ +

+getKey

+
+String getKey(String expression)
+
+
Extract the map key from the property expression or null. +

+

+
Parameters:
expression - The property expression +
Returns:
The index value +
Throws: +
IllegalArgumentException - If the mapped property is illegally formed
+
+
+
+ +

+getProperty

+
+String getProperty(String expression)
+
+
Return the property name from the property expression. +

+

+
Parameters:
expression - The property expression +
Returns:
The property name
+
+
+
+ +

+hasNested

+
+boolean hasNested(String expression)
+
+
Indicates whether or not the expression + contains nested property expressions or not. +

+

+
Parameters:
expression - The property expression +
Returns:
The next property expression
+
+
+
+ +

+isIndexed

+
+boolean isIndexed(String expression)
+
+
Indicate whether the expression is for an indexed property or not. +

+

+
Parameters:
expression - The property expression +
Returns:
true if the expresion is indexed, + otherwise false
+
+
+
+ +

+isMapped

+
+boolean isMapped(String expression)
+
+
Indicate whether the expression is for a mapped property or not. +

+

+
Parameters:
expression - The property expression +
Returns:
true if the expresion is mapped, + otherwise false
+
+
+
+ +

+next

+
+String next(String expression)
+
+
Extract the next property expression from the + current expression. +

+

+
Parameters:
expression - The property expression +
Returns:
The next property expression
+
+
+
+ +

+remove

+
+String remove(String expression)
+
+
Remove the last property expresson from the + current expression. +

+

+
Parameters:
expression - The property expression +
Returns:
The new expression value, with first property + expression removed - null if there are no more expressions
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/DefaultResolver.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/DefaultResolver.html new file mode 100644 index 0000000..e65b72f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/DefaultResolver.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.expression.DefaultResolver (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.expression.DefaultResolver

+
+No usage of org.apache.commons.beanutils.expression.DefaultResolver +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/Resolver.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/Resolver.html new file mode 100644 index 0000000..2fda372 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/class-use/Resolver.html @@ -0,0 +1,232 @@ + + + + + + + +Uses of Interface org.apache.commons.beanutils.expression.Resolver (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.beanutils.expression.Resolver

+
+ + + + + + + + + + + + + +
+Packages that use Resolver
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.expressionContains the +Resolver +interface and implementations. 
+  +

+ + + + + +
+Uses of Resolver in org.apache.commons.beanutils
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils that return Resolver
+ ResolverPropertyUtilsBean.getResolver() + +
+          Return the configured Resolver implementation used by BeanUtils.
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils with parameters of type Resolver
+ voidPropertyUtilsBean.setResolver(Resolver resolver) + +
+          Configure the Resolver implementation used by BeanUtils.
+  +

+ + + + + +
+Uses of Resolver in org.apache.commons.beanutils.expression
+  +

+ + + + + + + + + +
Classes in org.apache.commons.beanutils.expression that implement Resolver
+ classDefaultResolver + +
+          Default Property Name Expression Resolver Implementation.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-frame.html new file mode 100644 index 0000000..89c9316 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-frame.html @@ -0,0 +1,44 @@ + + + + + + + +org.apache.commons.beanutils.expression (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +org.apache.commons.beanutils.expression + + + + +
+Interfaces  + +
+Resolver
+ + + + + + +
+Classes  + +
+DefaultResolver
+ + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-summary.html new file mode 100644 index 0000000..cd17c49 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-summary.html @@ -0,0 +1,191 @@ + + + + + + + +org.apache.commons.beanutils.expression (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.apache.commons.beanutils.expression +

+Contains the +Resolver +interface and implementations. +

+See: +
+          Description +

+ + + + + + + + + +
+Interface Summary
ResolverProperty Name Expression Resolver.
+  + +

+ + + + + + + + + +
+Class Summary
DefaultResolverDefault Property Name Expression Resolver Implementation.
+  + +

+

+Package org.apache.commons.beanutils.expression Description +

+ +

+

Contains the +Resolver +interface and implementations.

+

+ +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-tree.html new file mode 100644 index 0000000..e0cd60b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-tree.html @@ -0,0 +1,160 @@ + + + + + + + +org.apache.commons.beanutils.expression Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.apache.commons.beanutils.expression +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+
    +
  • org.apache.commons.beanutils.expression.Resolver
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-use.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-use.html new file mode 100644 index 0000000..25c3ecb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/expression/package-use.html @@ -0,0 +1,196 @@ + + + + + + + +Uses of Package org.apache.commons.beanutils.expression (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
org.apache.commons.beanutils.expression

+
+ + + + + + + + + + + + + +
+Packages that use org.apache.commons.beanutils.expression
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.expressionContains the +Resolver +interface and implementations. 
+  +

+ + + + + + + + +
+Classes in org.apache.commons.beanutils.expression used by org.apache.commons.beanutils
Resolver + +
+          Property Name Expression Resolver.
+  +

+ + + + + + + + +
+Classes in org.apache.commons.beanutils.expression used by org.apache.commons.beanutils.expression
Resolver + +
+          Property Name Expression Resolver.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/BaseLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/BaseLocaleConverter.html new file mode 100644 index 0000000..5226003 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/BaseLocaleConverter.html @@ -0,0 +1,602 @@ + + + + + + + +BaseLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class BaseLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
Direct Known Subclasses:
DateLocaleConverter, DecimalLocaleConverter, StringLocaleConverter
+
+
+
+
public abstract class BaseLocaleConverter
extends Object
implements LocaleConverter
+ + +

+

The base class for all standart type locale-sensitive converters. + It has LocaleConverter and Converter implementations, + that convert an incoming locale-sensitive Object into an object of correspond type, + optionally using a default value or throwing a ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  Localelocale + +
+          The locale specified to our Constructor, by default - system locale.
+protected  booleanlocPattern + +
+          The flag indicating whether the given pattern string is localized or not.
+protected  Stringpattern + +
+          The default pattern specified to our Constructor, if any.
+protected  booleanuseDefault + +
+          Should we return the default value on conversion errors?
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
+protected BaseLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter that will throw a ConversionException + if a conversion error occurs.
+protected BaseLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter that will throw a ConversionException + if a conversion error occurs.
+protected BaseLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter that will return the specified default value + if a conversion error occurs.
+protected BaseLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ Objectconvert(Class type, + Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ Objectconvert(Object value) + +
+          Convert the specified locale-sensitive input object into an output object.
+ Objectconvert(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object.
+protected abstract  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+useDefault

+
+protected boolean useDefault
+
+
Should we return the default value on conversion errors? +

+

+
+
+
+ +

+locale

+
+protected Locale locale
+
+
The locale specified to our Constructor, by default - system locale. +

+

+
+
+
+ +

+pattern

+
+protected String pattern
+
+
The default pattern specified to our Constructor, if any. +

+

+
+
+
+ +

+locPattern

+
+protected boolean locPattern
+
+
The flag indicating whether the given pattern string is localized or not. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+BaseLocaleConverter

+
+protected BaseLocaleConverter(Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter that will throw a ConversionException + if a conversion error occurs. + An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+BaseLocaleConverter

+
+protected BaseLocaleConverter(Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BaseLocaleConverter

+
+protected BaseLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter that will return the specified default value + if a conversion error occurs. + An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+BaseLocaleConverter

+
+protected BaseLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected abstract Object parse(Object value,
+                                String pattern)
+                         throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ParseException - if conversion cannot be performed + successfully
+
+
+
+ +

+convert

+
+public Object convert(Object value)
+
+
Convert the specified locale-sensitive input object into an output object. + The default pattern is used for the convertion. +

+

+
+
+
+
Parameters:
value - The input object to be converted +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+
+ +

+convert

+
+public Object convert(Object value,
+                      String pattern)
+
+
Convert the specified locale-sensitive input object into an output object. +

+

+
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+
+ +

+convert

+
+public Object convert(Class type,
+                      Object value)
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. The default pattern is used for the convertion. +

+

+
Specified by:
convert in interface Converter
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input object to be converted +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+
+ +

+convert

+
+public Object convert(Class type,
+                      Object value,
+                      String pattern)
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
Specified by:
convert in interface LocaleConverter
+
+
+
Parameters:
type - Data is type to which this value should be converted
value - is the input object to be converted
pattern - is the pattern is used for the conversion; if null is + passed then the default pattern associated with the converter object + will be used. +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html new file mode 100644 index 0000000..bb8e0de --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html @@ -0,0 +1,466 @@ + + + + + + + +LocaleBeanUtils.Descriptor (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class LocaleBeanUtils.Descriptor

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor
+
+
+
Enclosing class:
LocaleBeanUtils
+
+
+Deprecated. moved into LocaleBeanUtils +

+

+
protected static class LocaleBeanUtils.Descriptor
extends Object
+ + +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
LocaleBeanUtils.Descriptor(Object target, + String name, + String propName, + String key, + int index) + +
+          Deprecated. Construct a descriptor instance for the target bean and property.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetIndex() + +
+          Deprecated. Return indexed property index.
+ StringgetKey() + +
+          Deprecated. Return the mapped property key.
+ StringgetName() + +
+          Deprecated. Return property name (includes indexed/mapped expr).
+ StringgetPropName() + +
+          Deprecated. Return the property name.
+ ObjectgetTarget() + +
+          Deprecated. Return the target bean.
+ voidsetIndex(int index) + +
+          Deprecated. Set the indexed property index.
+ voidsetKey(String key) + +
+          Deprecated. Set the mapped property key.
+ voidsetName(String name) + +
+          Deprecated. Set the property name (includes indexed/mapped expr).
+ voidsetPropName(String propName) + +
+          Deprecated. Set the property name.
+ voidsetTarget(Object target) + +
+          Deprecated. Set the target bean.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LocaleBeanUtils.Descriptor

+
+public LocaleBeanUtils.Descriptor(Object target,
+                                  String name,
+                                  String propName,
+                                  String key,
+                                  int index)
+
+
Deprecated. 
Construct a descriptor instance for the target bean and property. +

+

+
Parameters:
target - The target bean
name - The property name (includes indexed/mapped expr)
propName - The property name
key - The mapped property key (if any)
index - The indexed property index (if any)
+
+ + + + + + + + +
+Method Detail
+ +

+getTarget

+
+public Object getTarget()
+
+
Deprecated. 
Return the target bean. +

+

+ +
Returns:
The descriptors target bean
+
+
+
+ +

+setTarget

+
+public void setTarget(Object target)
+
+
Deprecated. 
Set the target bean. +

+

+
Parameters:
target - The target bean
+
+
+
+ +

+getKey

+
+public String getKey()
+
+
Deprecated. 
Return the mapped property key. +

+

+ +
Returns:
the mapped property key (if any)
+
+
+
+ +

+setKey

+
+public void setKey(String key)
+
+
Deprecated. 
Set the mapped property key. +

+

+
Parameters:
key - The mapped property key (if any)
+
+
+
+ +

+getIndex

+
+public int getIndex()
+
+
Deprecated. 
Return indexed property index. +

+

+ +
Returns:
indexed property index (if any)
+
+
+
+ +

+setIndex

+
+public void setIndex(int index)
+
+
Deprecated. 
Set the indexed property index. +

+

+
Parameters:
index - The indexed property index (if any)
+
+
+
+ +

+getName

+
+public String getName()
+
+
Deprecated. 
Return property name (includes indexed/mapped expr). +

+

+ +
Returns:
The property name (includes indexed/mapped expr)
+
+
+
+ +

+setName

+
+public void setName(String name)
+
+
Deprecated. 
Set the property name (includes indexed/mapped expr). +

+

+
Parameters:
name - The property name (includes indexed/mapped expr)
+
+
+
+ +

+getPropName

+
+public String getPropName()
+
+
Deprecated. 
Return the property name. +

+

+ +
Returns:
The property name
+
+
+
+ +

+setPropName

+
+public void setPropName(String propName)
+
+
Deprecated. 
Set the property name. +

+

+
Parameters:
propName - The property name
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.html new file mode 100644 index 0000000..0c3ffdb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtils.html @@ -0,0 +1,1189 @@ + + + + + + + +LocaleBeanUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class LocaleBeanUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanUtils
+      extended by org.apache.commons.beanutils.locale.LocaleBeanUtils
+
+
+
+
public class LocaleBeanUtils
extends BeanUtils
+ + +

+

Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.

+ +

The implementations for these methods are provided by LocaleBeanUtilsBean. + For more details see LocaleBeanUtilsBean.

+

+ +

+

+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman, Yauheny Mikulski
+
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+protected static classLocaleBeanUtils.Descriptor + +
+          Deprecated. moved into LocaleBeanUtils
+  + + + + + + + + + + +
+Constructor Summary
LocaleBeanUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected static LocaleBeanUtils.Descriptorcalculate(Object bean, + String name) + +
+          Deprecated. moved into LocaleBeanUtilsBean
+protected static Objectconvert(Class type, + int index, + Object value) + +
+          Convert the specified value to the required type.
+protected static Objectconvert(Class type, + int index, + Object value, + String pattern) + +
+          Convert the specified value to the required type using the + specified conversion pattern.
+protected static ClassdefinePropertyType(Object target, + String name, + String propName) + +
+          Calculate the property type.
+static booleangetApplyLocalized() + +
+          Gets whether the pattern is localized or not.
+static LocalegetDefaultLocale() + +
+          Gets the locale used when no locale is passed.
+static StringgetIndexedProperty(Object bean, + String name) + +
+          Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter.
+static StringgetIndexedProperty(Object bean, + String name, + int index) + +
+          Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter.
+static StringgetIndexedProperty(Object bean, + String name, + int index, + String pattern) + +
+          Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the specified conversion pattern.
+static StringgetIndexedProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String.
+static StringgetMappedProperty(Object bean, + String name) + +
+          Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter.
+static StringgetMappedProperty(Object bean, + String name, + String key) + +
+          Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String + The key is specified as a method parameter and must *not* be included + in the property name expression.
+static StringgetMappedProperty(Object bean, + String name, + String key, + String pattern) + +
+          Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String using the specified conversion pattern.
+static StringgetMappedPropertyLocale(Object bean, + String name, + String pattern) + +
+          Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the specified pattern.
+static StringgetNestedProperty(Object bean, + String name) + +
+          Return the value of the (possibly nested) locale-sensitive property + of the specified name.
+static StringgetNestedProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, + as a String using the specified pattern.
+static StringgetProperty(Object bean, + String name) + +
+          Return the value of the specified locale-sensitive property + of the specified bean.
+static StringgetProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the specified locale-sensitive property + of the specified bean.
+static StringgetSimpleProperty(Object bean, + String name) + +
+          Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the default + conversion pattern of the corresponding LocaleConverter.
+static StringgetSimpleProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the specified + conversion pattern.
+protected static voidinvokeSetter(Object target, + String propName, + String key, + int index, + Object newValue) + +
+          Invoke the setter method.
+static voidsetApplyLocalized(boolean newApplyLocalized) + +
+          Sets whether the pattern is localized or not.
+static voidsetDefaultLocale(Locale locale) + +
+          Sets the locale used when no locale is passed.
+static voidsetProperty(Object bean, + String name, + Object value) + +
+          Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination property + using the default conversion pattern of the corresponding LocaleConverter.
+static voidsetProperty(Object bean, + String name, + Object value, + String pattern) + +
+          Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination + property using the specified conversion pattern.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.BeanUtils
cloneBean, copyProperties, copyProperty, createCache, describe, getArrayProperty, getCacheFast, getDebug, initCause, populate, setCacheFast, setDebug
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LocaleBeanUtils

+
+public LocaleBeanUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultLocale

+
+public static Locale getDefaultLocale()
+
+

Gets the locale used when no locale is passed.

+ +

For more details see LocaleBeanUtilsBean

+

+

+ +
Returns:
the default locale
See Also:
LocaleBeanUtilsBean.getDefaultLocale()
+
+
+
+ +

+setDefaultLocale

+
+public static void setDefaultLocale(Locale locale)
+
+

Sets the locale used when no locale is passed.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
locale - the default locale
See Also:
LocaleBeanUtilsBean.setDefaultLocale(Locale)
+
+
+
+ +

+getApplyLocalized

+
+public static boolean getApplyLocalized()
+
+

Gets whether the pattern is localized or not.

+ +

For more details see LocaleBeanUtilsBean

+

+

+ +
Returns:
true if pattern is localized, + otherwise false
See Also:
LocaleBeanUtilsBean.getApplyLocalized()
+
+
+
+ +

+setApplyLocalized

+
+public static void setApplyLocalized(boolean newApplyLocalized)
+
+

Sets whether the pattern is localized or not.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
newApplyLocalized - true if pattern is localized, + otherwise false
See Also:
LocaleBeanUtilsBean.setApplyLocalized(boolean)
+
+
+
+ +

+getIndexedProperty

+
+public static String getIndexedProperty(Object bean,
+                                        String name,
+                                        String pattern)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted
pattern - The conversion pattern +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getIndexedProperty(Object, String, String)
+
+
+
+ +

+getIndexedProperty

+
+public static String getIndexedProperty(Object bean,
+                                        String name)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. + +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getIndexedProperty(Object, String)
+
+
+
+ +

+getIndexedProperty

+
+public static String getIndexedProperty(Object bean,
+                                        String name,
+                                        int index,
+                                        String pattern)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the specified conversion pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted
pattern - The conversion pattern +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getIndexedProperty(Object, String, int, String)
+
+
+
+ +

+getIndexedProperty

+
+public static String getIndexedProperty(Object bean,
+                                        String name,
+                                        int index)
+                                 throws IllegalAccessException,
+                                        InvocationTargetException,
+                                        NoSuchMethodException
+
+

Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getIndexedProperty(Object, String, int)
+
+
+
+ +

+getSimpleProperty

+
+public static String getSimpleProperty(Object bean,
+                                       String name,
+                                       String pattern)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the specified + conversion pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted
pattern - The conversion pattern +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getSimpleProperty(Object, String, String)
+
+
+
+ +

+getSimpleProperty

+
+public static String getSimpleProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the default + conversion pattern of the corresponding LocaleConverter.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getSimpleProperty(Object, String)
+
+
+
+ +

+getMappedProperty

+
+public static String getMappedProperty(Object bean,
+                                       String name,
+                                       String key,
+                                       String pattern)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String using the specified conversion pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
key - Lookup key of the property value to be extracted
pattern - The conversion pattern +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getMappedProperty(Object, String, String, String)
+
+
+
+ +

+getMappedProperty

+
+public static String getMappedProperty(Object bean,
+                                       String name,
+                                       String key)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String + The key is specified as a method parameter and must *not* be included + in the property name expression.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
key - Lookup key of the property value to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getMappedProperty(Object, String, String)
+
+
+
+ +

+getMappedPropertyLocale

+
+public static String getMappedPropertyLocale(Object bean,
+                                             String name,
+                                             String pattern)
+                                      throws IllegalAccessException,
+                                             InvocationTargetException,
+                                             NoSuchMethodException
+
+

Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the specified pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(index) of the property value + to be extracted
pattern - The conversion pattern +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getMappedPropertyLocale(Object, String, String)
+
+
+
+ +

+getMappedProperty

+
+public static String getMappedProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(index) of the property value + to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getMappedProperty(Object, String)
+
+
+
+ +

+getNestedProperty

+
+public static String getNestedProperty(Object bean,
+                                       String name,
+                                       String pattern)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, + as a String using the specified pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted
pattern - The conversion pattern +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getNestedProperty(Object, String, String)
+
+
+
+ +

+getNestedProperty

+
+public static String getNestedProperty(Object bean,
+                                       String name)
+                                throws IllegalAccessException,
+                                       InvocationTargetException,
+                                       NoSuchMethodException
+
+

Return the value of the (possibly nested) locale-sensitive property + of the specified name.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getNestedProperty(Object, String)
+
+
+
+ +

+getProperty

+
+public static String getProperty(Object bean,
+                                 String name,
+                                 String pattern)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+

Return the value of the specified locale-sensitive property + of the specified bean.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted
pattern - The conversion pattern +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getProperty(Object, String, String)
+
+
+
+ +

+getProperty

+
+public static String getProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+

Return the value of the specified locale-sensitive property + of the specified bean.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
See Also:
LocaleBeanUtilsBean.getProperty(Object, String)
+
+
+
+ +

+setProperty

+
+public static void setProperty(Object bean,
+                               String name,
+                               Object value)
+                        throws IllegalAccessException,
+                               InvocationTargetException
+
+

Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination property + using the default conversion pattern of the corresponding LocaleConverter.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
LocaleBeanUtilsBean.setProperty(Object, String, Object)
+
+
+
+ +

+setProperty

+
+public static void setProperty(Object bean,
+                               String name,
+                               Object value,
+                               String pattern)
+                        throws IllegalAccessException,
+                               InvocationTargetException
+
+

Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination + property using the specified conversion pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set
pattern - The conversion pattern +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
LocaleBeanUtilsBean.setProperty(Object, String, Object, String)
+
+
+
+ +

+definePropertyType

+
+protected static Class definePropertyType(Object target,
+                                          String name,
+                                          String propName)
+                                   throws IllegalAccessException,
+                                          InvocationTargetException
+
+

Calculate the property type.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
target - The bean
name - The property name
propName - The Simple name of target property +
Returns:
The property's type +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
LocaleBeanUtilsBean.definePropertyType(Object, String, String)
+
+
+
+ +

+convert

+
+protected static Object convert(Class type,
+                                int index,
+                                Object value,
+                                String pattern)
+
+

Convert the specified value to the required type using the + specified conversion pattern.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
type - The Java type of target property
index - The indexed subscript value (if any)
value - The value to be converted
pattern - The conversion pattern +
Returns:
The converted value
See Also:
LocaleBeanUtilsBean.convert(Class, int, Object, String)
+
+
+
+ +

+convert

+
+protected static Object convert(Class type,
+                                int index,
+                                Object value)
+
+

Convert the specified value to the required type.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
type - The Java type of target property
index - The indexed subscript value (if any)
value - The value to be converted +
Returns:
The converted value
See Also:
LocaleBeanUtilsBean.convert(Class, int, Object)
+
+
+
+ +

+invokeSetter

+
+protected static void invokeSetter(Object target,
+                                   String propName,
+                                   String key,
+                                   int index,
+                                   Object newValue)
+                            throws IllegalAccessException,
+                                   InvocationTargetException
+
+

Invoke the setter method.

+ +

For more details see LocaleBeanUtilsBean

+

+

+
Parameters:
target - The bean
propName - The Simple name of target property
key - The Mapped key value (if any)
index - The indexed subscript value (if any)
newValue - The value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
See Also:
LocaleBeanUtilsBean.invokeSetter(Object, String, String, int, Object)
+
+
+
+ +

+calculate

+
+protected static LocaleBeanUtils.Descriptor calculate(Object bean,
+                                                      String name)
+                                               throws IllegalAccessException,
+                                                      InvocationTargetException
+
+
Deprecated. moved into LocaleBeanUtilsBean +

+

Resolve any nested expression to get the actual target bean. +

+

+
Parameters:
bean - The bean
name - The property name +
Returns:
The property's descriptor +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html new file mode 100644 index 0000000..6e40229 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html @@ -0,0 +1,468 @@ + + + + + + + +LocaleBeanUtilsBean.Descriptor (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class LocaleBeanUtilsBean.Descriptor

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor
+
+
+
Enclosing class:
LocaleBeanUtilsBean
+
+
+Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this class + is no longer used by BeanUtils. +

+

+
protected class LocaleBeanUtilsBean.Descriptor
extends Object
+ + +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
LocaleBeanUtilsBean.Descriptor(Object target, + String name, + String propName, + String key, + int index) + +
+          Deprecated. Construct a descriptor instance for the target bean and property.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetIndex() + +
+          Deprecated. Return indexed property index.
+ StringgetKey() + +
+          Deprecated. Return the mapped property key.
+ StringgetName() + +
+          Deprecated. Return property name (includes indexed/mapped expr).
+ StringgetPropName() + +
+          Deprecated. Return the property name.
+ ObjectgetTarget() + +
+          Deprecated. Return the target bean.
+ voidsetIndex(int index) + +
+          Deprecated. Set the indexed property index.
+ voidsetKey(String key) + +
+          Deprecated. Set the mapped property key.
+ voidsetName(String name) + +
+          Deprecated. Set the property name (includes indexed/mapped expr).
+ voidsetPropName(String propName) + +
+          Deprecated. Set the property name.
+ voidsetTarget(Object target) + +
+          Deprecated. Set the target bean.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LocaleBeanUtilsBean.Descriptor

+
+public LocaleBeanUtilsBean.Descriptor(Object target,
+                                      String name,
+                                      String propName,
+                                      String key,
+                                      int index)
+
+
Deprecated. 
Construct a descriptor instance for the target bean and property. +

+

+
Parameters:
target - The target bean
name - The property name (includes indexed/mapped expr)
propName - The property name
key - The mapped property key (if any)
index - The indexed property index (if any)
+
+ + + + + + + + +
+Method Detail
+ +

+getTarget

+
+public Object getTarget()
+
+
Deprecated. 
Return the target bean. +

+

+ +
Returns:
The descriptors target bean
+
+
+
+ +

+setTarget

+
+public void setTarget(Object target)
+
+
Deprecated. 
Set the target bean. +

+

+
Parameters:
target - The target bean
+
+
+
+ +

+getKey

+
+public String getKey()
+
+
Deprecated. 
Return the mapped property key. +

+

+ +
Returns:
the mapped property key (if any)
+
+
+
+ +

+setKey

+
+public void setKey(String key)
+
+
Deprecated. 
Set the mapped property key. +

+

+
Parameters:
key - The mapped property key (if any)
+
+
+
+ +

+getIndex

+
+public int getIndex()
+
+
Deprecated. 
Return indexed property index. +

+

+ +
Returns:
indexed property index (if any)
+
+
+
+ +

+setIndex

+
+public void setIndex(int index)
+
+
Deprecated. 
Set the indexed property index. +

+

+
Parameters:
index - The indexed property index (if any)
+
+
+
+ +

+getName

+
+public String getName()
+
+
Deprecated. 
Return property name (includes indexed/mapped expr). +

+

+ +
Returns:
The property name (includes indexed/mapped expr)
+
+
+
+ +

+setName

+
+public void setName(String name)
+
+
Deprecated. 
Set the property name (includes indexed/mapped expr). +

+

+
Parameters:
name - The property name (includes indexed/mapped expr)
+
+
+
+ +

+getPropName

+
+public String getPropName()
+
+
Deprecated. 
Return the property name. +

+

+ +
Returns:
The property name
+
+
+
+ +

+setPropName

+
+public void setPropName(String propName)
+
+
Deprecated. 
Set the property name. +

+

+
Parameters:
propName - The property name
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html new file mode 100644 index 0000000..2445de9 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html @@ -0,0 +1,1316 @@ + + + + + + + +LocaleBeanUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class LocaleBeanUtilsBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.BeanUtilsBean
+      extended by org.apache.commons.beanutils.locale.LocaleBeanUtilsBean
+
+
+
+
public class LocaleBeanUtilsBean
extends BeanUtilsBean
+ + +

+

Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.

+

+ +

+

+
Since:
+
1.7
+
Author:
+
Craig R. McClanahan, Ralph Schaer, Chris Audley, Rey Francois, Gregor Rayman, Yauheny Mikulski
+
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+protected  classLocaleBeanUtilsBean.Descriptor + +
+          Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this class + is no longer used by BeanUtils.
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
LocaleBeanUtilsBean() + +
+          Construct instance with standard conversion bean
LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils) + +
+          Construct instance that uses given locale conversion
LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils, + ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Construct instance that uses given locale conversion
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  LocaleBeanUtilsBean.Descriptorcalculate(Object bean, + String name) + +
+          Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this method + is no longer used by BeanUtils.
+protected  Objectconvert(Class type, + int index, + Object value) + +
+          Convert the specified value to the required type.
+protected  Objectconvert(Class type, + int index, + Object value, + String pattern) + +
+          Convert the specified value to the required type using the + specified conversion pattern.
+protected  ClassdefinePropertyType(Object target, + String name, + String propName) + +
+          Calculate the property type.
+ booleangetApplyLocalized() + +
+          Is the pattern to be applied localized + (Indicate whether the pattern is localized or not)
+ LocalegetDefaultLocale() + +
+          Gets the default Locale
+ StringgetIndexedProperty(Object bean, + String name) + +
+          Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter.
+ StringgetIndexedProperty(Object bean, + String name, + int index) + +
+          Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter.
+ StringgetIndexedProperty(Object bean, + String name, + int index, + String pattern) + +
+          Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the specified conversion pattern.
+ StringgetIndexedProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String.
+static LocaleBeanUtilsBeangetLocaleBeanUtilsInstance() + +
+          Gets singleton instance
+ LocaleConvertUtilsBeangetLocaleConvertUtils() + +
+          Gets the bean instance used for conversions
+ StringgetMappedProperty(Object bean, + String name) + +
+          Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter.
+ StringgetMappedProperty(Object bean, + String name, + String key) + +
+          Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String + The key is specified as a method parameter and must *not* be included + in the property name expression
+ StringgetMappedProperty(Object bean, + String name, + String key, + String pattern) + +
+          Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String using the specified conversion pattern.
+ StringgetMappedPropertyLocale(Object bean, + String name, + String pattern) + +
+          Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the specified pattern.
+ StringgetNestedProperty(Object bean, + String name) + +
+          Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter.
+ StringgetNestedProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, + as a String using the specified pattern.
+ StringgetProperty(Object bean, + String name) + +
+          Return the value of the specified locale-sensitive property + of the specified bean, no matter which property reference + format is used, as a String using the default + conversion pattern of the corresponding LocaleConverter.
+ StringgetProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the specified locale-sensitive property + of the specified bean, no matter which property reference + format is used, as a String using the specified conversion pattern.
+ StringgetSimpleProperty(Object bean, + String name) + +
+          Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the default + conversion pattern of the corresponding LocaleConverter.
+ StringgetSimpleProperty(Object bean, + String name, + String pattern) + +
+          Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the specified + conversion pattern.
+protected  voidinvokeSetter(Object target, + String propName, + String key, + int index, + Object newValue) + +
+          Invoke the setter method.
+ voidsetApplyLocalized(boolean newApplyLocalized) + +
+          Sets whether the pattern is applied localized + (Indicate whether the pattern is localized or not)
+ voidsetDefaultLocale(Locale locale) + +
+          Sets the default Locale.
+static voidsetInstance(LocaleBeanUtilsBean newInstance) + +
+          Sets the instance which provides the functionality for LocaleBeanUtils.
+ voidsetProperty(Object bean, + String name, + Object value) + +
+          Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination property + using the default conversion pattern of the corresponding LocaleConverter.
+ voidsetProperty(Object bean, + String name, + Object value, + String pattern) + +
+          Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination + property using the specified conversion pattern.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.BeanUtilsBean
cloneBean, convert, copyProperties, copyProperty, describe, getArrayProperty, getConvertUtils, getInstance, getPropertyUtils, initCause, populate, setInstance
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LocaleBeanUtilsBean

+
+public LocaleBeanUtilsBean()
+
+
Construct instance with standard conversion bean +

+

+
+ +

+LocaleBeanUtilsBean

+
+public LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils,
+                           ConvertUtilsBean convertUtilsBean,
+                           PropertyUtilsBean propertyUtilsBean)
+
+
Construct instance that uses given locale conversion +

+

+
Parameters:
localeConvertUtils - use this localeConvertUtils to perform + conversions
convertUtilsBean - use this for standard conversions
propertyUtilsBean - use this for property conversions
+
+
+ +

+LocaleBeanUtilsBean

+
+public LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils)
+
+
Construct instance that uses given locale conversion +

+

+
Parameters:
localeConvertUtils - use this localeConvertUtils to perform + conversions
+
+ + + + + + + + +
+Method Detail
+ +

+getLocaleBeanUtilsInstance

+
+public static LocaleBeanUtilsBean getLocaleBeanUtilsInstance()
+
+
Gets singleton instance +

+

+ +
Returns:
the singleton instance
+
+
+
+ +

+setInstance

+
+public static void setInstance(LocaleBeanUtilsBean newInstance)
+
+
Sets the instance which provides the functionality for LocaleBeanUtils. + This is a pseudo-singleton - an single instance is provided per (thread) context classloader. + This mechanism provides isolation for web apps deployed in the same container. +

+

+
Parameters:
newInstance - a new singleton instance
+
+
+
+ +

+getLocaleConvertUtils

+
+public LocaleConvertUtilsBean getLocaleConvertUtils()
+
+
Gets the bean instance used for conversions +

+

+ +
Returns:
the locale converter bean instance
+
+
+
+ +

+getDefaultLocale

+
+public Locale getDefaultLocale()
+
+
Gets the default Locale +

+

+ +
Returns:
the default locale
+
+
+
+ +

+setDefaultLocale

+
+public void setDefaultLocale(Locale locale)
+
+
Sets the default Locale. +

+

+
Parameters:
locale - the default locale
+
+
+
+ +

+getApplyLocalized

+
+public boolean getApplyLocalized()
+
+
Is the pattern to be applied localized + (Indicate whether the pattern is localized or not) +

+

+ +
Returns:
true if pattern is localized, + otherwise false
+
+
+
+ +

+setApplyLocalized

+
+public void setApplyLocalized(boolean newApplyLocalized)
+
+
Sets whether the pattern is applied localized + (Indicate whether the pattern is localized or not) +

+

+
Parameters:
newApplyLocalized - true if pattern is localized, + otherwise false
+
+
+
+ +

+getIndexedProperty

+
+public String getIndexedProperty(Object bean,
+                                 String name,
+                                 String pattern)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String. The zero-relative index of the + required value must be included (in square brackets) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted
pattern - The conversion pattern +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public String getIndexedProperty(Object bean,
+                                 String name)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified locale-sensitive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. The zero-relative index + of the required value must be included (in square brackets) as a suffix + to the property name, or IllegalArgumentException will be thrown. +

+

+
Overrides:
getIndexedProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname[index] of the property value + to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public String getIndexedProperty(Object bean,
+                                 String name,
+                                 int index,
+                                 String pattern)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the specified conversion pattern. + The index is specified as a method parameter and + must *not* be included in the property name expression +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted
pattern - The conversion pattern +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getIndexedProperty

+
+public String getIndexedProperty(Object bean,
+                                 String name,
+                                 int index)
+                          throws IllegalAccessException,
+                                 InvocationTargetException,
+                                 NoSuchMethodException
+
+
Return the value of the specified locale-sensetive indexed property + of the specified bean, as a String using the default conversion pattern of + the corresponding LocaleConverter. + The index is specified as a method parameter and + must *not* be included in the property name expression +

+

+
Overrides:
getIndexedProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
index - Index of the property value to be extracted +
Returns:
The indexed property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getSimpleProperty

+
+public String getSimpleProperty(Object bean,
+                                String name,
+                                String pattern)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the specified + conversion pattern. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted
pattern - The conversion pattern +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getSimpleProperty

+
+public String getSimpleProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified simple locale-sensitive property + of the specified bean, converted to a String using the default + conversion pattern of the corresponding LocaleConverter. +

+

+
Overrides:
getSimpleProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - Name of the property to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedProperty

+
+public String getMappedProperty(Object bean,
+                                String name,
+                                String key,
+                                String pattern)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String using the specified conversion pattern. + The key is specified as a method parameter and must *not* be included in + the property name expression. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
key - Lookup key of the property value to be extracted
pattern - The conversion pattern +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedProperty

+
+public String getMappedProperty(Object bean,
+                                String name,
+                                String key)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified mapped locale-sensitive property + of the specified bean, as a String + The key is specified as a method parameter and must *not* be included + in the property name expression +

+

+
Overrides:
getMappedProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - Simple property name of the property value to be extracted
key - Lookup key of the property value to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedPropertyLocale

+
+public String getMappedPropertyLocale(Object bean,
+                                      String name,
+                                      String pattern)
+                               throws IllegalAccessException,
+                                      InvocationTargetException,
+                                      NoSuchMethodException
+
+
Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the specified pattern. + The String-valued key of the required value + must be included (in parentheses) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(index) of the property value + to be extracted
pattern - The conversion pattern +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getMappedProperty

+
+public String getMappedProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the specified locale-sensitive mapped property + of the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter. + The String-valued key of the required value + must be included (in parentheses) as a suffix to + the property name, or IllegalArgumentException will be + thrown. +

+

+
Overrides:
getMappedProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - propertyname(index) of the property value + to be extracted +
Returns:
The mapped property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getNestedProperty

+
+public String getNestedProperty(Object bean,
+                                String name,
+                                String pattern)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, + as a String using the specified pattern. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted
pattern - The conversion pattern +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getNestedProperty

+
+public String getNestedProperty(Object bean,
+                                String name)
+                         throws IllegalAccessException,
+                                InvocationTargetException,
+                                NoSuchMethodException
+
+
Return the value of the (possibly nested) locale-sensitive property + of the specified name, for the specified bean, as a String using the default + conversion pattern of the corresponding LocaleConverter. +

+

+
Overrides:
getNestedProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly nested name of the property to be extracted +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
IllegalArgumentException - if a nested reference to a + property returns null +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getProperty

+
+public String getProperty(Object bean,
+                          String name,
+                          String pattern)
+                   throws IllegalAccessException,
+                          InvocationTargetException,
+                          NoSuchMethodException
+
+
Return the value of the specified locale-sensitive property + of the specified bean, no matter which property reference + format is used, as a String using the specified conversion pattern. +

+

+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted
pattern - The conversion pattern +
Returns:
The nested property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+getProperty

+
+public String getProperty(Object bean,
+                          String name)
+                   throws IllegalAccessException,
+                          InvocationTargetException,
+                          NoSuchMethodException
+
+
Return the value of the specified locale-sensitive property + of the specified bean, no matter which property reference + format is used, as a String using the default + conversion pattern of the corresponding LocaleConverter. +

+

+
Overrides:
getProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean whose property is to be extracted
name - Possibly indexed and/or nested name of the property + to be extracted +
Returns:
The property's value, converted to a String +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception +
NoSuchMethodException - if an accessor method for this + propety cannot be found
+
+
+
+ +

+setProperty

+
+public void setProperty(Object bean,
+                        String name,
+                        Object value)
+                 throws IllegalAccessException,
+                        InvocationTargetException
+
+
Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination property + using the default conversion pattern of the corresponding LocaleConverter. +

+

+
Overrides:
setProperty in class BeanUtilsBean
+
+
+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+setProperty

+
+public void setProperty(Object bean,
+                        String name,
+                        Object value,
+                        String pattern)
+                 throws IllegalAccessException,
+                        InvocationTargetException
+
+
Set the specified locale-sensitive property value, performing type + conversions as required to conform to the type of the destination + property using the specified conversion pattern. +

+

+
Parameters:
bean - Bean on which setting is to be performed
name - Property name (can be nested/indexed/mapped/combo)
value - Value to be set
pattern - The conversion pattern +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+definePropertyType

+
+protected Class definePropertyType(Object target,
+                                   String name,
+                                   String propName)
+                            throws IllegalAccessException,
+                                   InvocationTargetException
+
+
Calculate the property type. +

+

+
Parameters:
target - The bean
name - The property name
propName - The Simple name of target property +
Returns:
The property's type +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+convert

+
+protected Object convert(Class type,
+                         int index,
+                         Object value,
+                         String pattern)
+
+
Convert the specified value to the required type using the + specified conversion pattern. +

+

+
Parameters:
type - The Java type of target property
index - The indexed subscript value (if any)
value - The value to be converted
pattern - The conversion pattern +
Returns:
The converted value
+
+
+
+ +

+convert

+
+protected Object convert(Class type,
+                         int index,
+                         Object value)
+
+
Convert the specified value to the required type. +

+

+
Parameters:
type - The Java type of target property
index - The indexed subscript value (if any)
value - The value to be converted +
Returns:
The converted value
+
+
+
+ +

+invokeSetter

+
+protected void invokeSetter(Object target,
+                            String propName,
+                            String key,
+                            int index,
+                            Object newValue)
+                     throws IllegalAccessException,
+                            InvocationTargetException
+
+
Invoke the setter method. +

+

+
Parameters:
target - The bean
propName - The Simple name of target property
key - The Mapped key value (if any)
index - The indexed subscript value (if any)
newValue - The value to be set +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+
+ +

+calculate

+
+protected LocaleBeanUtilsBean.Descriptor calculate(Object bean,
+                                                   String name)
+                                            throws IllegalAccessException,
+                                                   InvocationTargetException
+
+
Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this method + is no longer used by BeanUtils. +

+

Resolve any nested expression to get the actual target property. +

+

+
Parameters:
bean - The bean
name - The property name +
Returns:
The property's descriptor +
Throws: +
IllegalAccessException - if the caller does not have + access to the property accessor method +
InvocationTargetException - if the property accessor method + throws an exception
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtils.html new file mode 100644 index 0000000..f5f2a4c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtils.html @@ -0,0 +1,797 @@ + + + + + + + +LocaleConvertUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class LocaleConvertUtils

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.LocaleConvertUtils
+
+
+
+
public class LocaleConvertUtils
extends Object
+ + +

+

Utility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.

+ +

The implementations for these method are provided by LocaleConvertUtilsBean. + These static utility method use the default instance. More sophisticated can be provided + by using a LocaleConvertUtilsBean instance.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
LocaleConvertUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static Stringconvert(Object value) + +
+          Convert the specified locale-sensitive value into a String.
+static Stringconvert(Object value, + Locale locale, + String pattern) + +
+          Convert the specified locale-sensitive value into a String + using the paticular convertion pattern.
+static Stringconvert(Object value, + String pattern) + +
+          Convert the specified locale-sensitive value into a String + using the conversion pattern.
+static Objectconvert(String[] values, + Class clazz) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible).
+static Objectconvert(String[] values, + Class clazz, + Locale locale, + String pattern) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern.
+static Objectconvert(String[] values, + Class clazz, + String pattern) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern.
+static Objectconvert(String value, + Class clazz) + +
+          Convert the specified value to an object of the specified class (if + possible).
+static Objectconvert(String value, + Class clazz, + Locale locale, + String pattern) + +
+          Convert the specified value to an object of the specified class (if + possible) using the convertion pattern.
+static Objectconvert(String value, + Class clazz, + String pattern) + +
+          Convert the specified value to an object of the specified class (if + possible) using the convertion pattern.
+protected static FastHashMapcreate(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+static voidderegister() + +
+          Remove any registered LocaleConverter.
+static voidderegister(Class clazz, + Locale locale) + +
+          Remove any registered LocaleConverter for the specified locale and Class.
+static voidderegister(Locale locale) + +
+          Remove any registered LocaleConverter for the specified locale.
+static booleangetApplyLocalized() + +
+          Gets applyLocalized.
+static LocalegetDefaultLocale() + +
+          Gets the Locale which will be used when + no Locale is passed to a method.
+static LocaleConverterlookup(Class clazz, + Locale locale) + +
+          Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null.
+protected static FastHashMaplookup(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+static voidregister(LocaleConverter converter, + Class clazz, + Locale locale) + +
+          Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter.
+static voidsetApplyLocalized(boolean newApplyLocalized) + +
+          Sets applyLocalized.
+static voidsetDefaultLocale(Locale locale) + +
+          Sets the Locale which will be used when + no Locale is passed to a method.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LocaleConvertUtils

+
+public LocaleConvertUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultLocale

+
+public static Locale getDefaultLocale()
+
+

Gets the Locale which will be used when + no Locale is passed to a method.

+ +

For more details see LocaleConvertUtilsBean

+

+

+ +
Returns:
the default locale
See Also:
LocaleConvertUtilsBean.getDefaultLocale()
+
+
+
+ +

+setDefaultLocale

+
+public static void setDefaultLocale(Locale locale)
+
+

Sets the Locale which will be used when + no Locale is passed to a method.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
locale - the default locale
See Also:
LocaleConvertUtilsBean.setDefaultLocale(Locale)
+
+
+
+ +

+getApplyLocalized

+
+public static boolean getApplyLocalized()
+
+

Gets applyLocalized.

+ +

For more details see LocaleConvertUtilsBean

+

+

+ +
Returns:
true if pattern is localized, + otherwise false
See Also:
LocaleConvertUtilsBean.getApplyLocalized()
+
+
+
+ +

+setApplyLocalized

+
+public static void setApplyLocalized(boolean newApplyLocalized)
+
+

Sets applyLocalized.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
newApplyLocalized - true if pattern is localized, + otherwise false
See Also:
LocaleConvertUtilsBean.setApplyLocalized(boolean)
+
+
+
+ +

+convert

+
+public static String convert(Object value)
+
+

Convert the specified locale-sensitive value into a String.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
value - The Value to be converted +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(Object)
+
+
+
+ +

+convert

+
+public static String convert(Object value,
+                             String pattern)
+
+

Convert the specified locale-sensitive value into a String + using the conversion pattern.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
value - The Value to be converted
pattern - The convertion pattern +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(Object, String)
+
+
+
+ +

+convert

+
+public static String convert(Object value,
+                             Locale locale,
+                             String pattern)
+
+

Convert the specified locale-sensitive value into a String + using the paticular convertion pattern.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
value - The Value to be converted
locale - The locale
pattern - The convertion pattern +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(Object, Locale, String)
+
+
+
+ +

+convert

+
+public static Object convert(String value,
+                             Class clazz)
+
+

Convert the specified value to an object of the specified class (if + possible). Otherwise, return a String representation of the value.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
value - The String scalar value to be converted
clazz - The Data type to which this value should be converted. +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(String, Class)
+
+
+
+ +

+convert

+
+public static Object convert(String value,
+                             Class clazz,
+                             String pattern)
+
+

Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. Otherwise, return a String + representation of the value.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
value - The String scalar value to be converted
clazz - The Data type to which this value should be converted.
pattern - The convertion pattern +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(String, Class, String)
+
+
+
+ +

+convert

+
+public static Object convert(String value,
+                             Class clazz,
+                             Locale locale,
+                             String pattern)
+
+

Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. Otherwise, return a String + representation of the value.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
value - The String scalar value to be converted
clazz - The Data type to which this value should be converted.
locale - The locale
pattern - The convertion pattern +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(String, Class, Locale, String)
+
+
+
+ +

+convert

+
+public static Object convert(String[] values,
+                             Class clazz,
+                             String pattern)
+
+

Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
values - Value to be converted (may be null)
clazz - Java array or element class to be converted to
pattern - The convertion pattern +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(String[], Class, String)
+
+
+
+ +

+convert

+
+public static Object convert(String[] values,
+                             Class clazz)
+
+

Convert an array of specified values to an array of objects of the + specified class (if possible).

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
values - Value to be converted (may be null)
clazz - Java array or element class to be converted to +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(String[], Class)
+
+
+
+ +

+convert

+
+public static Object convert(String[] values,
+                             Class clazz,
+                             Locale locale,
+                             String pattern)
+
+

Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
values - Value to be converted (may be null)
clazz - Java array or element class to be converted to
locale - The locale
pattern - The convertion pattern +
Returns:
the converted value
See Also:
LocaleConvertUtilsBean.convert(String[], Class, Locale, String)
+
+
+
+ +

+register

+
+public static void register(LocaleConverter converter,
+                            Class clazz,
+                            Locale locale)
+
+

Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
converter - The LocaleConverter to be registered
clazz - The Destination class for conversions performed by this + Converter
locale - The locale
See Also:
LocaleConvertUtilsBean.register(LocaleConverter, Class, Locale)
+
+
+
+ +

+deregister

+
+public static void deregister()
+
+

Remove any registered LocaleConverter.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
See Also:
LocaleConvertUtilsBean.deregister()
+
+
+
+ +

+deregister

+
+public static void deregister(Locale locale)
+
+

Remove any registered LocaleConverter for the specified locale.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
locale - The locale
See Also:
LocaleConvertUtilsBean.deregister(Locale)
+
+
+
+ +

+deregister

+
+public static void deregister(Class clazz,
+                              Locale locale)
+
+

Remove any registered LocaleConverter for the specified locale and Class.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
clazz - Class for which to remove a registered Converter
locale - The locale
See Also:
LocaleConvertUtilsBean.deregister(Class, Locale)
+
+
+
+ +

+lookup

+
+public static LocaleConverter lookup(Class clazz,
+                                     Locale locale)
+
+

Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
clazz - Class for which to return a registered Converter
locale - The Locale +
Returns:
The registered locale Converter, if any
See Also:
LocaleConvertUtilsBean.lookup(Class, Locale)
+
+
+
+ +

+lookup

+
+protected static FastHashMap lookup(Locale locale)
+
+
Deprecated. This method will be modified to return a Map in the next release. +

+

Look up and return any registered FastHashMap instance for the specified locale.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
locale - The Locale +
Returns:
The FastHashMap instance contains the all LocaleConverter types for + the specified locale.
See Also:
LocaleConvertUtilsBean.lookup(Locale)
+
+
+
+ +

+create

+
+protected static FastHashMap create(Locale locale)
+
+
Deprecated. This method will be modified to return a Map in the next release. +

+

Create all LocaleConverter types for specified locale.

+ +

For more details see LocaleConvertUtilsBean

+

+

+
Parameters:
locale - The Locale +
Returns:
The FastHashMap instance contains the all LocaleConverter types + for the specified locale.
See Also:
LocaleConvertUtilsBean.create(Locale)
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html new file mode 100644 index 0000000..e8665ea --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html @@ -0,0 +1,838 @@ + + + + + + + +LocaleConvertUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Class LocaleConvertUtilsBean

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.LocaleConvertUtilsBean
+
+
+
+
public class LocaleConvertUtilsBean
extends Object
+ + +

+

Utility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.

+ +

This class provides the implementations used by the static utility methods in + LocaleConvertUtils.

+ +

The actual LocaleConverter instance to be used + can be registered for each possible destination Class. Unless you override them, standard + LocaleConverter instances are provided for all of the following + destination Classes:

+
    +
  • java.lang.BigDecimal
  • +
  • java.lang.BigInteger
  • +
  • byte and java.lang.Byte
  • +
  • double and java.lang.Double
  • +
  • float and java.lang.Float
  • +
  • int and java.lang.Integer
  • +
  • long and java.lang.Long
  • +
  • short and java.lang.Short
  • +
  • java.lang.String
  • +
  • java.sql.Date
  • +
  • java.sql.Time
  • +
  • java.sql.Timestamp
  • +
+ +

For backwards compatibility, the standard locale converters + for primitive types (and the corresponding wrapper classes). + + If you prefer to have another LocaleConverter + thrown instead, replace the standard LocaleConverter instances + with ones created with the one of the appropriate constructors. + + It's important that LocaleConverter should be registered for + the specified locale and Class (or primitive type). +

+ +

+

+
Since:
+
1.7
+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
LocaleConvertUtilsBean() + +
+          Makes the state by default (deregisters all converters for all locales) + and then registers default locale converters.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ Stringconvert(Object value) + +
+          Convert the specified locale-sensitive value into a String.
+ Stringconvert(Object value, + Locale locale, + String pattern) + +
+          Convert the specified locale-sensitive value into a String + using the paticular convertion pattern.
+ Stringconvert(Object value, + String pattern) + +
+          Convert the specified locale-sensitive value into a String + using the conversion pattern.
+ Objectconvert(String[] values, + Class clazz) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible) .
+ Objectconvert(String[] values, + Class clazz, + Locale locale, + String pattern) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern.
+ Objectconvert(String[] values, + Class clazz, + String pattern) + +
+          Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern.
+ Objectconvert(String value, + Class clazz) + +
+          Convert the specified value to an object of the specified class (if + possible).
+ Objectconvert(String value, + Class clazz, + Locale locale, + String pattern) + +
+          Convert the specified value to an object of the specified class (if + possible) using the convertion pattern.
+ Objectconvert(String value, + Class clazz, + String pattern) + +
+          Convert the specified value to an object of the specified class (if + possible) using the convertion pattern.
+protected  FastHashMapcreate(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+ voidderegister() + +
+          Remove any registered LocaleConverter.
+ voidderegister(Class clazz, + Locale locale) + +
+          Remove any registered LocaleConverter for the specified locale and Class.
+ voidderegister(Locale locale) + +
+          Remove any registered LocaleConverter for the specified locale
+ booleangetApplyLocalized() + +
+          getter for applyLocalized
+ LocalegetDefaultLocale() + +
+          getter for defaultLocale.
+static LocaleConvertUtilsBeangetInstance() + +
+          Gets singleton instance.
+ LocaleConverterlookup(Class clazz, + Locale locale) + +
+          Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null.
+protected  FastHashMaplookup(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+ voidregister(LocaleConverter converter, + Class clazz, + Locale locale) + +
+          Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter.
+ voidsetApplyLocalized(boolean newApplyLocalized) + +
+          setter for applyLocalized
+ voidsetDefaultLocale(Locale locale) + +
+          setter for defaultLocale.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LocaleConvertUtilsBean

+
+public LocaleConvertUtilsBean()
+
+
Makes the state by default (deregisters all converters for all locales) + and then registers default locale converters. +

+

+ + + + + + + + +
+Method Detail
+ +

+getInstance

+
+public static LocaleConvertUtilsBean getInstance()
+
+
Gets singleton instance. + This is the same as the instance used by the default LocaleBeanUtilsBean singleton. +

+

+ +
Returns:
the singleton instance
+
+
+
+ +

+getDefaultLocale

+
+public Locale getDefaultLocale()
+
+
getter for defaultLocale. +

+

+ +
Returns:
the default locale
+
+
+
+ +

+setDefaultLocale

+
+public void setDefaultLocale(Locale locale)
+
+
setter for defaultLocale. +

+

+
Parameters:
locale - the default locale
+
+
+
+ +

+getApplyLocalized

+
+public boolean getApplyLocalized()
+
+
getter for applyLocalized +

+

+ +
Returns:
true if pattern is localized, + otherwise false
+
+
+
+ +

+setApplyLocalized

+
+public void setApplyLocalized(boolean newApplyLocalized)
+
+
setter for applyLocalized +

+

+
Parameters:
newApplyLocalized - true if pattern is localized, + otherwise false
+
+
+
+ +

+convert

+
+public String convert(Object value)
+
+
Convert the specified locale-sensitive value into a String. +

+

+
Parameters:
value - The Value to be converted +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public String convert(Object value,
+                      String pattern)
+
+
Convert the specified locale-sensitive value into a String + using the conversion pattern. +

+

+
Parameters:
value - The Value to be converted
pattern - The convertion pattern +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public String convert(Object value,
+                      Locale locale,
+                      String pattern)
+
+
Convert the specified locale-sensitive value into a String + using the paticular convertion pattern. +

+

+
Parameters:
value - The Value to be converted
locale - The locale
pattern - The convertion pattern +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String value,
+                      Class clazz)
+
+
Convert the specified value to an object of the specified class (if + possible). Otherwise, return a String representation of the value. +

+

+
Parameters:
value - The String scalar value to be converted
clazz - The Data type to which this value should be converted. +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String value,
+                      Class clazz,
+                      String pattern)
+
+
Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. Otherwise, return a String + representation of the value. +

+

+
Parameters:
value - The String scalar value to be converted
clazz - The Data type to which this value should be converted.
pattern - The convertion pattern +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String value,
+                      Class clazz,
+                      Locale locale,
+                      String pattern)
+
+
Convert the specified value to an object of the specified class (if + possible) using the convertion pattern. Otherwise, return a String + representation of the value. +

+

+
Parameters:
value - The String scalar value to be converted
clazz - The Data type to which this value should be converted.
locale - The locale
pattern - The convertion pattern +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String[] values,
+                      Class clazz,
+                      String pattern)
+
+
Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern. +

+

+
Parameters:
values - Value to be converted (may be null)
clazz - Java array or element class to be converted to
pattern - The convertion pattern +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String[] values,
+                      Class clazz)
+
+
Convert an array of specified values to an array of objects of the + specified class (if possible) . +

+

+
Parameters:
values - Value to be converted (may be null)
clazz - Java array or element class to be converted to +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+convert

+
+public Object convert(String[] values,
+                      Class clazz,
+                      Locale locale,
+                      String pattern)
+
+
Convert an array of specified values to an array of objects of the + specified class (if possible) using the convertion pattern. +

+

+
Parameters:
values - Value to be converted (may be null)
clazz - Java array or element class to be converted to
locale - The locale
pattern - The convertion pattern +
Returns:
the converted value +
Throws: +
ConversionException - if thrown by an + underlying Converter
+
+
+
+ +

+register

+
+public void register(LocaleConverter converter,
+                     Class clazz,
+                     Locale locale)
+
+
Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter. +

+

+
Parameters:
converter - The LocaleConverter to be registered
clazz - The Destination class for conversions performed by this + Converter
locale - The locale
+
+
+
+ +

+deregister

+
+public void deregister()
+
+
Remove any registered LocaleConverter. +

+

+
+
+
+
+ +

+deregister

+
+public void deregister(Locale locale)
+
+
Remove any registered LocaleConverter for the specified locale +

+

+
Parameters:
locale - The locale
+
+
+
+ +

+deregister

+
+public void deregister(Class clazz,
+                       Locale locale)
+
+
Remove any registered LocaleConverter for the specified locale and Class. +

+

+
Parameters:
clazz - Class for which to remove a registered Converter
locale - The locale
+
+
+
+ +

+lookup

+
+public LocaleConverter lookup(Class clazz,
+                              Locale locale)
+
+
Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null. +

+

+
Parameters:
clazz - Class for which to return a registered Converter
locale - The Locale +
Returns:
The registered locale Converter, if any
+
+
+
+ +

+lookup

+
+protected FastHashMap lookup(Locale locale)
+
+
Deprecated. This method will be modified to return a Map in the next release. +

+

Look up and return any registered FastHashMap instance for the specified locale; + if there is no registered one, return null. +

+

+
Parameters:
locale - The Locale +
Returns:
The FastHashMap instance contains the all LocaleConverter types for + the specified locale.
+
+
+
+ +

+create

+
+protected FastHashMap create(Locale locale)
+
+
Deprecated. This method will be modified to return a Map in the next release. +

+

Create all LocaleConverter types for specified locale. +

+

+
Parameters:
locale - The Locale +
Returns:
The FastHashMap instance contains the all LocaleConverter types + for the specified locale.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConverter.html new file mode 100644 index 0000000..4cea6bf --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/LocaleConverter.html @@ -0,0 +1,247 @@ + + + + + + + +LocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale +
+Interface LocaleConverter

+
+
All Superinterfaces:
Converter
+
+
+
All Known Implementing Classes:
BaseLocaleConverter, BigDecimalLocaleConverter, BigIntegerLocaleConverter, ByteLocaleConverter, DateLocaleConverter, DecimalLocaleConverter, DoubleLocaleConverter, FloatLocaleConverter, IntegerLocaleConverter, LongLocaleConverter, ShortLocaleConverter, SqlDateLocaleConverter, SqlTimeLocaleConverter, SqlTimestampLocaleConverter, StringLocaleConverter
+
+
+
+
public interface LocaleConverter
extends Converter
+ + +

+

General purpose locale-sensitive data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another. +

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + + + + + + +
+Method Summary
+ Objectconvert(Class type, + Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from interface org.apache.commons.beanutils.Converter
convert
+  +

+ + + + + + + + +
+Method Detail
+ +

+convert

+
+Object convert(Class type,
+               Object value,
+               String pattern)
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
+
+
+
Parameters:
type - Data type to which this value should be converted
value - The input value to be converted
pattern - The user-defined pattern is used for the input object formatting. +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/BaseLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/BaseLocaleConverter.html new file mode 100644 index 0000000..94ee62c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/BaseLocaleConverter.html @@ -0,0 +1,359 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.BaseLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.BaseLocaleConverter

+
+ + + + + + + + + +
+Packages that use BaseLocaleConverter
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of BaseLocaleConverter in org.apache.commons.beanutils.locale.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subclasses of BaseLocaleConverter in org.apache.commons.beanutils.locale.converters
+ classBigDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classBigIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classByteLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDoubleLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classFloatLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classLongLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classShortLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimeLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimestampLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classStringLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive object into a java.lang.String object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.Descriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.Descriptor.html new file mode 100644 index 0000000..c2bdb62 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.Descriptor.html @@ -0,0 +1,182 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.LocaleBeanUtils.Descriptor

+
+ + + + + + + + + +
+Packages that use LocaleBeanUtils.Descriptor
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of LocaleBeanUtils.Descriptor in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils.locale that return LocaleBeanUtils.Descriptor
+protected static LocaleBeanUtils.DescriptorLocaleBeanUtils.calculate(Object bean, + String name) + +
+          Deprecated. moved into LocaleBeanUtilsBean
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.html new file mode 100644 index 0000000..948b96c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.LocaleBeanUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.LocaleBeanUtils

+
+No usage of org.apache.commons.beanutils.locale.LocaleBeanUtils +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.Descriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.Descriptor.html new file mode 100644 index 0000000..9ecd070 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.Descriptor.html @@ -0,0 +1,184 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor

+
+ + + + + + + + + +
+Packages that use LocaleBeanUtilsBean.Descriptor
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of LocaleBeanUtilsBean.Descriptor in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils.locale that return LocaleBeanUtilsBean.Descriptor
+protected  LocaleBeanUtilsBean.DescriptorLocaleBeanUtilsBean.calculate(Object bean, + String name) + +
+          Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this method + is no longer used by BeanUtils.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.html new file mode 100644 index 0000000..b31d15c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleBeanUtilsBean.html @@ -0,0 +1,197 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.LocaleBeanUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.LocaleBeanUtilsBean

+
+ + + + + + + + + +
+Packages that use LocaleBeanUtilsBean
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of LocaleBeanUtilsBean in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils.locale that return LocaleBeanUtilsBean
+static LocaleBeanUtilsBeanLocaleBeanUtilsBean.getLocaleBeanUtilsInstance() + +
+          Gets singleton instance
+  +

+ + + + + + + + + +
Methods in org.apache.commons.beanutils.locale with parameters of type LocaleBeanUtilsBean
+static voidLocaleBeanUtilsBean.setInstance(LocaleBeanUtilsBean newInstance) + +
+          Sets the instance which provides the functionality for LocaleBeanUtils.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtils.html new file mode 100644 index 0000000..703a600 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtils.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.LocaleConvertUtils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.LocaleConvertUtils

+
+No usage of org.apache.commons.beanutils.locale.LocaleConvertUtils +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtilsBean.html new file mode 100644 index 0000000..b263844 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConvertUtilsBean.html @@ -0,0 +1,211 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.LocaleConvertUtilsBean (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.LocaleConvertUtilsBean

+
+ + + + + + + + + +
+Packages that use LocaleConvertUtilsBean
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of LocaleConvertUtilsBean in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils.locale that return LocaleConvertUtilsBean
+static LocaleConvertUtilsBeanLocaleConvertUtilsBean.getInstance() + +
+          Gets singleton instance.
+ LocaleConvertUtilsBeanLocaleBeanUtilsBean.getLocaleConvertUtils() + +
+          Gets the bean instance used for conversions
+  +

+ + + + + + + + + + + +
Constructors in org.apache.commons.beanutils.locale with parameters of type LocaleConvertUtilsBean
LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils) + +
+          Construct instance that uses given locale conversion
LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils, + ConvertUtilsBean convertUtilsBean, + PropertyUtilsBean propertyUtilsBean) + +
+          Construct instance that uses given locale conversion
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConverter.html new file mode 100644 index 0000000..c6ed722 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/class-use/LocaleConverter.html @@ -0,0 +1,448 @@ + + + + + + + +Uses of Interface org.apache.commons.beanutils.locale.LocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.beanutils.locale.LocaleConverter

+
+ + + + + + + + + + + + + +
+Packages that use LocaleConverter
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of LocaleConverter in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + +
Classes in org.apache.commons.beanutils.locale that implement LocaleConverter
+ classBaseLocaleConverter + +
+          The base class for all standart type locale-sensitive converters.
+  +

+ + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils.locale that return LocaleConverter
+ LocaleConverterLocaleConvertUtilsBean.lookup(Class clazz, + Locale locale) + +
+          Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null.
+static LocaleConverterLocaleConvertUtils.lookup(Class clazz, + Locale locale) + +
+          Look up and return any registered LocaleConverter for the specified + destination class and locale; if there is no registered Converter, return + null.
+  +

+ + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils.locale with parameters of type LocaleConverter
+ voidLocaleConvertUtilsBean.register(LocaleConverter converter, + Class clazz, + Locale locale) + +
+          Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter.
+static voidLocaleConvertUtils.register(LocaleConverter converter, + Class clazz, + Locale locale) + +
+          Register a custom LocaleConverter for the specified destination + Class, replacing any previously registered converter.
+  +

+ + + + + +
+Uses of LocaleConverter in org.apache.commons.beanutils.locale.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes in org.apache.commons.beanutils.locale.converters that implement LocaleConverter
+ classBigDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classBigIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classByteLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDoubleLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classFloatLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classLongLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classShortLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimeLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimestampLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classStringLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive object into a java.lang.String object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html new file mode 100644 index 0000000..826dde3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html @@ -0,0 +1,595 @@ + + + + + + + +BigDecimalLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class BigDecimalLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class BigDecimalLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
BigDecimalLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigDecimalLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigDecimalLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigDecimalLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigDecimalLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigDecimalLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigDecimalLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of + BigDecimal type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Locale locale,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Locale locale,
+                                 String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Locale locale,
+                                 String pattern,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Object defaultValue,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Object defaultValue,
+                                 Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Object defaultValue,
+                                 Locale locale,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Object defaultValue,
+                                 Locale locale,
+                                 String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+BigDecimalLocaleConverter

+
+public BigDecimalLocaleConverter(Object defaultValue,
+                                 Locale locale,
+                                 String pattern,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of + BigDecimal type. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html new file mode 100644 index 0000000..1e407b1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html @@ -0,0 +1,595 @@ + + + + + + + +BigIntegerLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class BigIntegerLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class BigIntegerLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
BigIntegerLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
BigIntegerLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigIntegerLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigIntegerLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigIntegerLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigIntegerLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
BigIntegerLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of + BigInteger type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Locale locale,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Locale locale,
+                                 String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Locale locale,
+                                 String pattern,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Object defaultValue,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Object defaultValue,
+                                 Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Object defaultValue,
+                                 Locale locale,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Object defaultValue,
+                                 Locale locale,
+                                 String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+BigIntegerLocaleConverter

+
+public BigIntegerLocaleConverter(Object defaultValue,
+                                 Locale locale,
+                                 String pattern,
+                                 boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of + BigInteger type. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html new file mode 100644 index 0000000..05f74fe --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html @@ -0,0 +1,593 @@ + + + + + + + +ByteLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class ByteLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.ByteLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class ByteLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
ByteLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ByteLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ByteLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ByteLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ByteLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ByteLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ByteLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ByteLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ByteLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ByteLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ByteLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ByteLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Locale locale,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Locale locale,
+                           String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Locale locale,
+                           String pattern,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Object defaultValue,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Object defaultValue,
+                           Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+ByteLocaleConverter

+
+public ByteLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           String pattern,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. This method will return values of type Byte. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html new file mode 100644 index 0000000..6c95a6a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html @@ -0,0 +1,637 @@ + + + + + + + +DateLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class DateLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DateLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
Direct Known Subclasses:
SqlDateLocaleConverter, SqlTimeLocaleConverter, SqlTimestampLocaleConverter
+
+
+
+
public class DateLocaleConverter
extends BaseLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski, Michael Szlapa
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
DateLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DateLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DateLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DateLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DateLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DateLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DateLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DateLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DateLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DateLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DateLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DateLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanisLenient() + +
+          Returns whether date formatting is lenient.
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ voidsetLenient(boolean lenient) + +
+          Specify whether or not date-time parsing should be lenient.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DateLocaleConverter

+
+public DateLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Locale locale,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Locale locale,
+                           String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Locale locale,
+                           String pattern,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Object defaultValue,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Object defaultValue,
+                           Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+DateLocaleConverter

+
+public DateLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           String pattern,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+isLenient

+
+public boolean isLenient()
+
+
Returns whether date formatting is lenient. +

+

+ +
Returns:
true if the DateFormat used for formatting is lenient
See Also:
DateFormat.isLenient()
+
+
+
+ +

+setLenient

+
+public void setLenient(boolean lenient)
+
+
Specify whether or not date-time parsing should be lenient. +

+

+
Parameters:
lenient - true if the DateFormat used for formatting should be lenient
See Also:
DateFormat.setLenient(boolean)
+
+
+
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
Specified by:
parse in class BaseLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
the converted Date value +
Throws: +
ConversionException - if conversion cannot be performed successfully +
ParseException - if an error occurs parsing
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html new file mode 100644 index 0000000..19ac798 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html @@ -0,0 +1,597 @@ + + + + + + + +DecimalLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class DecimalLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
Direct Known Subclasses:
BigDecimalLocaleConverter, BigIntegerLocaleConverter, ByteLocaleConverter, DoubleLocaleConverter, FloatLocaleConverter, IntegerLocaleConverter, LongLocaleConverter, ShortLocaleConverter
+
+
+
+
public class DecimalLocaleConverter
extends BaseLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Since:
+
1.7
+
Author:
+
Yauheny Mikulski, Yoav Shapira
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
DecimalLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DecimalLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DecimalLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DecimalLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DecimalLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DecimalLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DecimalLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DecimalLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DecimalLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DecimalLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DecimalLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DecimalLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output + object of the specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Object defaultValue,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Object defaultValue,
+                              Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+DecimalLocaleConverter

+
+public DecimalLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output + object of the specified type. +

+

+
Specified by:
parse in class BaseLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html new file mode 100644 index 0000000..d4ad651 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html @@ -0,0 +1,593 @@ + + + + + + + +DoubleLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class DoubleLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class DoubleLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
DoubleLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DoubleLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DoubleLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DoubleLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DoubleLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DoubleLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
DoubleLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DoubleLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DoubleLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DoubleLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DoubleLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
DoubleLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Locale locale,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Locale locale,
+                             String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Locale locale,
+                             String pattern,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Object defaultValue,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Object defaultValue,
+                             Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Object defaultValue,
+                             Locale locale,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Object defaultValue,
+                             Locale locale,
+                             String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+DoubleLocaleConverter

+
+public DoubleLocaleConverter(Object defaultValue,
+                             Locale locale,
+                             String pattern,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. This method will return Double type. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html new file mode 100644 index 0000000..5e2ac19 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html @@ -0,0 +1,594 @@ + + + + + + + +FloatLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class FloatLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.FloatLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class FloatLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
FloatLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
FloatLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
FloatLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
FloatLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
FloatLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
FloatLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
FloatLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
FloatLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
FloatLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
FloatLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
FloatLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
FloatLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Locale locale,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Locale locale,
+                            String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Locale locale,
+                            String pattern,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Object defaultValue,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Object defaultValue,
+                            Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Object defaultValue,
+                            Locale locale,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Object defaultValue,
+                            Locale locale,
+                            String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+FloatLocaleConverter

+
+public FloatLocaleConverter(Object defaultValue,
+                            Locale locale,
+                            String pattern,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. This method will return Float value or throw exception if value + can not be stored in the Float. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html new file mode 100644 index 0000000..08fbb20 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html @@ -0,0 +1,593 @@ + + + + + + + +IntegerLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class IntegerLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class IntegerLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
IntegerLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
IntegerLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
IntegerLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
IntegerLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
IntegerLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
IntegerLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
IntegerLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
IntegerLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
IntegerLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
IntegerLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
IntegerLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
IntegerLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Object defaultValue,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Object defaultValue,
+                              Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+IntegerLocaleConverter

+
+public IntegerLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. This method will return Integer type. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html new file mode 100644 index 0000000..88c6e1e --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html @@ -0,0 +1,595 @@ + + + + + + + +LongLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class LongLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.LongLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class LongLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
LongLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
LongLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
LongLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
LongLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
LongLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
LongLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
LongLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
LongLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
LongLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
LongLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
LongLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
LongLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+LongLocaleConverter

+
+public LongLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Locale locale,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Locale locale,
+                           String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Locale locale,
+                           String pattern,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Object defaultValue,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Object defaultValue,
+                           Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+LongLocaleConverter

+
+public LongLocaleConverter(Object defaultValue,
+                           Locale locale,
+                           String pattern,
+                           boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. This method will return a Long type. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully +
ParseException - if an error occurs parsing a String to a Number
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html new file mode 100644 index 0000000..6cd5a9e --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html @@ -0,0 +1,595 @@ + + + + + + + +ShortLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class ShortLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.ShortLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class ShortLocaleConverter
extends DecimalLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
ShortLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ShortLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ShortLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ShortLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ShortLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ShortLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
ShortLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ShortLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ShortLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ShortLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ShortLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
ShortLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Locale locale,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Locale locale,
+                            String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Locale locale,
+                            String pattern,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Object defaultValue,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Object defaultValue,
+                            Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Object defaultValue,
+                            Locale locale,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Object defaultValue,
+                            Locale locale,
+                            String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+ShortLocaleConverter

+
+public ShortLocaleConverter(Object defaultValue,
+                            Locale locale,
+                            String pattern,
+                            boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. This method will return values of type Short. +

+

+
Overrides:
parse in class DecimalLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion cannot be performed + successfully +
ParseException - if an error occurs parsing a String to a Number
Since:
+
1.8.0
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html new file mode 100644 index 0000000..0c9e734 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html @@ -0,0 +1,602 @@ + + + + + + + +SqlDateLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class SqlDateLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DateLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class SqlDateLocaleConverter
extends DateLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
SqlDateLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlDateLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlDateLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlDateLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlDateLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlDateLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlDateLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlDateLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlDateLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlDateLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlDateLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlDateLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.converters.DateLocaleConverter
isLenient, setLenient
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Object defaultValue,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Object defaultValue,
+                              Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+SqlDateLocaleConverter

+
+public SqlDateLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
Overrides:
parse in class DateLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html new file mode 100644 index 0000000..eb17c60 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html @@ -0,0 +1,602 @@ + + + + + + + +SqlTimeLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class SqlTimeLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DateLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class SqlTimeLocaleConverter
extends DateLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
SqlTimeLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimeLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimeLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimeLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimeLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimeLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimeLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.converters.DateLocaleConverter
isLenient, setLenient
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Object defaultValue,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Object defaultValue,
+                              Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+SqlTimeLocaleConverter

+
+public SqlTimeLocaleConverter(Object defaultValue,
+                              Locale locale,
+                              String pattern,
+                              boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
Overrides:
parse in class DateLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html new file mode 100644 index 0000000..12fb1d4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html @@ -0,0 +1,602 @@ + + + + + + + +SqlTimestampLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class SqlTimestampLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.DateLocaleConverter
+          extended by org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class SqlTimestampLocaleConverter
extends DateLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
SqlTimestampLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimestampLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimestampLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimestampLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimestampLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
SqlTimestampLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.converters.DateLocaleConverter
isLenient, setLenient
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Locale locale,
+                                   boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Locale locale,
+                                   String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Locale locale,
+                                   String pattern,
+                                   boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Object defaultValue,
+                                   boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Object defaultValue,
+                                   Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Object defaultValue,
+                                   Locale locale,
+                                   boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Object defaultValue,
+                                   Locale locale,
+                                   String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+SqlTimestampLocaleConverter

+
+public SqlTimestampLocaleConverter(Object defaultValue,
+                                   Locale locale,
+                                   String pattern,
+                                   boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
Overrides:
parse in class DateLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully +
ParseException - if an error occurs parsing a String to a Number
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html new file mode 100644 index 0000000..7ca3042 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html @@ -0,0 +1,592 @@ + + + + + + + +StringLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.beanutils.locale.converters +
+Class StringLocaleConverter

+
+java.lang.Object
+  extended by org.apache.commons.beanutils.locale.BaseLocaleConverter
+      extended by org.apache.commons.beanutils.locale.converters.StringLocaleConverter
+
+
+
All Implemented Interfaces:
Converter, LocaleConverter
+
+
+
+
public class StringLocaleConverter
extends BaseLocaleConverter
+ + +

+

Standard LocaleConverter + implementation that converts an incoming + locale-sensitive object into a java.lang.String object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.

+

+ +

+

+
Author:
+
Yauheny Mikulski
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
locale, locPattern, pattern, useDefault
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
StringLocaleConverter() + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
StringLocaleConverter(boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
StringLocaleConverter(Locale locale) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
StringLocaleConverter(Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
StringLocaleConverter(Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
StringLocaleConverter(Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs.
StringLocaleConverter(Object defaultValue) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
StringLocaleConverter(Object defaultValue, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
StringLocaleConverter(Object defaultValue, + Locale locale) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
StringLocaleConverter(Object defaultValue, + Locale locale, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
StringLocaleConverter(Object defaultValue, + Locale locale, + String pattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
StringLocaleConverter(Object defaultValue, + Locale locale, + String pattern, + boolean locPattern) + +
+          Create a LocaleConverter + that will return the specified default value + if a conversion error occurs.
+  + + + + + + + + + + + +
+Method Summary
+protected  Objectparse(Object value, + String pattern) + +
+          Convert the specified locale-sensitive input object into an output object of the + specified type.
+ + + + + + + +
Methods inherited from class org.apache.commons.beanutils.locale.BaseLocaleConverter
convert, convert, convert, convert
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+StringLocaleConverter

+
+public StringLocaleConverter()
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Locale locale)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Locale locale,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Locale locale,
+                             String pattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Locale locale,
+                             String pattern,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will throw a ConversionException + if a conversion error occurs. +

+

+
Parameters:
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Object defaultValue)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine and an unlocalized pattern is used + for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Object defaultValue,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. The locale is the default locale for + this instance of the Java Virtual Machine. +

+

+
Parameters:
defaultValue - The default value to be returned
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Object defaultValue,
+                             Locale locale)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Object defaultValue,
+                             Locale locale,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
locPattern - Indicate whether the pattern is localized or not
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Object defaultValue,
+                             Locale locale,
+                             String pattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. An unlocalized pattern is used for the convertion. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
+
+
+ +

+StringLocaleConverter

+
+public StringLocaleConverter(Object defaultValue,
+                             Locale locale,
+                             String pattern,
+                             boolean locPattern)
+
+
Create a LocaleConverter + that will return the specified default value + if a conversion error occurs. +

+

+
Parameters:
defaultValue - The default value to be returned
locale - The locale
pattern - The convertion pattern
locPattern - Indicate whether the pattern is localized or not
+
+ + + + + + + + +
+Method Detail
+ +

+parse

+
+protected Object parse(Object value,
+                       String pattern)
+                throws ParseException
+
+
Convert the specified locale-sensitive input object into an output object of the + specified type. +

+

+
Specified by:
parse in class BaseLocaleConverter
+
+
+
Parameters:
value - The input object to be converted
pattern - The pattern is used for the convertion +
Returns:
The converted value +
Throws: +
ConversionException - if conversion + cannot be performed successfully +
ParseException - if an error occurs
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigDecimalLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigDecimalLocaleConverter.html new file mode 100644 index 0000000..4d96c03 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigDecimalLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigIntegerLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigIntegerLocaleConverter.html new file mode 100644 index 0000000..f2566cb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/BigIntegerLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ByteLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ByteLocaleConverter.html new file mode 100644 index 0000000..f544396 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ByteLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.ByteLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.ByteLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.ByteLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DateLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DateLocaleConverter.html new file mode 100644 index 0000000..3e54c1a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DateLocaleConverter.html @@ -0,0 +1,216 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.DateLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.DateLocaleConverter

+
+ + + + + + + + + +
+Packages that use DateLocaleConverter
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of DateLocaleConverter in org.apache.commons.beanutils.locale.converters
+  +

+ + + + + + + + + + + + + + + + + +
Subclasses of DateLocaleConverter in org.apache.commons.beanutils.locale.converters
+ classSqlDateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimeLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classSqlTimestampLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DecimalLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DecimalLocaleConverter.html new file mode 100644 index 0000000..9c6db75 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DecimalLocaleConverter.html @@ -0,0 +1,281 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter

+
+ + + + + + + + + +
+Packages that use DecimalLocaleConverter
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + +
+Uses of DecimalLocaleConverter in org.apache.commons.beanutils.locale.converters
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subclasses of DecimalLocaleConverter in org.apache.commons.beanutils.locale.converters
+ classBigDecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classBigIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classByteLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classDoubleLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classFloatLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classIntegerLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classLongLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+ classShortLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DoubleLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DoubleLocaleConverter.html new file mode 100644 index 0000000..e37cd44 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/DoubleLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/FloatLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/FloatLocaleConverter.html new file mode 100644 index 0000000..4946ec5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/FloatLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.FloatLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.FloatLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.FloatLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/IntegerLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/IntegerLocaleConverter.html new file mode 100644 index 0000000..55e1963 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/IntegerLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/LongLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/LongLocaleConverter.html new file mode 100644 index 0000000..0574e82 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/LongLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.LongLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.LongLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.LongLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ShortLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ShortLocaleConverter.html new file mode 100644 index 0000000..1d6e950 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/ShortLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.ShortLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.ShortLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.ShortLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlDateLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlDateLocaleConverter.html new file mode 100644 index 0000000..499c3fb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlDateLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimeLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimeLocaleConverter.html new file mode 100644 index 0000000..f077b42 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimeLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimestampLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimestampLocaleConverter.html new file mode 100644 index 0000000..ec95459 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/SqlTimestampLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/StringLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/StringLocaleConverter.html new file mode 100644 index 0000000..c8afa71 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/class-use/StringLocaleConverter.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.beanutils.locale.converters.StringLocaleConverter (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.beanutils.locale.converters.StringLocaleConverter

+
+No usage of org.apache.commons.beanutils.locale.converters.StringLocaleConverter +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-frame.html new file mode 100644 index 0000000..723f909 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-frame.html @@ -0,0 +1,59 @@ + + + + + + + +org.apache.commons.beanutils.locale.converters (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +org.apache.commons.beanutils.locale.converters + + + + +
+Classes  + +
+BigDecimalLocaleConverter +
+BigIntegerLocaleConverter +
+ByteLocaleConverter +
+DateLocaleConverter +
+DecimalLocaleConverter +
+DoubleLocaleConverter +
+FloatLocaleConverter +
+IntegerLocaleConverter +
+LongLocaleConverter +
+ShortLocaleConverter +
+SqlDateLocaleConverter +
+SqlTimeLocaleConverter +
+SqlTimestampLocaleConverter +
+StringLocaleConverter
+ + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-summary.html new file mode 100644 index 0000000..b060dd1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-summary.html @@ -0,0 +1,303 @@ + + + + + + + +org.apache.commons.beanutils.locale.converters (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.apache.commons.beanutils.locale.converters +

+Standard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. +

+See: +
+          Description +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
BigDecimalLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
BigIntegerLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigInteger object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
ByteLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Byte object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DateLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DecimalLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DoubleLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Double object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
FloatLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.math.BigDecimal object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
IntegerLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Integer object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
LongLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Long object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
ShortLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Short object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
SqlDateLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
SqlTimeLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Time object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
SqlTimestampLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.sql.Timestamp object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
StringLocaleConverterStandard LocaleConverter + implementation that converts an incoming + locale-sensitive object into a java.lang.String object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  + +

+

+Package org.apache.commons.beanutils.locale.converters Description +

+ +

+

Standard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time.

+

+ +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-tree.html new file mode 100644 index 0000000..2366e27 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-tree.html @@ -0,0 +1,161 @@ + + + + + + + +org.apache.commons.beanutils.locale.converters Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.apache.commons.beanutils.locale.converters +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-use.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-use.html new file mode 100644 index 0000000..21e200c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/converters/package-use.html @@ -0,0 +1,191 @@ + + + + + + + +Uses of Package org.apache.commons.beanutils.locale.converters (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
org.apache.commons.beanutils.locale.converters

+
+ + + + + + + + + +
+Packages that use org.apache.commons.beanutils.locale.converters
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + + + + + + + +
+Classes in org.apache.commons.beanutils.locale.converters used by org.apache.commons.beanutils.locale.converters
DateLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.util.Date object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
DecimalLocaleConverter + +
+          Standard LocaleConverter + implementation that converts an incoming + locale-sensitive String into a java.lang.Number object, + optionally using a default value or throwing a + ConversionException + if a conversion error occurs.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-frame.html new file mode 100644 index 0000000..1d453e2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-frame.html @@ -0,0 +1,54 @@ + + + + + + + +org.apache.commons.beanutils.locale (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +org.apache.commons.beanutils.locale + + + + +
+Interfaces  + +
+LocaleConverter
+ + + + + + +
+Classes  + +
+BaseLocaleConverter +
+LocaleBeanUtils +
+LocaleBeanUtils.Descriptor +
+LocaleBeanUtilsBean +
+LocaleConvertUtils +
+LocaleConvertUtilsBean
+ + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-summary.html new file mode 100644 index 0000000..886ecc3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-summary.html @@ -0,0 +1,216 @@ + + + + + + + +org.apache.commons.beanutils.locale (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.apache.commons.beanutils.locale +

+Locale-aware extensions of the standard beanutils classes. +

+See: +
+          Description +

+ + + + + + + + + +
+Interface Summary
LocaleConverterGeneral purpose locale-sensitive data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
BaseLocaleConverterThe base class for all standart type locale-sensitive converters.
LocaleBeanUtilsUtility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
LocaleBeanUtils.DescriptorDeprecated. moved into LocaleBeanUtils
LocaleBeanUtilsBeanUtility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
LocaleConvertUtilsUtility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.
LocaleConvertUtilsBeanUtility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.
+  + +

+

+Package org.apache.commons.beanutils.locale Description +

+ +

+

Locale-aware extensions of the standard beanutils classes. +This package allows locale-dependent population of JavaBeans.

+

+ +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-tree.html new file mode 100644 index 0000000..51e362a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-tree.html @@ -0,0 +1,166 @@ + + + + + + + +org.apache.commons.beanutils.locale Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.apache.commons.beanutils.locale +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-use.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-use.html new file mode 100644 index 0000000..6b563fc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/locale/package-use.html @@ -0,0 +1,233 @@ + + + + + + + +Uses of Package org.apache.commons.beanutils.locale (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
org.apache.commons.beanutils.locale

+
+ + + + + + + + + + + + + +
+Packages that use org.apache.commons.beanutils.locale
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + + + + + + + + + + + + + + + + +
+Classes in org.apache.commons.beanutils.locale used by org.apache.commons.beanutils.locale
LocaleBeanUtils.Descriptor + +
+          Deprecated. moved into LocaleBeanUtils
LocaleBeanUtilsBean + +
+          Utility methods for populating JavaBeans properties + via reflection in a locale-dependent manner.
LocaleBeanUtilsBean.Descriptor + +
+          Deprecated. Property name expressions are now processed by + the configured Resolver implementation and this class + is no longer used by BeanUtils.
LocaleConverter + +
+          General purpose locale-sensitive data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
LocaleConvertUtilsBean + +
+          Utility methods for converting locale-sensitive String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class and + object to locale-sensitive String scalar value.
+  +

+ + + + + + + + + + + +
+Classes in org.apache.commons.beanutils.locale used by org.apache.commons.beanutils.locale.converters
BaseLocaleConverter + +
+          The base class for all standart type locale-sensitive converters.
LocaleConverter + +
+          General purpose locale-sensitive data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-frame.html new file mode 100644 index 0000000..7a3bec4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-frame.html @@ -0,0 +1,129 @@ + + + + + + + +org.apache.commons.beanutils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +org.apache.commons.beanutils + + + + +
+Interfaces  + +
+Converter +
+DynaBean +
+DynaClass +
+MutableDynaClass
+ + + + + + +
+Classes  + +
+BasicDynaBean +
+BasicDynaClass +
+BeanComparator +
+BeanMap +
+BeanMap.Entry +
+BeanPredicate +
+BeanPropertyValueChangeClosure +
+BeanPropertyValueEqualsPredicate +
+BeanToPropertyValueTransformer +
+BeanUtils +
+BeanUtilsBean +
+BeanUtilsBean2 +
+ConstructorUtils +
+ContextClassLoaderLocal +
+ConvertingWrapDynaBean +
+ConvertUtils +
+ConvertUtilsBean +
+ConvertUtilsBean2 +
+DynaBeanMapDecorator +
+DynaProperty +
+LazyDynaBean +
+LazyDynaClass +
+LazyDynaList +
+LazyDynaMap +
+MappedPropertyDescriptor +
+MethodUtils +
+PropertyUtils +
+PropertyUtilsBean +
+ResultSetDynaClass +
+ResultSetIterator +
+RowSetDynaClass +
+WrapDynaBean +
+WrapDynaClass
+ + + + + + +
+Exceptions  + +
+BeanAccessLanguageException +
+ConversionException +
+NestedNullException
+ + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-summary.html new file mode 100644 index 0000000..d0039be --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-summary.html @@ -0,0 +1,1354 @@ + + + + + + + +org.apache.commons.beanutils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.apache.commons.beanutils +

+The Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. +

+See: +
+          Description +

+ + + + + + + + + + + + + + + + + + + + + +
+Interface Summary
ConverterGeneral purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
DynaBeanA DynaBean is a Java object that supports properties + whose names and data types, as well as values, may be dynamically modified.
DynaClassA DynaClass is a simulation of the functionality of + java.lang.Class for classes implementing the + DynaBean interface.
MutableDynaClassA specialized extension to DynaClass that allows properties + to be added or removed dynamically.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
BasicDynaBeanMinimal implementation of the DynaBean interface.
BasicDynaClassMinimal implementation of the DynaClass interface.
BeanComparator + This comparator compares two beans by the specified bean property.
BeanMapAn implementation of Map for JavaBeans which uses introspection to + get and put properties in the bean.
BeanMap.EntryMap entry used by BeanMap.
BeanPredicatePredicate implementation that applies the given Predicate + to the result of calling the given property getter.
BeanPropertyValueChangeClosureClosure that sets a property.
BeanPropertyValueEqualsPredicatePredicate that evaluates a property value against a specified value.
BeanToPropertyValueTransformerTransformer that outputs a property value.
BeanUtilsUtility methods for populating JavaBeans properties via reflection.
BeanUtilsBeanJavaBean property population methods.
BeanUtilsBean2BeanUtilsBean implementation that creates a + ConvertUtilsBean2 and delegates conversion to + ConvertUtilsBean.convert(Object, Class).
ConstructorUtils Utility reflection methods focussed on constructors, modelled after MethodUtils.
ContextClassLoaderLocalAn instance of this class represents a value that is provided per (thread) + context classloader.
ConvertingWrapDynaBeanImplementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties, + though this implementation allows type conversion to occur when properties are set.
ConvertUtilsUtility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.
ConvertUtilsBeanUtility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.
ConvertUtilsBean2ConvertUtilsBean implementation that delegates convert() + methods to the new ConvertUtilsBean.convert(Object, Class) method.
DynaBeanMapDecoratorDecorates a DynaBean to provide Map behaviour.
DynaPropertyThe metadata describing an individual property of a DynaBean.
LazyDynaBeanDynaBean which automatically adds properties to the DynaClass + and provides Lazy List and Lazy Map features.
LazyDynaClassDynaClass which implements the MutableDynaClass interface.
LazyDynaListLazy DynaBean List.
LazyDynaMapProvides a light weight DynaBean facade to a Map + with lazy map/list processing.
MappedPropertyDescriptorA MappedPropertyDescriptor describes one mapped property.
MethodUtils Utility reflection methods focussed on methods in general rather than properties in particular.
PropertyUtilsUtility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.
PropertyUtilsBeanUtility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.
ResultSetDynaClassImplementation of DynaClass for DynaBeans that wrap the + java.sql.Row objects of a java.sql.ResultSet.
ResultSetIteratorImplementation of java.util.Iterator returned by the + iterator() method of ResultSetDynaClass.
RowSetDynaClassImplementation of DynaClass that creates an in-memory collection + of DynaBeans representing the results of an SQL query.
WrapDynaBeanImplementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties.
WrapDynaClassImplementation of DynaClass for DynaBeans that wrap + standard JavaBean instances.
+  + +

+ + + + + + + + + + + + + + + + + +
+Exception Summary
BeanAccessLanguageExceptionThrown to indicate that the Bean Access Language cannot execute query + against given bean.
ConversionExceptionA ConversionException indicates that a call to + Converter.convert() has failed to complete successfully.
NestedNullExceptionThrown to indicate that the Bean Access Language cannot execute query + against given bean since a nested bean referenced is null.
+  + +

+

+Package org.apache.commons.beanutils Description +

+ +

+

The Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties.

+ +

Table of Contents

+ + + + +

1. Overview

+ + +

1.1 Background

+ +

The JavaBeans name comes from a +Java API +for a component architecture for the Java language. Writing Java classes that +conform to the JavaBeans design patterns makes it easier for Java developers +to understand the functionality provided by your class, as well as allowing +JavaBeans-aware tools to use Java's introspection capabilities to +learn about the properties and operations provided by your class, and present +them in a visually appealing manner in development tools.

+ +

The JavaBeans +Specification describes the complete set of characteristics that makes +an arbitrary Java class a JavaBean or not -- and you should consider reading +this document to be an important part of developing your Java programming +skills. However, the required characteristics of JavaBeans that are +important for most development scenarios are listed here:

+
    +
  • The class must be public, and provide a + public constructor that accepts no arguments. This allows + tools and applications to dynamically create new instances of your bean, + without necessarily knowing what Java class name will be used ahead of + time, like this: +
    +        String className = ...;
    +        Class beanClass = Class.forName(className);
    +        Object beanInstance = beanClass.newInstance();
    +
  • +
  • As a necessary consequence of having a no-arguments constructor, + configuration of your bean's behavior must be accomplished separately + from its instantiation. This is typically done by defining a set of + properties of your bean, which can be used to modify its behavior + or the data that the bean represents. The normal convention for + property names is that they start with a lower case letter, and be + comprised only of characters that are legal in a Java identifier.
  • +
  • Typically, each bean property will have a public getter and + setter method that are used to retrieve or define the property's + value, respectively. The JavaBeans Specification defines a design + pattern for these names, using get or set as the + prefix for the property name with it's first character capitalized. Thus, + you a JavaBean representing an employee might have + (among others) properties named firstName, + lastName, and hireDate, with method signatures + like this: +
    +        public class Employee {
    +            public Employee();   // Zero-arguments constructor
    +            public String getFirstName();
    +            public void setFirstName(String firstName);
    +            public String getLastName();
    +            public void setLastName(String lastName);
    +            public Date getHireDate();
    +            public void setHireDate(Date hireDate);
    +            public boolean isManager();
    +            public void setManager(boolean manager);
    +            public String getFullName();
    +        }
    +
  • +
  • As you can see from the above example, there is a special variant allowed + for boolean properties -- you can name the getter method with a + is prefix instead of a get prefix if that makes + for a more understandable method name.
  • +
  • If you have both a getter and a setter method for a + property, the data type returned by the getter must match the + data type accepted by the setter. In addition, it is contrary + to the JavaBeans specification to have more than one setter + with the same name, but different property types.
  • +
  • It is not required that you provide a getter and a + setter for every property. In the example above, the + fullName property is read-only, because there is no + setter method. It is also possible, but less common, to provide + write-only properties.
  • +
  • It is also possible to create a JavaBean where the getter and + setter methods do not match the naming pattern described above. + The standard JavaBeans support classes in the Java language, as well as + all classes in the BeanUtils package, allow you to describe the actual + property method names in a BeanInfo class associated with + your bean class. See the JavaBeans Specification for full details.
  • +
  • The JavaBeans Specification also describes many additional design patterns + for event listeners, wiring JavaBeans together into component hierarchies, + and other useful features that are beyond the scope of the BeanUtils + package.
  • +
+ +

Using standard Java coding techniques, it is very easy to deal with +JavaBeans if you know ahead of time which bean classes you will be using, and +which properties you are interested in:

+
+        Employee employee = ...;
+        System.out.println("Hello " + employee.getFirstName() + "!");
+
+ + +

1.2 External Dependencies

+ +

The commons-beanutils package requires that the following +additional packages be available in the application's class path at runtime: +

+ + +

Furthermore, if any of the following commons-beanutils classes are used: +

+ +

+then the following packages must also be available in the application's class path at runtime: +

+ + + +

2. Standard JavaBeans

+ + +

2.1 Background

+ +

As described above, the standard facilities of the Java programming language +make it easy and natural to access the property values of your beans using +calls to the appropriate getter methods. +But what happens in more sophisticated environments where you do not +necessarily know ahead of time which bean class you are going to be using, +or which property you want to retrieve or modify? The Java language provides +classes like java.beans.Introspector, which can examine a Java +class at runtime and identify for you the names of the property getter and +setter methods, plus the Reflection capabilities to dynamically call +such a method. However, these APIs can be difficult to use, and expose the +application developer to many unnecessary details of the underlying structure +of Java classes. The APIs in the BeanUtils package are intended to simplify +getting and setting bean properties dynamically, where the objects you are +accessing -- and the names of the properties you care about -- are determined +at runtime in your application, rather than as you are writing and compiling +your application's classes.

+ +

This is the set of needs that are satisfied by the static methods of the +PropertyUtils +class, which are described further in this section. First, however, some +further definitions will prove to be useful:

+ +

The general set of possible property types supported by a JavaBean can be +broken into three categories -- some of which are supported by the standard +JavaBeans specification, and some of which are uniquely supported by the +BeanUtils package:

+
    +
  • Simple - Simple, or scalar, properties have a single + value that may be retrieved or modified. The underlying property type + might be a Java language primitive (such as int, a simple + object (such as a java.lang.String), or a more complex + object whose class is defined either by the Java language, by the + application, or by a class library included with the application.
  • +
  • Indexed - An indexed property stores an ordered collection + of objects (all of the same type) that can be individually accessed by an + integer-valued, non-negative index (or subscript). Alternatively, the + entire set of values may be set or retrieved using an array. + As an extension to the JavaBeans specification, the + BeanUtils package considers any property whose underlying data + type is java.util.List (or an implementation of List) to be + indexed as well.
  • +
  • Mapped - As an extension to standard JavaBeans APIs, + the BeanUtils package considers any property whose underlying + value is a java.util.Map to be "mapped". You can set and + retrieve individual values via a String-valued key.
  • +
+ +

A variety of API methods are provided in the +PropertyUtils class to get and set property values of all of these types. +In the code fragments below, assume that there are two bean classes defined +with the following method signatures:

+
+    public class Employee {
+        public Address getAddress(String type);
+        public void setAddress(String type, Address address);
+        public Employee getSubordinate(int index);
+        public void setSubordinate(int index, Employee subordinate);
+        public String getFirstName();
+        public void setFirstName(String firstName);
+        public String getLastName();
+        public void setLastName(String lastName);
+    }
+
+ + +

2.2 Basic Property Access

+ +

Getting and setting simple property values is, well, +simple :-). Check out the following API signatures in the Javadocs:

+ + + +

Using these methods, you might dynamically manipulate the employee's name +in an application:

+
+    Employee employee = ...;
+    String firstName = (String)
+      PropertyUtils.getSimpleProperty(employee, "firstName");
+    String lastName = (String)
+      PropertyUtils.getSimpleProperty(employee, "lastName");
+    ... manipulate the values ...
+    PropertyUtils.setSimpleProperty(employee, "firstName", firstName);
+    PropertyUtils.setSimpleProperty(employee, "lastName", lastName);
+
+ +

For indexed properties, you have two choices - you can +either build a subscript into the "property name" string, using square +brackets, or you can specify the subscript in a separate argument to the +method call:

+ + + +

Only integer constants are allowed when you add a subscript to the property +name. If you need to calculate the index of the entry you wish to retrieve, +you can use String concatenation to assemble the property name expression. +For example, you might do either of the following:

+
+    Employee employee = ...;
+    int index = ...;
+    String name = "subordinate[" + index + "]";
+    Employee subordinate = (Employee)
+      PropertyUtils.getIndexedProperty(employee, name);
+
+    Employee employee = ...;
+    int index = ...;
+    Employee subordinate = (Employee)
+      PropertyUtils.getIndexedProperty(employee, "subordinate", index);
+
+ +

In a similar manner, there are two possible method signatures for getting +and setting mapped properties. The difference is that the +extra argument is surrounded by parentheses ("(" and ")") instead of square +brackets, and it is considered to be a String-value key used to get or set +the appropriate value from an underlying map.

+ + + +

You can, for example, set the employee's home address in either of these +two manners:

+ +
+    Employee employee = ...;
+    Address address = ...;
+    PropertyUtils.setMappedProperty(employee, "address(home)", address);
+
+    Employee employee = ...;
+    Address address = ...;
+    PropertyUtils.setMappedProperty(employee, "address", "home", address);
+
+ + +

2.3 Nested Property Access

+ +

In all of the examples above, we have assumed that you wished to retrieve +the value of a property of the bean being passed as the first argument to a +PropertyUtils method. However, what if the property value you retrieve is +really a Java object, and you wish to retrieve a property of that +object instead?

+ +

For example, assume we really wanted the city property of the +employee's home address. Using standard Java programming techniques for direct +access to the bean properties, we might write:

+ +
+    String city = employee.getAddress("home").getCity();
+
+ +

The equivalent mechanism using the PropertyUtils class is called +nested property access. To use this approach, you concatenate +together the property names of the access path, using "." separators -- very +similar to the way you can perform nested property access in JavaScript.

+ + + +

The PropertyUtils equivalent to the above Java expression would be:

+ +
+    String city = (String)
+      PropertyUtils.getNestedProperty(employee, "address(home).city");
+
+ +

Finally, for convenience, PropertyUtils provides method signatures that +accept any arbitrary combination of simple, indexed, and mapped property +access, using any arbitrary level of nesting:

+ + + +

which you might use like this:

+ +
+    Employee employee = ...;
+    String city = (String) PropertyUtils.getProperty(employee,
+      "subordinate[3].address(home).city");
+
+ + +

3. Dynamic Beans (DynaBeans)

+ + +

3.1 Background

+ +

The PropertyUtils class described in the +preceding section is designed to provide dynamic property access on existing +JavaBean classes, without modifying them in any way. A different use case for +dynamic property access is when you wish to represent a dynamically calculated +set of property values as a JavaBean, but without having to actually +write a Java class to represent these properties. Besides the effort savings +in not having to create and maintain a separate Java class, this ability also +means you can deal with situations where the set of properties you care about +is determined dynamically (think of representing the result set of an SQL +select as a set of JavaBeans ...).

+ +

To support this use case, the BeanUtils package provides the +DynaBean interface, which must be implemented by a +bean class actually implementing the interface's methods, and the associated +DynaClass interface that defines the set of +properties supported by a particular group of DynaBeans, in much the same way +that java.lang.Class defines the set of properties supported by +all instances of a particular JavaBean class.

+ +

For example, the Employee class used in the examples above +might be implemented as a DynaBean, rather than as a standard JavaBean. You +can access its properties like this:

+ +
+    DynaBean employee = ...; // Details depend on which
+                             // DynaBean implementation you use
+    String firstName = (String) employee.get("firstName");
+    Address homeAddress = (Address) employee.get("address", "home");
+    Object subordinate = employee.get("subordinate", 2);
+
+ +

One very important convenience feature should be noted: the +PropertyUtils property getter and setter methods understand how to access +properties in DynaBeans. Therefore, if the bean you pass as the first +argument to, say, PropertyUtils.getSimpleProperty() is really a +DynaBean implementation, the call will get converted to the appropriate +DynaBean getter method transparently. Thus, you can base your application's +dynamic property access totally on the PropertyUtils APIs, if you wish, and +use them to access either standard JavaBeans or DynaBeans without having to +care ahead of time how a particular bean is implemented.

+ +

Because DynaBean and DynaClass are interfaces, they may be implemented +multiple times, in different ways, to address different usage scenarios. The +following subsections describe the implementations that are provided as a part +of the standard BeanUtils package, although you are encouraged to +provide your own custom implementations for cases where the standard +implementations are not sufficient.

+ + +

3.2 BasicDynaBean and BasicDynaClass

+ +

The BasicDynaBean and +BasicDynaClass implementation provides a +basic set of +dynamic property capabilities where you want to dynamically define the +set of properties (described by instances of +DynaProperty). You start by defining the DynaClass that establishes +the set of properties you care about:

+ +
+    DynaProperty[] props = new DynaProperty[]{
+        new DynaProperty("address", java.util.Map.class),
+        new DynaProperty("subordinate", mypackage.Employee[].class),
+        new DynaProperty("firstName", String.class),
+        new DynaProperty("lastName",  String.class)
+      };
+    BasicDynaClass dynaClass = new BasicDynaClass("employee", null, props);
+
+ +

Note that the 'dynaBeanClass' argument (in the constructor of +BasicDynaClass) can have the value of null. In this +case, the value of dynaClass.getDynaBeanClass will just be the +Class for BasicDynaBean.

+ +

Next, you use the newInstance() method of this DynaClass to +create new DynaBean instances that conform to this DynaClass, and populate +its initial property values (much as you would instantiate a new standard +JavaBean and then call its property setters):

+ +
+    DynaBean employee = dynaClass.newInstance();
+    employee.set("address", new HashMap());
+    employee.set("subordinate", new mypackage.Employee[0]);
+    employee.set("firstName", "Fred");
+    employee.set("lastName", "Flintstone");
+
+ +

Note that the DynaBean class was declared to be +DynaBean instead of BasicDynaBean. In +general, if you are using DynaBeans, you will not want to care about the +actual implementation class that is being used -- you only care about +declaring that it is a DynaBean so that you can use the +DynaBean APIs.

+ +

As stated above, you can pass a DynaBean instance as the first argument +to a PropertyUtils method that gets and sets properties, and it +will be interpreted as you expect -- the dynamic properties of the DynaBean +will be retrieved or modified, instead of underlying properties on the +actual BasicDynaBean implementation class.

+ + +

3.3 ResultSetDynaClass (Wraps ResultSet in DynaBeans)

+ +

A very common use case for DynaBean APIs is to wrap other collections of +"stuff" that do not normally present themselves as JavaBeans. One of the most +common collections that would be nice to wrap is the +java.sql.ResultSet that is returned when you ask a JDBC driver +to perform a SQL SELECT statement. Commons BeanUtils offers a standard +mechanism for making each row of the result set visible as a DynaBean, +which you can utilize as shown in this example:

+
+  Connection conn = ...;
+  Statement stmt = conn.createStatement();
+  ResultSet rs = stmt.executeQuery
+    ("select account_id, name from customers");
+  Iterator rows = (new ResultSetDynaClass(rs)).iterator();
+  while (rows.hasNext()) {
+    DynaBean row = (DynaBean) rows.next();
+    System.out.println("Account number is " +
+                       row.get("account_id") +
+                       " and name is " + row.get("name"));
+  }
+  rs.close();
+  stmt.close();
+
+ + + +

3.4 RowSetDynaClass (Disconnected ResultSet as DynaBeans)

+

Although ResultSetDynaClass is +a very useful technique for representing the results of an SQL query as a +series of DynaBeans, an important problem is that the underlying +ResultSet must remain open throughout the period of time that the +rows are being processed by your application. This hinders the ability to use +ResultSetDynaClass as a means of communicating information from +the model layer to the view layer in a model-view-controller architecture +such as that provided by the Struts +Framework, because there is no easy mechanism to assure that the result set +is finally closed (and the underlying Connection returned to its +connection pool, if you are using one).

+ +

The RowSetDynaClass class represents a different approach to +this problem. When you construct such an instance, the underlying data is +copied into a set of in-memory DynaBeans that represent the result. +The advantage of this technique, of course, is that you can immediately close +the ResultSet (and the corresponding Statement), normally before you even +process the actual data that was returned. The disadvantage, of course, is +that you must pay the performance and memory costs of copying the result data, +and the result data must fit entirely into available heap memory. For many +environments (particularly in web applications), this tradeoff is usually +quite beneficial.

+ +

As an additional benefit, the RowSetDynaClass class is defined +to implement java.io.Serializable, so that it (and the +DynaBeans that correspond to each row of the result) can be conveniently +serialized and deserialized (as long as the underlying column values are +also Serializable). Thus, RowSetDynaClass represents a very +convenient way to transmit the results of an SQL query to a remote Java-based +client application (such as an applet).

+ +

The normal usage pattern for a RowSetDynaClass will look +something like this:

+
+    Connection conn = ...;  // Acquire connection from pool
+    Statement stmt = conn.createStatement();
+    ResultSet rs = stmt.executeQuery("SELECT ...");
+    RowSetDynaClass rsdc = new RowSetDynaClass(rs);
+    rs.close();
+    stmt.close();
+    ...;                    // Return connection to pool
+    List rows = rsdc.getRows();
+    ...;                   // Process the rows as desired
+
+ + + +

3.5 WrapDynaBean and WrapDynaClass

+ +

OK, you've tried the DynaBeans APIs and they are cool -- very simple +get() and set() methods provide easy access to all +of the dynamically defined simple, indexed, and mapped properties of your +DynaBeans. You'd like to use the DynaBean APIs to access all +of your beans, but you've got a bunch of existing standard JavaBeans classes +to deal with as well. This is where the +WrapDynaBean (and its associated +WrapDynaClass) come into play. As the name +implies, a WrapDynaBean is used to "wrap" the DynaBean APIs around an +existing standard JavaBean class. To use it, simply create the wrapper +like this:

+ +
+    MyBean bean = ...;
+    DynaBean wrapper = new WrapDynaBean(bean);
+    String firstName = wrapper.get("firstName");
+
+ +

Note that, although appropriate WrapDynaClass instances are +created internally, you never need to deal with them.

+ + +

3.6 Lazy DynaBeans

+ + + +

You bought into the DynaBeans because it saves coding all those POJO JavaBeans but + you're here because lazy caught your eye and wondered whats that about? + What makes these flavors of DynaBean lazy are the following features:

+
    +
  • Lazy property addition - lazy beans use a + DynaClass which implements + the MutableDynaClass + interface. This provides the ability to add and remove a DynaClass's + properties. Lazy beans use this feature to automatically add + a property which doesn't exist to the DynaClass when + the set(name, value) method is called.
  • +
  • Lazy List/Array growth - If an indexed property is not large + enough to accomodate the index being set then the List or + Array is automatically grown so that it is.
  • +
  • Lazy List/Array instantiation - if an indexed + property doesn't exist then calling the DynaBean's + indexed property getter/setter methods (i.e. get(name, index) or + set(name, index, value)) results in either a new List + or Array being instantiated. If the indexed property has not been + defined in the DynaClass then it is automatically added and a default List + implementation instantiated.
  • +
  • Lazy Map instantiation - if a mapped + property doesn't exist then calling the DynaBean's + mapped property getter/setter methods (i.e. get(name, key) or + set(name, key, value)) results in a new Map + being instantiated. If the mapped property has not been defined in the DynaClass + then it is automatically added and a default Map implementation + instantiated.
  • +
  • Lazy Bean instantiation - if a property is defined in + the DynaClass as a DynaBean or regular bean and + doesn't exist in the DynaBean then LazyDynaBean wiill + try to instantiate the bean using a default empty constructor.
  • +
+ +

1. LazyDynaBean is the standard lazy bean + implementation. By default it is associated with a LazyDynaClass + which implements the MutableDynaClass interface - however + it can be used with any MutableDynaClass implementation. The question is how do + I use it? - well it can be as simple as creating a new bean and then calling the getters/setters...

+ +
+    DynaBean dynaBean = new LazyDynaBean();
+
+    dynaBean.set("foo", "bar");                   // simple
+
+    dynaBean.set("customer", "title", "Mr");      // mapped
+    dynaBean.set("customer", "surname", "Smith"); // mapped
+
+    dynaBean.set("address", 0, addressLine1);     // indexed
+    dynaBean.set("address", 1, addressLine2);     // indexed
+    dynaBean.set("address", 2, addressLine3);     // indexed
+
+ +

2. LazyDynaMap is a light wieght DynaBean + facade to a Map with all the usual lazy features. Its light weight because it doesn't + have an associated DynaClass containing all the properties. In fact it actually implements + the DynaClass interface itself (and MutableDynaClass) and derives all the DynaClass + information from the actual contents of the Map. A LazyDynaMap can be created around an + existing Map or can instantiate its own Map. After any DynaBean + processing has finished the Map can be retrieved and the DynaBean facade discarded.

+ +

If you need a new Map then to use....

+ +
+    DynaBean dynaBean = new LazyDynaMap();        // create DynaBean
+
+    dynaBean.set("foo", "bar");                   // simple
+    dynaBean.set("customer", "title", "Mr");      // mapped
+    dynaBean.set("address", 0, addressLine1);     // indexed
+
+    Map myMap = dynaBean.getMap()                 // retrieve the Map
+
+

or to use with an existing Map ....

+ +
+    Map myMap = ....                             // exisitng Map
+    DynaBean dynaBean = new LazyDynaMap(myMap);  // wrap Map in DynaBean
+    dynaBean.set("foo", "bar");                  // set properties
+
+ +

3. LazyDynaList is lazy list for DynaBean's, + java.util.Map's or POJO beans. See the Javadoc for more details and + example usage.

+ +

4. LazyDynaClass extends BasicDynaClass + and implements the MutableDynaClass interface. It can be used with other + DynaBean implementations, but it is the default DynaClass used by LazyDynaBean. + When using the LazyDynaBean there may be no need to have anything to do with the DynaClass + However sometimes there is a requirement to set up the DynaClass first - perhaps to + define the type of array for an indexed property, or if using the DynaBean in restricted mode (see note below) + is required. Doing so is straight forward...

+ +

Either create a LazyDynaClass first... + +

+    MutableDynaClass dynaClass = new LazyDynaClass();    // create DynaClass
+
+    dynaClass.add("amount", java.lang.Integer.class);    // add property
+    dynaClass.add("orders", OrderBean[].class);          // add indexed property
+    dynaClass.add("orders", java.util.TreeMapp.class);   // add mapped property
+
+    DynaBean dynaBean = new LazyDynaBean(dynaClass);     // Create DynaBean with associated DynaClass
+
+ +

or create a LazyDynaBean and get the DynaClass... + +

+    DynaBean dynaBean = new LazyDynaBean();              // Create LazyDynaBean
+    MutableDynaClass dynaClass = 
+             (MutableDynaClass)dynaBean.getDynaClass();  // get DynaClass
+
+    dynaClass.add("amount", java.lang.Integer.class);    // add property
+    dynaClass.add("myBeans", myPackage.MyBean[].class);  // add 'array' indexed property
+    dynaClass.add("myMap", java.util.TreeMapp.class);    // add mapped property
+
+ +

NOTE: One feature of MutableDynaClass is that it + has a Restricted property. When the DynaClass is restricted no properties can be added + or removed from the DynaClass. Neither the LazyDynaBean or LazyDynaMap + will add properties automatically if the DynaClass is restricted.

+ + + +

4. Data Type Conversions

+ + +

4.1 Background

+ +

So far, we've only considered the cases where the data types of the +dynamically accessed properties are known, and where we can use Java casts +to perform type conversions. What happens if you want to automatically +perform type conversions when casting is not possible? The +BeanUtils package provides a variety of APIs and design patterns +for performing this task as well.

+ + +

4.2 BeanUtils and ConvertUtils Conversions

+ +

A very common use case (and the situation that caused the initial creation +of the BeanUtils package) was the desire to convert the set of request +parameters that were included in a +javax.servlet.HttpServletRequest received by a web application +into a set of corresponding property setter calls on an arbitrary JavaBean. +(This is one of the fundamental services provided by the +Struts Framework, which uses +BeanUtils internally to implement this functionality.)

+ +

In an HTTP request, the set of included parameters is made available as a +series of String (or String array, if there is more than one value for the +same parameter name) instances, which need to be converted to the underlying +data type. The BeanUtils class provides +property setter methods that accept String values, and automatically convert +them to appropriate property types for Java primitives (such as +int or boolean), and property getter methods that +perform the reverse conversion. Finally, a populate() method +is provided that accepts a java.util.Map containing a set of +property values (keyed by property name), and calls all of the appropriate +setters whenever the underlying bean has a property with the same name as +one of the request parameters. So, you can perform the all-in-one property +setting operation like this:

+ +
+    HttpServletRequest request = ...;
+    MyBean bean = ...;
+    HashMap map = new HashMap();
+    Enumeration names = request.getParameterNames();
+    while (names.hasMoreElements()) {
+      String name = (String) names.nextElement();
+      map.put(name, request.getParameterValues(name));
+    }
+    BeanUtils.populate(bean, map);
+
+ +

The BeanUtils class relies on conversion methods defined in +the ConvertUtils class to perform the actual +conversions, and these methods are availablve for direct use as well. +WARNING - It is likely that the hard coded use of +ConvertUtils methods will be deprecated in the future, and +replaced with a mechanism that allows you to plug in your own implementations +of the Converter interface instead. Therefore, +new code should not be written with reliance on ConvertUtils.

+ + +

4.3 Defining Your Own Converters

+ +

The ConvertUtils class supports the ability to define and +register your own String --> Object conversions for any given Java class. +Once registered, such converters will be used transparently by all of the +BeanUtils methods (including populate()). To +create and register your own converter, follow these steps:

+
    +
  • Write a class that implements the Converter + interface. The convert() method should accept the + java.lang.Class object of your application class (i.e. + the class that you want to convert to, and a String representing the + incoming value to be converted.
  • +
  • At application startup time, register an instance of your converter class + by calling the ConvertUtils.register() method.
  • +
+ + +

4.4 Locale Aware Conversions

+

The standard classes in org.apache.commons.beanutils are not +locale aware. This gives them a cleaner interface and makes then easier to use +in situations where the locale is not important.

+

Extended, locale-aware analogues can be found in +org.apache.commons.beanutils.locale +. These are built along the same +lines as the basic classes but support localization.

+ + + +

5. Utility Objects And Static Utility Classes

+ +

Background

+

+So far, the examples have covered the static utility classes (BeanUtils, +ConvertUtils and PropertyUtils). These are easy to use but are +somewhat inflexible. These all share the same registered converters and the same caches. +

+

+This functionality can also be accessed through utility objects (in fact, the static utility +class use worker instances of these classes). For each static utility class, there is a corresponding +class with the same functionality that can be instantiated: +

+

+ + + + + +
Static Utility ClassUtility Object
BeanUtilsBeanUtilsBean
ConvertUtilsConvertUtilsBean
PropertyUtilsPropertyUtilsBean
+

+

+Creating an instances allow gives guarenteed control of the caching and registration +to the code that creates it. +

+ + +

6. Collections

+ +

6.1 Comparing Beans

+

+org.apache.commons.beanutils.BeanComparator is a Comparator implementation +that compares beans based on a shared property value. +

+ +

6.2 Operating On Collections Of Beans

+

+The Closure interface in commons-collections encapsulates a block of code that +executes on an arbitrary input Object. Commons-collections contains code that allows +Closures to be applied to the contents of a Collection. For more details, see the +commons-collections +documentation. +

+

+BeanPropertyValueChangeClosure is a Closure that sets a specified property +to a particular value. A typical usage is to combine this with commons-collections +so that all the beans in a collection can have a particular property set to a particular value. +

+

+For example, set the activeEmployee property to TRUE for an entire collection: +

+    // create the closure
+    BeanPropertyValueChangeClosure closure =
+        new BeanPropertyValueChangeClosure( "activeEmployee", Boolean.TRUE );
+ 
+    // update the Collection
+    CollectionUtils.forAllDo( peopleCollection, closure );
+  
+

+ + +

6.3 Querying Or Filtering Collections Of Beans

+

+The Predicate interface in commons-collections encapsulates an evaluation +of an input Object that returns either true or false. Commons-collections contains code +that allows +Predicates to be applied to be used to filter collections. For more details, see the +commons-collections +documentation. +

+

+BeanPropertyValueEqualsPredicate is a Predicate that evaluates a +set property value against a given value. A typical usage is +(in combination with commons-collections) +to filter collections on the basis of a property value. +

+

+For example, to filter a collection to find all beans where active employee is false use: +

+    BeanPropertyValueEqualsPredicate predicate =
+        new BeanPropertyValueEqualsPredicate( "activeEmployee", Boolean.FALSE );
+ 
+    // filter the Collection
+    CollectionUtils.filter( peopleCollection, predicate );
+
+

+ + +

6.4 Transforming Collections Of Beans

+

+The Transformer interface in commons-collections encapsulates the transformation +of an input Object into an output object. Commons-collections contains code +that allows +Transformers to be applied produce a collection of outputs from a collection of inputs. +For more details, see the +commons-collections +documentation. +

+

+BeanToPropertyTransformer is a Transformer implementation +that transforms a bean into it's property value. +

+

+For example, to find all cities that are contained in the address of each person property of each bean in +a collection: +

+    // create the transformer
+    BeanToPropertyValueTransformer transformer = new BeanToPropertyValueTransformer( "person.address.city" );
+ 
+    // transform the Collection
+    Collection peoplesCities = CollectionUtils.collect( peopleCollection, transformer );
+    
+

+ + +

7. Frequently Asked Questions

+ + +

Why Can't BeanUtils Find My Method?

+

The BeanUtils package relies on introspection rather than +reflection. This means that it will find only +JavaBean +compliant properties.

+

There are some subtleties of this specification that can catch out the unwary: +

    +
  • A property can have only one set and one get method. Overloading is not allowed.
  • +
  • The java.beans.Introspector searches widely for a custom BeanInfo +class. If your class has the same name as another with a custom BeanInfo +(typically a java API class) then the Introspector may use that instead of +creating via reflection based on your class. If this happens, the only solution is to +create your own BeanInfo.
  • +
+

+ +

How Do I Set The BeanComparator Order To Be Ascending/Descending?

+

+BeanComparator relies on an internal Comparator to perform the actual +comparisions. By default, +org.apache.commons.collections.comparators.ComparableComparator +is used which imposes a natural order. If you want to change the order, +then a custom Comparator should be created and passed into the +appropriate constructor. +

+

+For example: +

+
+    import org.apache.commons.collections.comparators.ComparableComparator;
+    import org.apache.commons.collections.comparators.ReverseComparator;
+    import org.apache.commons.beanutils.BeanComparator;
+    ...
+    BeanComparator reversedNaturalOrderBeanComparator
+        = new BeanComparator("propertyName", new ReverseComparator(new ComparableComparator()));
+    Collections.sort(myList, reversedNaturalOrderBeanComparator);
+    ...
+
+

+ +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-tree.html new file mode 100644 index 0000000..611d9fd --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-tree.html @@ -0,0 +1,222 @@ + + + + + + + +org.apache.commons.beanutils Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.apache.commons.beanutils +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-use.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-use.html new file mode 100644 index 0000000..a26c611 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/beanutils/package-use.html @@ -0,0 +1,370 @@ + + + + + + + +Uses of Package org.apache.commons.beanutils (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
org.apache.commons.beanutils

+
+ + + + + + + + + + + + + + + + + + + + + +
+Packages that use org.apache.commons.beanutils
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time. 
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Classes in org.apache.commons.beanutils used by org.apache.commons.beanutils
BasicDynaClass + +
+          Minimal implementation of the DynaClass interface.
BeanAccessLanguageException + +
+          Thrown to indicate that the Bean Access Language cannot execute query + against given bean.
BeanMap + +
+          An implementation of Map for JavaBeans which uses introspection to + get and put properties in the bean.
BeanUtilsBean + +
+          JavaBean property population methods.
Converter + +
+          General purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
ConvertUtilsBean + +
+          Utility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.
DynaBean + +
+          A DynaBean is a Java object that supports properties + whose names and data types, as well as values, may be dynamically modified.
DynaClass + +
+          A DynaClass is a simulation of the functionality of + java.lang.Class for classes implementing the + DynaBean interface.
DynaProperty + +
+          The metadata describing an individual property of a DynaBean.
LazyDynaBean + +
+          DynaBean which automatically adds properties to the DynaClass + and provides Lazy List and Lazy Map features.
MutableDynaClass + +
+          A specialized extension to DynaClass that allows properties + to be added or removed dynamically.
PropertyUtilsBean + +
+          Utility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.
ResultSetDynaClass + +
+          Implementation of DynaClass for DynaBeans that wrap the + java.sql.Row objects of a java.sql.ResultSet.
WrapDynaBean + +
+          Implementation of DynaBean that wraps a standard JavaBean + instance, so that DynaBean APIs can be used to access its properties.
WrapDynaClass + +
+          Implementation of DynaClass for DynaBeans that wrap + standard JavaBean instances.
+  +

+ + + + + + + + +
+Classes in org.apache.commons.beanutils used by org.apache.commons.beanutils.converters
Converter + +
+          General purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
+  +

+ + + + + + + + + + + + + + + + + + + + +
+Classes in org.apache.commons.beanutils used by org.apache.commons.beanutils.locale
BeanUtils + +
+          Utility methods for populating JavaBeans properties via reflection.
BeanUtilsBean + +
+          JavaBean property population methods.
Converter + +
+          General purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
ConvertUtilsBean + +
+          Utility methods for converting String scalar values to objects of the + specified Class, String arrays to arrays of the specified Class.
PropertyUtilsBean + +
+          Utility methods for using Java Reflection APIs to facilitate generic + property getter and setter operations on Java objects.
+  +

+ + + + + + + + +
+Classes in org.apache.commons.beanutils used by org.apache.commons.beanutils.locale.converters
Converter + +
+          General purpose data type converter that can be registered and used + within the BeanUtils package to manage the conversion of objects from + one type to another.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/ArrayStack.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/ArrayStack.html new file mode 100644 index 0000000..dbae6d3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/ArrayStack.html @@ -0,0 +1,584 @@ + + + + + + + +ArrayStack (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.collections +
+Class ArrayStack

+
+java.lang.Object
+  extended by java.util.AbstractCollection
+      extended by java.util.AbstractList
+          extended by java.util.ArrayList
+              extended by org.apache.commons.collections.ArrayStack
+
+
+
All Implemented Interfaces:
Serializable, Cloneable, Iterable, Collection, List, RandomAccess, Buffer
+
+
+
+
public class ArrayStack
extends ArrayList
implements Buffer
+ + +

+An implementation of the Stack API that is based on an + ArrayList instead of a Vector, so it is not + synchronized to protect against multi-threaded access. The implementation + is therefore operates faster in environments where you do not need to + worry about multiple thread contention. +

+ The removal order of an ArrayStack is based on insertion + order: The most recently added element is removed first. The iteration + order is not the same as the removal order. The iterator returns + elements from the bottom up, whereas the remove() method removes + them from the top down. +

+ Unlike Stack, ArrayStack accepts null entries. +

+ Note: this class should be bytecode-identical to the + version in commons collections. This is required to allow backwards + compability with both previous versions of BeanUtils and also allow + coexistance with both collections 2.1 and 3.0. +

+ +

+

+
Since:
+
Commons Collections 1.0
+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig R. McClanahan, Paul Jack, Stephen Colebourne
+
See Also:
Stack, +Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class java.util.AbstractList
modCount
+  + + + + + + + + + + + + + +
+Constructor Summary
ArrayStack() + +
+          Constructs a new empty ArrayStack.
ArrayStack(int initialSize) + +
+          Constructs a new empty ArrayStack with an initial size.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanempty() + +
+          Return true if this stack is currently empty.
+ Objectget() + +
+          Returns the element on the top of the stack.
+ Objectpeek() + +
+          Returns the top item off of this stack without removing it.
+ Objectpeek(int n) + +
+          Returns the n'th item down (zero-relative) from the top of this + stack without removing it.
+ Objectpop() + +
+          Pops the top item off of this stack and return it.
+ Objectpush(Object item) + +
+          Pushes a new item onto the top of this stack.
+ Objectremove() + +
+          Removes the element on the top of the stack.
+ intsearch(Object object) + +
+          Returns the one-based position of the distance from the top that the + specified object exists on this stack, where the top-most element is + considered to be at distance 1.
+ + + + + + + +
Methods inherited from class java.util.ArrayList
add, add, addAll, addAll, clear, clone, contains, ensureCapacity, get, indexOf, isEmpty, lastIndexOf, remove, remove, removeRange, set, size, toArray, toArray, trimToSize
+ + + + + + + +
Methods inherited from class java.util.AbstractList
equals, hashCode, iterator, listIterator, listIterator, subList
+ + + + + + + +
Methods inherited from class java.util.AbstractCollection
containsAll, removeAll, retainAll, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
+ + + + + + + +
Methods inherited from interface java.util.Collection
add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray
+ + + + + + + +
Methods inherited from interface java.util.List
containsAll, equals, hashCode, iterator, listIterator, listIterator, removeAll, retainAll, subList
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ArrayStack

+
+public ArrayStack()
+
+
Constructs a new empty ArrayStack. The initial size + is controlled by ArrayList and is currently 10. +

+

+
+ +

+ArrayStack

+
+public ArrayStack(int initialSize)
+
+
Constructs a new empty ArrayStack with an initial size. +

+

+
Parameters:
initialSize - the initial size to use +
Throws: +
IllegalArgumentException - if the specified initial size + is negative
+
+ + + + + + + + +
+Method Detail
+ +

+empty

+
+public boolean empty()
+
+
Return true if this stack is currently empty. +

+ This method exists for compatibility with java.util.Stack. + New users of this class should use isEmpty instead. +

+

+
+
+
+ +
Returns:
true if the stack is currently empty
+
+
+
+ +

+peek

+
+public Object peek()
+            throws EmptyStackException
+
+
Returns the top item off of this stack without removing it. +

+

+
+
+
+ +
Returns:
the top item on the stack +
Throws: +
EmptyStackException - if the stack is empty
+
+
+
+ +

+peek

+
+public Object peek(int n)
+            throws EmptyStackException
+
+
Returns the n'th item down (zero-relative) from the top of this + stack without removing it. +

+

+
+
+
+
Parameters:
n - the number of items down to go +
Returns:
the n'th item on the stack, zero relative +
Throws: +
EmptyStackException - if there are not enough items on the + stack to satisfy this request
+
+
+
+ +

+pop

+
+public Object pop()
+           throws EmptyStackException
+
+
Pops the top item off of this stack and return it. +

+

+
+
+
+ +
Returns:
the top item on the stack +
Throws: +
EmptyStackException - if the stack is empty
+
+
+
+ +

+push

+
+public Object push(Object item)
+
+
Pushes a new item onto the top of this stack. The pushed item is also + returned. This is equivalent to calling add. +

+

+
+
+
+
Parameters:
item - the item to be added +
Returns:
the item just pushed
+
+
+
+ +

+search

+
+public int search(Object object)
+
+
Returns the one-based position of the distance from the top that the + specified object exists on this stack, where the top-most element is + considered to be at distance 1. If the object is not + present on the stack, return -1 instead. The + equals() method is used to compare to the items + in this stack. +

+

+
+
+
+
Parameters:
object - the object to be searched for +
Returns:
the 1-based depth into the stack of the object, or -1 if not found
+
+
+
+ +

+get

+
+public Object get()
+
+
Returns the element on the top of the stack. +

+

+
Specified by:
get in interface Buffer
+
+
+ +
Returns:
the element on the top of the stack +
Throws: +
BufferUnderflowException - if the stack is empty
+
+
+
+ +

+remove

+
+public Object remove()
+
+
Removes the element on the top of the stack. +

+

+
Specified by:
remove in interface Buffer
+
+
+ +
Returns:
the removed element +
Throws: +
BufferUnderflowException - if the stack is empty
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/Buffer.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/Buffer.html new file mode 100644 index 0000000..590689b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/Buffer.html @@ -0,0 +1,288 @@ + + + + + + + +Buffer (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.collections +
+Interface Buffer

+
+
All Superinterfaces:
Collection, Iterable
+
+
+
All Known Implementing Classes:
ArrayStack
+
+
+
+
public interface Buffer
extends Collection
+ + +

+Defines a collection that allows objects to be removed in some well-defined order. +

+ The removal order can be based on insertion order (eg, a FIFO queue or a + LIFO stack), on access order (eg, an LRU cache), on some arbitrary comparator + (eg, a priority queue) or on any other well-defined ordering. +

+ Note that the removal order is not necessarily the same as the iteration + order. A Buffer implementation may have equivalent removal + and iteration orders, but this is not required. +

+ This interface does not specify any behavior for + Object.equals(Object) and Object.hashCode() methods. It + is therefore possible for a Buffer implementation to also + also implement List, Set or + Bag. +

+ Note: this class should be bytecode-identical to the + version in commons collections. This is required to allow backwards + compability with both previous versions of BeanUtils and also allow + coexistance with both collections 2.1 and 3.0. +

+ +

+

+
Since:
+
Commons Collections 2.1
+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Avalon, Berin Loritsch, Paul Jack, Stephen Colebourne
+
+
+ +

+ + + + + + + + + + + + + + + + +
+Method Summary
+ Objectget() + +
+          Gets the next object from the buffer without removing it.
+ Objectremove() + +
+          Gets and removes the next object from the buffer.
+ + + + + + + +
Methods inherited from interface java.util.Collection
add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray
+  +

+ + + + + + + + +
+Method Detail
+ +

+remove

+
+Object remove()
+
+
Gets and removes the next object from the buffer. +

+

+
+
+
+ +
Returns:
the next object in the buffer, which is also removed +
Throws: +
BufferUnderflowException - if the buffer is already empty
+
+
+
+ +

+get

+
+Object get()
+
+
Gets the next object from the buffer without removing it. +

+

+
+
+
+ +
Returns:
the next object in the buffer, which is not removed +
Throws: +
BufferUnderflowException - if the buffer is empty
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/BufferUnderflowException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/BufferUnderflowException.html new file mode 100644 index 0000000..3a21fc3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/BufferUnderflowException.html @@ -0,0 +1,329 @@ + + + + + + + +BufferUnderflowException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.collections +
+Class BufferUnderflowException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by java.lang.RuntimeException
+              extended by java.util.NoSuchElementException
+                  extended by org.apache.commons.collections.BufferUnderflowException
+
+
+
All Implemented Interfaces:
Serializable
+
+
+
+
public class BufferUnderflowException
extends NoSuchElementException
+ + +

+The BufferUnderflowException is used when the buffer is already empty. +

+ NOTE: From version 3.0, this exception extends NoSuchElementException. +

+ +

+

+
Since:
+
Commons Collections 2.1
+
Version:
+
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Avalon, Berin Loritsch, Jeff Turner, Paul Jack, Stephen Colebourne
+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
BufferUnderflowException() + +
+          Constructs a new BufferUnderflowException.
BufferUnderflowException(String message) + +
+          Construct a new BufferUnderflowException.
BufferUnderflowException(String message, + Throwable exception) + +
+          Construct a new BufferUnderflowException.
+  + + + + + + + + + + + +
+Method Summary
+ ThrowablegetCause() + +
+          Gets the root cause of the exception.
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BufferUnderflowException

+
+public BufferUnderflowException()
+
+
Constructs a new BufferUnderflowException. +

+

+
+ +

+BufferUnderflowException

+
+public BufferUnderflowException(String message)
+
+
Construct a new BufferUnderflowException. +

+

+
Parameters:
message - the detail message for this exception
+
+
+ +

+BufferUnderflowException

+
+public BufferUnderflowException(String message,
+                                Throwable exception)
+
+
Construct a new BufferUnderflowException. +

+

+
Parameters:
message - the detail message for this exception
exception - the root cause of the exception
+
+ + + + + + + + +
+Method Detail
+ +

+getCause

+
+public final Throwable getCause()
+
+
Gets the root cause of the exception. +

+

+
Overrides:
getCause in class Throwable
+
+
+ +
Returns:
the root cause
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/FastHashMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/FastHashMap.html new file mode 100644 index 0000000..8e50986 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/FastHashMap.html @@ -0,0 +1,864 @@ + + + + + + + +FastHashMap (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +org.apache.commons.collections +
+Class FastHashMap

+
+java.lang.Object
+  extended by java.util.AbstractMap
+      extended by java.util.HashMap
+          extended by org.apache.commons.collections.FastHashMap
+
+
+
All Implemented Interfaces:
Serializable, Cloneable, Map
+
+
+
+
public class FastHashMap
extends HashMap
+ + +

+

A customized implementation of java.util.HashMap designed + to operate in a multithreaded environment where the large majority of + method calls are read-only, instead of structural changes. When operating + in "fast" mode, read calls are non-synchronized and write calls perform the + following steps:

+
    +
  • Clone the existing collection +
  • Perform the modification on the clone +
  • Replace the existing collection with the (modified) clone +
+

When first created, objects of this class default to "slow" mode, where + all accesses of any type are synchronized but no cloning takes place. This + is appropriate for initially populating the collection, followed by a switch + to "fast" mode (by calling setFast(true)) after initialization + is complete.

+ +

NOTE: If you are creating and accessing a + HashMap only within a single thread, you should use + java.util.HashMap directly (with no synchronization), for + maximum performance.

+ +

NOTE: This class is not cross-platform. + Using it may cause unexpected failures on some architectures. + It suffers from the same problems as the double-checked locking idiom. + In particular, the instruction that clones the internal collection and the + instruction that sets the internal reference to the clone can be executed + or perceived out-of-order. This means that any read operation might fail + unexpectedly, as it may be reading the state of the internal collection + before the internal collection is fully formed. + For more information on the double-checked locking idiom, see the + + Double-Checked Locking Idiom Is Broken Declaration.

+

+ +

+

+
Since:
+
Commons Collections 1.0
+
Version:
+
$Revision: 555845 $ $Date: 2007-07-13 03:52:05 +0100 (Fri, 13 Jul 2007) $
+
Author:
+
Craig R. McClanahan, Stephen Colebourne
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class java.util.AbstractMap
AbstractMap.SimpleEntry, AbstractMap.SimpleImmutableEntry
+  + + + + + + + + + + + + + + + +
+Field Summary
+protected  booleanfast + +
+          Are we currently operating in "fast" mode?
+protected  HashMapmap + +
+          The underlying map we are managing.
+  + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
FastHashMap() + +
+          Construct an empty map.
FastHashMap(int capacity) + +
+          Construct an empty map with the specified capacity.
FastHashMap(int capacity, + float factor) + +
+          Construct an empty map with the specified capacity and load factor.
FastHashMap(Map map) + +
+          Construct a new map with the same mappings as the specified map.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclear() + +
+          Remove all mappings from this map.
+ Objectclone() + +
+          Return a shallow copy of this FastHashMap instance.
+ booleancontainsKey(Object key) + +
+          Return true if this map contains a mapping for the + specified key.
+ booleancontainsValue(Object value) + +
+          Return true if this map contains one or more keys mapping + to the specified value.
+ SetentrySet() + +
+          Return a collection view of the mappings contained in this map.
+ booleanequals(Object o) + +
+          Compare the specified object with this list for equality.
+ Objectget(Object key) + +
+          Return the value to which this map maps the specified key.
+ booleangetFast() + +
+          Returns true if this map is operating in fast mode.
+ inthashCode() + +
+          Return the hash code value for this map.
+ booleanisEmpty() + +
+          Return true if this map contains no mappings.
+ SetkeySet() + +
+          Return a set view of the keys contained in this map.
+ Objectput(Object key, + Object value) + +
+          Associate the specified value with the specified key in this map.
+ voidputAll(Map in) + +
+          Copy all of the mappings from the specified map to this one, replacing + any mappings with the same keys.
+ Objectremove(Object key) + +
+          Remove any mapping for this key, and return any previously + mapped value.
+ voidsetFast(boolean fast) + +
+          Sets whether this map is operating in fast mode.
+ intsize() + +
+          Return the number of key-value mappings in this map.
+ Collectionvalues() + +
+          Return a collection view of the values contained in this map.
+ + + + + + + +
Methods inherited from class java.util.AbstractMap
toString
+ + + + + + + +
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+map

+
+protected HashMap map
+
+
The underlying map we are managing. +

+

+
+
+
+ +

+fast

+
+protected boolean fast
+
+
Are we currently operating in "fast" mode? +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+FastHashMap

+
+public FastHashMap()
+
+
Construct an empty map. +

+

+
+ +

+FastHashMap

+
+public FastHashMap(int capacity)
+
+
Construct an empty map with the specified capacity. +

+

+
Parameters:
capacity - the initial capacity of the empty map
+
+
+ +

+FastHashMap

+
+public FastHashMap(int capacity,
+                   float factor)
+
+
Construct an empty map with the specified capacity and load factor. +

+

+
Parameters:
capacity - the initial capacity of the empty map
factor - the load factor of the new map
+
+
+ +

+FastHashMap

+
+public FastHashMap(Map map)
+
+
Construct a new map with the same mappings as the specified map. +

+

+
Parameters:
map - the map whose mappings are to be copied
+
+ + + + + + + + +
+Method Detail
+ +

+getFast

+
+public boolean getFast()
+
+
Returns true if this map is operating in fast mode. +

+

+ +
Returns:
true if this map is operating in fast mode
+
+
+
+ +

+setFast

+
+public void setFast(boolean fast)
+
+
Sets whether this map is operating in fast mode. +

+

+
Parameters:
fast - true if this map should operate in fast mode
+
+
+
+ +

+get

+
+public Object get(Object key)
+
+
Return the value to which this map maps the specified key. Returns + null if the map contains no mapping for this key, or if + there is a mapping with a value of null. Use the + containsKey() method to disambiguate these cases. +

+

+
Specified by:
get in interface Map
Overrides:
get in class HashMap
+
+
+
Parameters:
key - the key whose value is to be returned +
Returns:
the value mapped to that key, or null
+
+
+
+ +

+size

+
+public int size()
+
+
Return the number of key-value mappings in this map. +

+

+
Specified by:
size in interface Map
Overrides:
size in class HashMap
+
+
+ +
Returns:
the current size of the map
+
+
+
+ +

+isEmpty

+
+public boolean isEmpty()
+
+
Return true if this map contains no mappings. +

+

+
Specified by:
isEmpty in interface Map
Overrides:
isEmpty in class HashMap
+
+
+ +
Returns:
is the map currently empty
+
+
+
+ +

+containsKey

+
+public boolean containsKey(Object key)
+
+
Return true if this map contains a mapping for the + specified key. +

+

+
Specified by:
containsKey in interface Map
Overrides:
containsKey in class HashMap
+
+
+
Parameters:
key - the key to be searched for +
Returns:
true if the map contains the key
+
+
+
+ +

+containsValue

+
+public boolean containsValue(Object value)
+
+
Return true if this map contains one or more keys mapping + to the specified value. +

+

+
Specified by:
containsValue in interface Map
Overrides:
containsValue in class HashMap
+
+
+
Parameters:
value - the value to be searched for +
Returns:
true if the map contains the value
+
+
+
+ +

+put

+
+public Object put(Object key,
+                  Object value)
+
+
Associate the specified value with the specified key in this map. + If the map previously contained a mapping for this key, the old + value is replaced and returned. +

+

+
Specified by:
put in interface Map
Overrides:
put in class HashMap
+
+
+
Parameters:
key - the key with which the value is to be associated
value - the value to be associated with this key +
Returns:
the value previously mapped to the key, or null
+
+
+
+ +

+putAll

+
+public void putAll(Map in)
+
+
Copy all of the mappings from the specified map to this one, replacing + any mappings with the same keys. +

+

+
Specified by:
putAll in interface Map
Overrides:
putAll in class HashMap
+
+
+
Parameters:
in - the map whose mappings are to be copied
+
+
+
+ +

+remove

+
+public Object remove(Object key)
+
+
Remove any mapping for this key, and return any previously + mapped value. +

+

+
Specified by:
remove in interface Map
Overrides:
remove in class HashMap
+
+
+
Parameters:
key - the key whose mapping is to be removed +
Returns:
the value removed, or null
+
+
+
+ +

+clear

+
+public void clear()
+
+
Remove all mappings from this map. +

+

+
Specified by:
clear in interface Map
Overrides:
clear in class HashMap
+
+
+
+
+
+
+ +

+equals

+
+public boolean equals(Object o)
+
+
Compare the specified object with this list for equality. This + implementation uses exactly the code that is used to define the + list equals function in the documentation for the + Map.equals method. +

+

+
Specified by:
equals in interface Map
Overrides:
equals in class AbstractMap
+
+
+
Parameters:
o - the object to be compared to this list +
Returns:
true if the two maps are equal
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
Return the hash code value for this map. This implementation uses + exactly the code that is used to define the list hash function in the + documentation for the Map.hashCode method. +

+

+
Specified by:
hashCode in interface Map
Overrides:
hashCode in class AbstractMap
+
+
+ +
Returns:
suitable integer hash code
+
+
+
+ +

+clone

+
+public Object clone()
+
+
Return a shallow copy of this FastHashMap instance. + The keys and values themselves are not copied. +

+

+
Overrides:
clone in class HashMap
+
+
+ +
Returns:
a clone of this map
+
+
+
+ +

+entrySet

+
+public Set entrySet()
+
+
Return a collection view of the mappings contained in this map. Each + element in the returned collection is a Map.Entry. +

+

+
Specified by:
entrySet in interface Map
Overrides:
entrySet in class HashMap
+
+
+ +
Returns:
the set of map Map entries
+
+
+
+ +

+keySet

+
+public Set keySet()
+
+
Return a set view of the keys contained in this map. +

+

+
Specified by:
keySet in interface Map
Overrides:
keySet in class HashMap
+
+
+ +
Returns:
the set of the Map's keys
+
+
+
+ +

+values

+
+public Collection values()
+
+
Return a collection view of the values contained in this map. +

+

+
Specified by:
values in interface Map
Overrides:
values in class HashMap
+
+
+ +
Returns:
the set of the Map's values
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/ArrayStack.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/ArrayStack.html new file mode 100644 index 0000000..63c4046 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/ArrayStack.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.collections.ArrayStack (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.collections.ArrayStack

+
+No usage of org.apache.commons.collections.ArrayStack +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/Buffer.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/Buffer.html new file mode 100644 index 0000000..01d51dc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/Buffer.html @@ -0,0 +1,185 @@ + + + + + + + +Uses of Interface org.apache.commons.collections.Buffer (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
org.apache.commons.collections.Buffer

+
+ + + + + + + + + +
+Packages that use Buffer
org.apache.commons.collections +This package contains a small number of collections classes that are needed for beanutils +to function. 
+  +

+ + + + + +
+Uses of Buffer in org.apache.commons.collections
+  +

+ + + + + + + + + +
Classes in org.apache.commons.collections that implement Buffer
+ classArrayStack + +
+          An implementation of the Stack API that is based on an + ArrayList instead of a Vector, so it is not + synchronized to protect against multi-threaded access.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/BufferUnderflowException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/BufferUnderflowException.html new file mode 100644 index 0000000..074fa51 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/BufferUnderflowException.html @@ -0,0 +1,145 @@ + + + + + + + +Uses of Class org.apache.commons.collections.BufferUnderflowException (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.collections.BufferUnderflowException

+
+No usage of org.apache.commons.collections.BufferUnderflowException +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/FastHashMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/FastHashMap.html new file mode 100644 index 0000000..01ccb6a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/class-use/FastHashMap.html @@ -0,0 +1,262 @@ + + + + + + + +Uses of Class org.apache.commons.collections.FastHashMap (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
org.apache.commons.collections.FastHashMap

+
+ + + + + + + + + + + + + +
+Packages that use FastHashMap
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
+  +

+ + + + + +
+Uses of FastHashMap in org.apache.commons.beanutils
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils that return FastHashMap
+ FastHashMapPropertyUtilsBean.getMappedPropertyDescriptors(Class beanClass) + +
+          Deprecated. This method should not be exposed
+static FastHashMapPropertyUtils.getMappedPropertyDescriptors(Class beanClass) + +
+          Deprecated. This method should not be exposed
+ FastHashMapPropertyUtilsBean.getMappedPropertyDescriptors(Object bean) + +
+          Deprecated. This method should not be exposed
+static FastHashMapPropertyUtils.getMappedPropertyDescriptors(Object bean) + +
+          Deprecated. This method should not be exposed
+  +

+ + + + + +
+Uses of FastHashMap in org.apache.commons.beanutils.locale
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in org.apache.commons.beanutils.locale that return FastHashMap
+protected  FastHashMapLocaleConvertUtilsBean.create(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+protected static FastHashMapLocaleConvertUtils.create(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+protected  FastHashMapLocaleConvertUtilsBean.lookup(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+protected static FastHashMapLocaleConvertUtils.lookup(Locale locale) + +
+          Deprecated. This method will be modified to return a Map in the next release.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-frame.html new file mode 100644 index 0000000..f6b122c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-frame.html @@ -0,0 +1,57 @@ + + + + + + + +org.apache.commons.collections (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + +org.apache.commons.collections + + + + +
+Interfaces  + +
+Buffer
+ + + + + + +
+Classes  + +
+ArrayStack +
+FastHashMap
+ + + + + + +
+Exceptions  + +
+BufferUnderflowException
+ + + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-summary.html new file mode 100644 index 0000000..8904ea6 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-summary.html @@ -0,0 +1,216 @@ + + + + + + + +org.apache.commons.collections (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package org.apache.commons.collections +

+ +This package contains a small number of collections classes that are needed for beanutils +to function. +

+See: +
+          Description +

+ + + + + + + + + +
+Interface Summary
BufferDefines a collection that allows objects to be removed in some well-defined order.
+  + +

+ + + + + + + + + + + + + +
+Class Summary
ArrayStackAn implementation of the Stack API that is based on an + ArrayList instead of a Vector, so it is not + synchronized to protect against multi-threaded access.
FastHashMapA customized implementation of java.util.HashMap designed + to operate in a multithreaded environment where the large majority of + method calls are read-only, instead of structural changes.
+  + +

+ + + + + + + + + +
+Exception Summary
BufferUnderflowExceptionThe BufferUnderflowException is used when the buffer is already empty.
+  + +

+

+Package org.apache.commons.collections Description +

+ +

+

+This package contains a small number of collections classes that are needed for beanutils +to function. The dependencies will be deprecated in the 1.7.0 release and the need for these +classes will be removed in the future. These classes are identical to those in both 2.x and 3.x +series of commons-collections releases. +

+

+ +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-tree.html new file mode 100644 index 0000000..bdbb560 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-tree.html @@ -0,0 +1,188 @@ + + + + + + + +org.apache.commons.collections Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package org.apache.commons.collections +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-use.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-use.html new file mode 100644 index 0000000..8aa9640 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/org/apache/commons/collections/package-use.html @@ -0,0 +1,219 @@ + + + + + + + +Uses of Package org.apache.commons.collections (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
org.apache.commons.collections

+
+ + + + + + + + + + + + + + + + + +
+Packages that use org.apache.commons.collections
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties. 
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes. 
org.apache.commons.collections +This package contains a small number of collections classes that are needed for beanutils +to function. 
+  +

+ + + + + + + + +
+Classes in org.apache.commons.collections used by org.apache.commons.beanutils
FastHashMap + +
+          A customized implementation of java.util.HashMap designed + to operate in a multithreaded environment where the large majority of + method calls are read-only, instead of structural changes.
+  +

+ + + + + + + + +
+Classes in org.apache.commons.collections used by org.apache.commons.beanutils.locale
FastHashMap + +
+          A customized implementation of java.util.HashMap designed + to operate in a multithreaded environment where the large majority of + method calls are read-only, instead of structural changes.
+  +

+ + + + + + + + +
+Classes in org.apache.commons.collections used by org.apache.commons.collections
Buffer + +
+          Defines a collection that allows objects to be removed in some well-defined order.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-frame.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-frame.html new file mode 100644 index 0000000..de7cac1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-frame.html @@ -0,0 +1,53 @@ + + + + + + + +Overview List (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + + + + +
+
+ + + + + +
All Classes +

+ +Packages +
+org.apache.commons.beanutils +
+org.apache.commons.beanutils.converters +
+org.apache.commons.beanutils.expression +
+org.apache.commons.beanutils.locale +
+org.apache.commons.beanutils.locale.converters +
+org.apache.commons.collections +
+

+ +

+  + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-summary.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-summary.html new file mode 100644 index 0000000..f79c5f7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-summary.html @@ -0,0 +1,193 @@ + + + + + + + +Overview (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Commons BeanUtils 1.8.3 API +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Packages
org.apache.commons.beanutilsThe Bean Introspection Utilities component of the Apache Commons +subproject offers low-level utility classes that assist in getting and setting +property values on Java classes that follow the naming design patterns outlined +in the JavaBeans Specification, as well as mechanisms for dynamically defining +and accessing bean properties.
org.apache.commons.beanutils.convertersStandard implementations of the +Converter +interface that are pre-registered with +ConvertUtils +at startup time.
org.apache.commons.beanutils.expressionContains the +Resolver +interface and implementations.
org.apache.commons.beanutils.localeLocale-aware extensions of the standard beanutils classes.
org.apache.commons.beanutils.locale.convertersStandard implementations of the locale-aware +LocaleConverter +interface that are pre-registered with locale-aware +LocaleConvertUtils +at startup time.
org.apache.commons.collections +This package contains a small number of collections classes that are needed for beanutils +to function.
+ +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-tree.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-tree.html new file mode 100644 index 0000000..1cd9f4a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/overview-tree.html @@ -0,0 +1,254 @@ + + + + + + + +Class Hierarchy (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
org.apache.commons.beanutils, org.apache.commons.beanutils.converters, org.apache.commons.beanutils.expression, org.apache.commons.beanutils.locale, org.apache.commons.beanutils.locale.converters, org.apache.commons.collections
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/package-list b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/package-list new file mode 100644 index 0000000..0366c82 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/package-list @@ -0,0 +1,6 @@ +org.apache.commons.beanutils +org.apache.commons.beanutils.converters +org.apache.commons.beanutils.expression +org.apache.commons.beanutils.locale +org.apache.commons.beanutils.locale.converters +org.apache.commons.collections diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/packages b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/packages new file mode 100644 index 0000000..258af3c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/packages @@ -0,0 +1,6 @@ +org.apache.commons.beanutils +org.apache.commons.beanutils.converters +org.apache.commons.beanutils.expression +org.apache.commons.beanutils.locale +org.apache.commons.beanutils.locale.converters +org.apache.commons.collections \ No newline at end of file diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/resources/inherit.gif b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/serialized-form.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/serialized-form.html new file mode 100644 index 0000000..feffc47 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/serialized-form.html @@ -0,0 +1,1215 @@ + + + + + + + +Serialized Form (Commons BeanUtils 1.8.3 API) + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Serialized Form

+
+
+ + + + + +
+Package org.apache.commons.beanutils
+ +

+ + + + + +
+Class org.apache.commons.beanutils.BasicDynaBean extends Object implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+dynaClass

+
+DynaClass dynaClass
+
+
The DynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+
+

+values

+
+HashMap values
+
+
The set of property values for this DynaBean, keyed by property name. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.BasicDynaClass extends Object implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+constructorValues

+
+Object[] constructorValues
+
+
The argument values to be passed to the constructore we will use + to create new DynaBean instances. +

+

+
+
+
+

+dynaBeanClass

+
+Class dynaBeanClass
+
+
The DynaBean implementation class we will use for + creating new instances. +

+

+
+
+
+

+name

+
+String name
+
+
The "name" of this DynaBean class. +

+

+
+
+
+

+properties

+
+DynaProperty[] properties
+
+
The set of dynamic properties that are part of this DynaClass. +

+

+
+
+
+

+propertiesMap

+
+HashMap propertiesMap
+
+
The set of dynamic properties that are part of this DynaClass, + keyed by the property name. Individual descriptor instances will + be the same instances as those in the properties list. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.BeanAccessLanguageException extends IllegalArgumentException implements Serializable
+ +

+ +

+ + + + + +
+Class org.apache.commons.beanutils.BeanComparator extends Object implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+property

+
+String property
+
+
+
+
+
+

+comparator

+
+Comparator comparator
+
+
+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.ConversionException extends RuntimeException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+cause

+
+Throwable cause
+
+
The root cause of this ConversionException, compatible with + JDK 1.4's extensions to java.lang.Throwable. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.ConvertingWrapDynaBean extends WrapDynaBean implements Serializable
+ +

+ +

+ + + + + +
+Class org.apache.commons.beanutils.DynaProperty extends Object implements Serializable
+ +

+ + + + + +
+Serialization Methods
+ +

+

+readObject

+
+private void readObject(ObjectInputStream in)
+                 throws IOException,
+                        ClassNotFoundException
+
+
Reads field values for this object safely. + There are issues with serializing primitive class types on certain JVM versions + (including java 1.3). + This method provides a workaround. +

+

+ +
Throws: +
StreamCorruptedException - when the stream data values are outside expected range +
IOException +
ClassNotFoundException
+
+
+
+

+writeObject

+
+private void writeObject(ObjectOutputStream out)
+                  throws IOException
+
+
Writes this object safely. + There are issues with serializing primitive class types on certain JVM versions + (including java 1.3). + This method provides a workaround. +

+

+ +
Throws: +
IOException
+
+
+ + + + + +
+Serialized Fields
+ +

+name

+
+String name
+
+
Property name +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.LazyDynaBean extends Object implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+values

+
+Map values
+
+
The MutableDynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+
+

+dynaClass

+
+MutableDynaClass dynaClass
+
+
The MutableDynaClass "base class" that this DynaBean + is associated with. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.LazyDynaClass extends BasicDynaClass implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+restricted

+
+boolean restricted
+
+
Controls whether changes to this DynaClass's properties are allowed. +

+

+
+
+
+

+returnNull

+
+boolean returnNull
+
+

Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one.

+ +

Default is false. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.LazyDynaList extends ArrayList implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+elementDynaClass

+
+DynaClass elementDynaClass
+
+
The DynaClass of the List's elements. +

+

+
+
+
+

+elementType

+
+Class elementType
+
+
The type of the List's elements. +

+

+
+
+
+

+elementDynaBeanType

+
+Class elementDynaBeanType
+
+
The DynaBean type of the List's elements. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.LazyDynaMap extends LazyDynaBean implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+name

+
+String name
+
+
The name of this DynaClass (analogous to the + getName() method of java.lang.Class). +

+

+
+
+
+

+restricted

+
+boolean restricted
+
+
Controls whether changes to this DynaClass's properties are allowed. +

+

+
+
+
+

+returnNull

+
+boolean returnNull
+
+

Controls whether the getDynaProperty() method returns + null if a property doesn't exist - or creates a new one.

+ +

Default is false. +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.NestedNullException extends BeanAccessLanguageException implements Serializable
+ +

+ +

+ + + + + +
+Class org.apache.commons.beanutils.ResultSetDynaClass extends org.apache.commons.beanutils.JDBCDynaClass implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+resultSet

+
+ResultSet resultSet
+
+

The ResultSet we are wrapping.

+

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.RowSetDynaClass extends org.apache.commons.beanutils.JDBCDynaClass implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+limit

+
+int limit
+
+

Limits the size of the returned list. The call to + getRows() will return at most limit number of rows. + If less than or equal to 0, does not limit the size of the result. +

+

+
+
+
+

+rows

+
+List rows
+
+

The list of DynaBeans representing the contents of + the original ResultSet on which this + RowSetDynaClass was based.

+

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.beanutils.WrapDynaBean extends Object implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+instance

+
+Object instance
+
+
The JavaBean instance wrapped by this WrapDynaBean. +

+

+
+
+
+ + + + + +
+Package org.apache.commons.collections
+ +

+ + + + + +
+Class org.apache.commons.collections.ArrayStack extends ArrayList implements Serializable
+ +

+serialVersionUID: 2130079159931574599L + +

+ +

+ + + + + +
+Class org.apache.commons.collections.BufferOverflowException extends RuntimeException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+throwable

+
+Throwable throwable
+
+
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.BufferUnderflowException extends NoSuchElementException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+throwable

+
+Throwable throwable
+
+
The root cause throwable +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.CursorableLinkedList extends Object implements Serializable
+ +

+serialVersionUID: 8836393098519411393L + +

+ + + + + +
+Serialization Methods
+ +

+

+readObject

+
+private void readObject(ObjectInputStream arg0)
+                 throws IOException,
+                        ClassNotFoundException
+
+
+ +
Throws: +
IOException +
ClassNotFoundException
+
+
+
+

+writeObject

+
+private void writeObject(ObjectOutputStream arg0)
+                  throws IOException
+
+
+ +
Throws: +
IOException
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.ExtendedProperties extends Hashtable implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+defaults

+
+ExtendedProperties defaults
+
+
+
+
+
+

+file

+
+String file
+
+
+
+
+
+

+basePath

+
+String basePath
+
+
+
+
+
+

+fileSeparator

+
+String fileSeparator
+
+
+
+
+
+

+isInitialized

+
+boolean isInitialized
+
+
+
+
+
+

+keysAsListed

+
+ArrayList keysAsListed
+
+
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.FastArrayList extends ArrayList implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+list

+
+ArrayList list
+
+
+
+
+
+

+fast

+
+boolean fast
+
+
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.FastHashMap extends HashMap implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+map

+
+HashMap map
+
+
The underlying map we are managing. +

+

+
+
+
+

+fast

+
+boolean fast
+
+
Are we currently operating in "fast" mode? +

+

+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.FastTreeMap extends TreeMap implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+map

+
+TreeMap map
+
+
+
+
+
+

+fast

+
+boolean fast
+
+
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.FunctorException extends RuntimeException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+rootCause

+
+Throwable rootCause
+
+
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.LRUMap extends SequencedHashMap implements Serializable
+ +

+serialVersionUID: 2197433140769957051L + +

+ + + + + +
+Serialization Methods
+ +

+

+readExternal

+
+public void readExternal(ObjectInput arg0)
+                  throws IOException,
+                         ClassNotFoundException
+
+
+ +
Throws: +
IOException +
ClassNotFoundException
+
+
+
+

+writeExternal

+
+public void writeExternal(ObjectOutput arg0)
+                   throws IOException
+
+
+ +
Throws: +
IOException
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.MultiHashMap extends HashMap implements Serializable
+ +

+serialVersionUID: 1943563828307035349L + +

+ + + + + +
+Serialization Methods
+ +

+

+readObject

+
+private void readObject(ObjectInputStream arg0)
+                 throws IOException,
+                        ClassNotFoundException
+
+
+ +
Throws: +
IOException +
ClassNotFoundException
+
+
+ +

+ + + + + +
+Class org.apache.commons.collections.SequencedHashMap extends Object implements Serializable
+ +

+serialVersionUID: 3380552487888102930L + +

+ + + + + +
+Serialization Methods
+ +

+

+readExternal

+
+public void readExternal(ObjectInput arg0)
+                  throws IOException,
+                         ClassNotFoundException
+
+
+ +
Throws: +
IOException +
ClassNotFoundException
+
+
+
+

+writeExternal

+
+public void writeExternal(ObjectOutput arg0)
+                   throws IOException
+
+
+ +
Throws: +
IOException
+
+
+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaBean.html new file mode 100644 index 0000000..d016767 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaBean.html @@ -0,0 +1,501 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.io.Serializable;
+023    import java.lang.reflect.Array;
+024    import java.util.HashMap;
+025    import java.util.List;
+026    import java.util.Map;
+027    
+028    
+029    /**
+030     * <p>Minimal implementation of the <code>DynaBean</code> interface.  Can be
+031     * used as a convenience base class for more sophisticated implementations.</p>
+032     *
+033     * <p><strong>IMPLEMENTATION NOTE</strong> - Instances of this class that are
+034     * accessed from multiple threads simultaneously need to be synchronized.</p>
+035     *
+036     * <p><strong>IMPLEMENTATION NOTE</strong> - Instances of this class can be
+037     * successfully serialized and deserialized <strong>ONLY</strong> if all
+038     * property values are <code>Serializable</code>.</p>
+039     *
+040     * @author Craig McClanahan
+041     * @version $Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+042     */
+043    
+044    public class BasicDynaBean implements DynaBean, Serializable {
+045    
+046    
+047        // ---------------------------------------------------------- Constructors
+048    
+049    
+050        /**
+051         * Construct a new <code>DynaBean</code> associated with the specified
+052         * <code>DynaClass</code> instance.
+053         *
+054         * @param dynaClass The DynaClass we are associated with
+055         */
+056        public BasicDynaBean(DynaClass dynaClass) {
+057    
+058            super();
+059            this.dynaClass = dynaClass;
+060    
+061        }
+062    
+063    
+064        // ---------------------------------------------------- Instance Variables
+065    
+066    
+067        /**
+068         * The <code>DynaClass</code> "base class" that this DynaBean
+069         * is associated with.
+070         */
+071        protected DynaClass dynaClass = null;
+072    
+073    
+074        /**
+075         * The set of property values for this DynaBean, keyed by property name.
+076         */
+077        protected HashMap values = new HashMap();
+078    
+079        /** Map decorator for this DynaBean */
+080        private transient Map mapDecorator;
+081    
+082        /**
+083         * Return a Map representation of this DynaBean.
+084         * </p>
+085         * This, for example, could be used in JSTL in the following way to access
+086         * a DynaBean's <code>fooProperty</code>:
+087         * <ul><li><code>${myDynaBean.<b>map</b>.fooProperty}</code></li></ul>
+088         *
+089         * @return a Map representation of this DynaBean
+090         * @since 1.8.0
+091         */
+092        public Map getMap() {
+093    
+094            // cache the Map
+095            if (mapDecorator == null) {
+096                mapDecorator = new DynaBeanMapDecorator(this);
+097            }
+098            return mapDecorator;
+099    
+100        }
+101    
+102        // ------------------------------------------------------ DynaBean Methods
+103    
+104    
+105        /**
+106         * Does the specified mapped property contain a value for the specified
+107         * key value?
+108         *
+109         * @param name Name of the property to check
+110         * @param key Name of the key to check
+111         * @return <code>true<code> if the mapped property contains a value for
+112         * the specified key, otherwise <code>false</code>
+113         *
+114         * @exception IllegalArgumentException if there is no property
+115         *  of the specified name
+116         */
+117        public boolean contains(String name, String key) {
+118    
+119            Object value = values.get(name);
+120            if (value == null) {
+121                throw new NullPointerException
+122                        ("No mapped value for '" + name + "(" + key + ")'");
+123            } else if (value instanceof Map) {
+124                return (((Map) value).containsKey(key));
+125            } else {
+126                throw new IllegalArgumentException
+127                        ("Non-mapped property for '" + name + "(" + key + ")'");
+128            }
+129    
+130        }
+131    
+132    
+133        /**
+134         * Return the value of a simple property with the specified name.
+135         *
+136         * @param name Name of the property whose value is to be retrieved
+137         * @return The property's value
+138         *
+139         * @exception IllegalArgumentException if there is no property
+140         *  of the specified name
+141         */
+142        public Object get(String name) {
+143    
+144            // Return any non-null value for the specified property
+145            Object value = values.get(name);
+146            if (value != null) {
+147                return (value);
+148            }
+149    
+150            // Return a null value for a non-primitive property
+151            Class type = getDynaProperty(name).getType();
+152            if (!type.isPrimitive()) {
+153                return (value);
+154            }
+155    
+156            // Manufacture default values for primitive properties
+157            if (type == Boolean.TYPE) {
+158                return (Boolean.FALSE);
+159            } else if (type == Byte.TYPE) {
+160                return (new Byte((byte) 0));
+161            } else if (type == Character.TYPE) {
+162                return (new Character((char) 0));
+163            } else if (type == Double.TYPE) {
+164                return (new Double(0.0));
+165            } else if (type == Float.TYPE) {
+166                return (new Float((float) 0.0));
+167            } else if (type == Integer.TYPE) {
+168                return (new Integer(0));
+169            } else if (type == Long.TYPE) {
+170                return (new Long(0));
+171            } else if (type == Short.TYPE) {
+172                return (new Short((short) 0));
+173            } else {
+174                return (null);
+175            }
+176    
+177        }
+178    
+179    
+180        /**
+181         * Return the value of an indexed property with the specified name.
+182         *
+183         * @param name Name of the property whose value is to be retrieved
+184         * @param index Index of the value to be retrieved
+185         * @return The indexed property's value
+186         *
+187         * @exception IllegalArgumentException if there is no property
+188         *  of the specified name
+189         * @exception IllegalArgumentException if the specified property
+190         *  exists, but is not indexed
+191         * @exception IndexOutOfBoundsException if the specified index
+192         *  is outside the range of the underlying property
+193         * @exception NullPointerException if no array or List has been
+194         *  initialized for this property
+195         */
+196        public Object get(String name, int index) {
+197    
+198            Object value = values.get(name);
+199            if (value == null) {
+200                throw new NullPointerException
+201                        ("No indexed value for '" + name + "[" + index + "]'");
+202            } else if (value.getClass().isArray()) {
+203                return (Array.get(value, index));
+204            } else if (value instanceof List) {
+205                return ((List) value).get(index);
+206            } else {
+207                throw new IllegalArgumentException
+208                        ("Non-indexed property for '" + name + "[" + index + "]'");
+209            }
+210    
+211        }
+212    
+213    
+214        /**
+215         * Return the value of a mapped property with the specified name,
+216         * or <code>null</code> if there is no value for the specified key.
+217         *
+218         * @param name Name of the property whose value is to be retrieved
+219         * @param key Key of the value to be retrieved
+220         * @return The mapped property's value
+221         *
+222         * @exception IllegalArgumentException if there is no property
+223         *  of the specified name
+224         * @exception IllegalArgumentException if the specified property
+225         *  exists, but is not mapped
+226         */
+227        public Object get(String name, String key) {
+228    
+229            Object value = values.get(name);
+230            if (value == null) {
+231                throw new NullPointerException
+232                        ("No mapped value for '" + name + "(" + key + ")'");
+233            } else if (value instanceof Map) {
+234                return (((Map) value).get(key));
+235            } else {
+236                throw new IllegalArgumentException
+237                        ("Non-mapped property for '" + name + "(" + key + ")'");
+238            }
+239    
+240        }
+241    
+242    
+243        /**
+244         * Return the <code>DynaClass</code> instance that describes the set of
+245         * properties available for this DynaBean.
+246         *
+247         * @return The associated DynaClass
+248         */
+249        public DynaClass getDynaClass() {
+250    
+251            return (this.dynaClass);
+252    
+253        }
+254    
+255    
+256        /**
+257         * Remove any existing value for the specified key on the
+258         * specified mapped property.
+259         *
+260         * @param name Name of the property for which a value is to
+261         *  be removed
+262         * @param key Key of the value to be removed
+263         *
+264         * @exception IllegalArgumentException if there is no property
+265         *  of the specified name
+266         */
+267        public void remove(String name, String key) {
+268    
+269            Object value = values.get(name);
+270            if (value == null) {
+271                throw new NullPointerException
+272                        ("No mapped value for '" + name + "(" + key + ")'");
+273            } else if (value instanceof Map) {
+274                ((Map) value).remove(key);
+275            } else {
+276                throw new IllegalArgumentException
+277                        ("Non-mapped property for '" + name + "(" + key + ")'");
+278            }
+279    
+280        }
+281    
+282    
+283        /**
+284         * Set the value of a simple property with the specified name.
+285         *
+286         * @param name Name of the property whose value is to be set
+287         * @param value Value to which this property is to be set
+288         *
+289         * @exception ConversionException if the specified value cannot be
+290         *  converted to the type required for this property
+291         * @exception IllegalArgumentException if there is no property
+292         *  of the specified name
+293         * @exception NullPointerException if an attempt is made to set a
+294         *  primitive property to null
+295         */
+296        public void set(String name, Object value) {
+297    
+298            DynaProperty descriptor = getDynaProperty(name);
+299            if (value == null) {
+300                if (descriptor.getType().isPrimitive()) {
+301                    throw new NullPointerException
+302                            ("Primitive value for '" + name + "'");
+303                }
+304            } else if (!isAssignable(descriptor.getType(), value.getClass())) {
+305                throw new ConversionException
+306                        ("Cannot assign value of type '" +
+307                        value.getClass().getName() +
+308                        "' to property '" + name + "' of type '" +
+309                        descriptor.getType().getName() + "'");
+310            }
+311            values.put(name, value);
+312    
+313        }
+314    
+315    
+316        /**
+317         * Set the value of an indexed property with the specified name.
+318         *
+319         * @param name Name of the property whose value is to be set
+320         * @param index Index of the property to be set
+321         * @param value Value to which this property is to be set
+322         *
+323         * @exception ConversionException if the specified value cannot be
+324         *  converted to the type required for this property
+325         * @exception IllegalArgumentException if there is no property
+326         *  of the specified name
+327         * @exception IllegalArgumentException if the specified property
+328         *  exists, but is not indexed
+329         * @exception IndexOutOfBoundsException if the specified index
+330         *  is outside the range of the underlying property
+331         */
+332        public void set(String name, int index, Object value) {
+333    
+334            Object prop = values.get(name);
+335            if (prop == null) {
+336                throw new NullPointerException
+337                        ("No indexed value for '" + name + "[" + index + "]'");
+338            } else if (prop.getClass().isArray()) {
+339                Array.set(prop, index, value);
+340            } else if (prop instanceof List) {
+341                try {
+342                    ((List) prop).set(index, value);
+343                } catch (ClassCastException e) {
+344                    throw new ConversionException(e.getMessage());
+345                }
+346            } else {
+347                throw new IllegalArgumentException
+348                        ("Non-indexed property for '" + name + "[" + index + "]'");
+349            }
+350    
+351        }
+352    
+353    
+354        /**
+355         * Set the value of a mapped property with the specified name.
+356         *
+357         * @param name Name of the property whose value is to be set
+358         * @param key Key of the property to be set
+359         * @param value Value to which this property is to be set
+360         *
+361         * @exception ConversionException if the specified value cannot be
+362         *  converted to the type required for this property
+363         * @exception IllegalArgumentException if there is no property
+364         *  of the specified name
+365         * @exception IllegalArgumentException if the specified property
+366         *  exists, but is not mapped
+367         */
+368        public void set(String name, String key, Object value) {
+369    
+370            Object prop = values.get(name);
+371            if (prop == null) {
+372                throw new NullPointerException
+373                        ("No mapped value for '" + name + "(" + key + ")'");
+374            } else if (prop instanceof Map) {
+375                ((Map) prop).put(key, value);
+376            } else {
+377                throw new IllegalArgumentException
+378                        ("Non-mapped property for '" + name + "(" + key + ")'");
+379            }
+380    
+381        }
+382    
+383    
+384        // ------------------------------------------------------ Protected Methods
+385    
+386    
+387        /**
+388         * Return the property descriptor for the specified property name.
+389         *
+390         * @param name Name of the property for which to retrieve the descriptor
+391         * @return The property descriptor
+392         *
+393         * @exception IllegalArgumentException if this is not a valid property
+394         *  name for our DynaClass
+395         */
+396        protected DynaProperty getDynaProperty(String name) {
+397    
+398            DynaProperty descriptor = getDynaClass().getDynaProperty(name);
+399            if (descriptor == null) {
+400                throw new IllegalArgumentException
+401                        ("Invalid property name '" + name + "'");
+402            }
+403            return (descriptor);
+404    
+405        }
+406    
+407    
+408        /**
+409         * Is an object of the source class assignable to the destination class?
+410         *
+411         * @param dest Destination class
+412         * @param source Source class
+413         * @return <code>true</code> if the source class is assignable to the
+414         * destination class, otherwise <code>false</code>
+415         */
+416        protected boolean isAssignable(Class dest, Class source) {
+417    
+418            if (dest.isAssignableFrom(source) ||
+419                    ((dest == Boolean.TYPE) && (source == Boolean.class)) ||
+420                    ((dest == Byte.TYPE) && (source == Byte.class)) ||
+421                    ((dest == Character.TYPE) && (source == Character.class)) ||
+422                    ((dest == Double.TYPE) && (source == Double.class)) ||
+423                    ((dest == Float.TYPE) && (source == Float.class)) ||
+424                    ((dest == Integer.TYPE) && (source == Integer.class)) ||
+425                    ((dest == Long.TYPE) && (source == Long.class)) ||
+426                    ((dest == Short.TYPE) && (source == Short.class))) {
+427                return (true);
+428            } else {
+429                return (false);
+430            }
+431    
+432        }
+433    
+434    
+435    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaClass.html new file mode 100644 index 0000000..d5eeb75 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BasicDynaClass.html @@ -0,0 +1,370 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.io.Serializable;
+023    import java.lang.reflect.Constructor;
+024    import java.lang.reflect.InvocationTargetException;
+025    import java.util.HashMap;
+026    
+027    
+028    /**
+029     * <p>Minimal implementation of the <code>DynaClass</code> interface.  Can be
+030     * used as a convenience base class for more sophisticated implementations.</p> *
+031     * <p><strong>IMPLEMENTATION NOTE</strong> - The <code>DynaBean</code>
+032     * implementation class supplied to our constructor MUST have a one-argument
+033     * constructor of its own that accepts a <code>DynaClass</code>.  This is
+034     * used to associate the DynaBean instance with this DynaClass.</p>
+035     *
+036     * @author Craig McClanahan
+037     * @version $Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+038     */
+039    
+040    public class BasicDynaClass implements DynaClass, Serializable {
+041    
+042    
+043        // ----------------------------------------------------------- Constructors
+044    
+045    
+046        /**
+047         * Construct a new BasicDynaClass with default parameters.
+048         */
+049        public BasicDynaClass() {
+050    
+051            this(null, null, null);
+052    
+053        }
+054    
+055    
+056        /**
+057         * Construct a new BasicDynaClass with the specified parameters.
+058         *
+059         * @param name Name of this DynaBean class
+060         * @param dynaBeanClass The implementation class for new instances
+061         */
+062        public BasicDynaClass(String name, Class dynaBeanClass) {
+063    
+064            this(name, dynaBeanClass, null);
+065    
+066        }
+067    
+068    
+069        /**
+070         * Construct a new BasicDynaClass with the specified parameters.
+071         *
+072         * @param name Name of this DynaBean class
+073         * @param dynaBeanClass The implementation class for new intances
+074         * @param properties Property descriptors for the supported properties
+075         */
+076        public BasicDynaClass(String name, Class dynaBeanClass,
+077                              DynaProperty[] properties) {
+078    
+079            super();
+080            if (name != null) {
+081                this.name = name;
+082            }
+083            if (dynaBeanClass == null) {
+084                dynaBeanClass = BasicDynaBean.class;
+085            }
+086            setDynaBeanClass(dynaBeanClass);
+087            if (properties != null) {
+088                setProperties(properties);
+089            }
+090    
+091        }
+092    
+093    
+094        // ----------------------------------------------------- Instance Variables
+095    
+096    
+097        /**
+098         * The constructor of the <code>dynaBeanClass</code> that we will use
+099         * for creating new instances.
+100         */
+101        protected transient Constructor constructor = null;
+102    
+103    
+104        /**
+105         * The method signature of the constructor we will use to create
+106         * new DynaBean instances.
+107         */
+108        protected static Class[] constructorTypes = { DynaClass.class };
+109    
+110    
+111        /**
+112         * The argument values to be passed to the constructore we will use
+113         * to create new DynaBean instances.
+114         */
+115        protected Object[] constructorValues = { this };
+116    
+117    
+118        /**
+119         * The <code>DynaBean</code> implementation class we will use for
+120         * creating new instances.
+121         */
+122        protected Class dynaBeanClass = BasicDynaBean.class;
+123    
+124    
+125        /**
+126         * The "name" of this DynaBean class.
+127         */
+128        protected String name = this.getClass().getName();
+129    
+130    
+131        /**
+132         * The set of dynamic properties that are part of this DynaClass.
+133         */
+134        protected DynaProperty[] properties = new DynaProperty[0];
+135    
+136    
+137        /**
+138         * The set of dynamic properties that are part of this DynaClass,
+139         * keyed by the property name.  Individual descriptor instances will
+140         * be the same instances as those in the <code>properties</code> list.
+141         */
+142        protected HashMap propertiesMap = new HashMap();
+143    
+144    
+145        // ------------------------------------------------------ DynaClass Methods
+146    
+147    
+148        /**
+149         * Return the name of this DynaClass (analogous to the
+150         * <code>getName()</code> method of <code>java.lang.Class</code), which
+151         * allows the same <code>DynaClass</code> implementation class to support
+152         * different dynamic classes, with different sets of properties.
+153         *
+154         * @return the name of the DynaClass
+155         */
+156        public String getName() {
+157    
+158            return (this.name);
+159    
+160        }
+161    
+162    
+163        /**
+164         * Return a property descriptor for the specified property, if it exists;
+165         * otherwise, return <code>null</code>.
+166         *
+167         * @param name Name of the dynamic property for which a descriptor
+168         *  is requested
+169         * @return The descriptor for the specified property
+170         *
+171         * @exception IllegalArgumentException if no property name is specified
+172         */
+173        public DynaProperty getDynaProperty(String name) {
+174    
+175            if (name == null) {
+176                throw new IllegalArgumentException
+177                        ("No property name specified");
+178            }
+179            return ((DynaProperty) propertiesMap.get(name));
+180    
+181        }
+182    
+183    
+184        /**
+185         * <p>Return an array of <code>ProperyDescriptors</code> for the properties
+186         * currently defined in this DynaClass.  If no properties are defined, a
+187         * zero-length array will be returned.</p>
+188         *
+189         * <p><strong>FIXME</strong> - Should we really be implementing
+190         * <code>getBeanInfo()</code> instead, which returns property descriptors
+191         * and a bunch of other stuff?</p>
+192         *
+193         * @return the set of properties for this DynaClass
+194         */
+195        public DynaProperty[] getDynaProperties() {
+196    
+197            return (properties);
+198    
+199        }
+200    
+201    
+202        /**
+203         * Instantiate and return a new DynaBean instance, associated
+204         * with this DynaClass.
+205         *
+206         * @return A new <code>DynaBean</code> instance
+207         * @exception IllegalAccessException if the Class or the appropriate
+208         *  constructor is not accessible
+209         * @exception InstantiationException if this Class represents an abstract
+210         *  class, an array class, a primitive type, or void; or if instantiation
+211         *  fails for some other reason
+212         */
+213        public DynaBean newInstance()
+214                throws IllegalAccessException, InstantiationException {
+215    
+216            try {
+217                // Refind the constructor after a deserialization (if needed)
+218                if (constructor == null) {
+219                    setDynaBeanClass(this.dynaBeanClass);
+220                }
+221                // Invoke the constructor to create a new bean instance
+222                return ((DynaBean) constructor.newInstance(constructorValues));
+223            } catch (InvocationTargetException e) {
+224                throw new InstantiationException
+225                        (e.getTargetException().getMessage());
+226            }
+227    
+228        }
+229    
+230    
+231        // --------------------------------------------------------- Public Methods
+232    
+233    
+234        /**
+235         * Return the Class object we will use to create new instances in the
+236         * <code>newInstance()</code> method.  This Class <strong>MUST</strong>
+237         * implement the <code>DynaBean</code> interface.
+238         *
+239         * @return The class of the {@link DynaBean}
+240         */
+241        public Class getDynaBeanClass() {
+242    
+243            return (this.dynaBeanClass);
+244    
+245        }
+246    
+247    
+248        // ------------------------------------------------------ Protected Methods
+249    
+250    
+251        /**
+252         * Set the Class object we will use to create new instances in the
+253         * <code>newInstance()</code> method.  This Class <strong>MUST</strong>
+254         * implement the <code>DynaBean</code> interface.
+255         *
+256         * @param dynaBeanClass The new Class object
+257         *
+258         * @exception IllegalArgumentException if the specified Class does not
+259         *  implement the <code>DynaBean</code> interface
+260         */
+261        protected void setDynaBeanClass(Class dynaBeanClass) {
+262    
+263            // Validate the argument type specified
+264            if (dynaBeanClass.isInterface()) {
+265                throw new IllegalArgumentException
+266                        ("Class " + dynaBeanClass.getName() +
+267                        " is an interface, not a class");
+268            }
+269            if (!DynaBean.class.isAssignableFrom(dynaBeanClass)) {
+270                throw new IllegalArgumentException
+271                        ("Class " + dynaBeanClass.getName() +
+272                        " does not implement DynaBean");
+273            }
+274    
+275            // Identify the Constructor we will use in newInstance()
+276            try {
+277                this.constructor = dynaBeanClass.getConstructor(constructorTypes);
+278            } catch (NoSuchMethodException e) {
+279                throw new IllegalArgumentException
+280                        ("Class " + dynaBeanClass.getName() +
+281                        " does not have an appropriate constructor");
+282            }
+283            this.dynaBeanClass = dynaBeanClass;
+284    
+285        }
+286    
+287    
+288        /**
+289         * Set the list of dynamic properties supported by this DynaClass.
+290         *
+291         * @param properties List of dynamic properties to be supported
+292         */
+293        protected void setProperties(DynaProperty[] properties) {
+294    
+295            this.properties = properties;
+296            propertiesMap.clear();
+297            for (int i = 0; i < properties.length; i++) {
+298                propertiesMap.put(properties[i].getName(), properties[i]);
+299            }
+300    
+301        }
+302    
+303    
+304    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanAccessLanguageException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanAccessLanguageException.html new file mode 100644 index 0000000..3347a50 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanAccessLanguageException.html @@ -0,0 +1,114 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    /** 
+021     * Thrown to indicate that the <em>Bean Access Language</em> cannot execute query
+022     * against given bean. This is a runtime exception and access langauges are encouraged
+023     * to subclass to create custom exceptions whenever appropriate.
+024     *
+025     * @author Robert Burrell Donkin
+026     * @since 1.7
+027     */
+028    
+029    public class BeanAccessLanguageException extends IllegalArgumentException {
+030        
+031        // --------------------------------------------------------- Constuctors
+032        
+033        /** 
+034         * Constructs a <code>BeanAccessLanguageException</code> without a detail message.
+035         */
+036        public BeanAccessLanguageException() {
+037            super();
+038        }
+039        
+040        /**
+041         * Constructs a <code>BeanAccessLanguageException</code> without a detail message.
+042         * 
+043         * @param message the detail message explaining this exception
+044         */
+045        public BeanAccessLanguageException(String message) {
+046            super(message);
+047        }
+048    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanComparator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanComparator.html new file mode 100644 index 0000000..1af59d6 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanComparator.html @@ -0,0 +1,281 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    import java.lang.reflect.InvocationTargetException;
+021    import java.io.Serializable;
+022    import java.util.Comparator;
+023    import org.apache.commons.collections.comparators.ComparableComparator;
+024    
+025    /**
+026     * <p>
+027     * This comparator compares two beans by the specified bean property. 
+028     * It is also possible to compare beans based on nested, indexed, 
+029     * combined, mapped bean properties. Please see the {@link PropertyUtilsBean} 
+030     * documentation for all property name possibilities. 
+031     *
+032     * </p><p>
+033     * <strong>Note:</strong> The BeanComparator passes the values of the specified 
+034     * bean property to a ComparableComparator, if no comparator is 
+035     * specified in the constructor. If you are comparing two beans based 
+036     * on a property that could contain "null" values, a suitable <code>Comparator</code> 
+037     * or <code>ComparatorChain</code> should be supplied in the constructor. 
+038     * </p>
+039     *
+040     * @author     <a href"mailto:epugh@upstate.com">Eric Pugh</a>
+041     * @author Tim O'Brien 
+042     */
+043    public class BeanComparator implements Comparator, Serializable {
+044    
+045        private String property;
+046        private Comparator comparator;
+047    
+048        /** 
+049         * <p>Constructs a Bean Comparator without a property set.
+050         * </p><p>
+051         * <strong>Note</strong> that this is intended to be used 
+052         * only in bean-centric environments.
+053         * </p><p>
+054         * Until {@link #setProperty} is called with a non-null value.
+055         * this comparator will compare the Objects only.
+056         * </p>
+057         */
+058        public BeanComparator() {
+059            this( null );
+060        }
+061    
+062        /**
+063         * <p>Constructs a property-based comparator for beans.
+064         * This compares two beans by the property 
+065         * specified in the property parameter. This constructor creates 
+066         * a <code>BeanComparator</code> that uses a <code>ComparableComparator</code>
+067         * to compare the property values. 
+068         * </p>
+069         * 
+070         * <p>Passing "null" to this constructor will cause the BeanComparator 
+071         * to compare objects based on natural order, that is 
+072         * <code>java.lang.Comparable</code>. 
+073         * </p>
+074         *
+075         * @param property String Name of a bean property, which may contain the 
+076         * name of a simple, nested, indexed, mapped, or combined 
+077         * property. See {@link PropertyUtilsBean} for property query language syntax. 
+078         * If the property passed in is null then the actual objects will be compared
+079         */
+080        public BeanComparator( String property ) {
+081            this( property, ComparableComparator.getInstance() );
+082        }
+083    
+084        /**
+085         * Constructs a property-based comparator for beans.
+086         * This constructor creates 
+087         * a BeanComparator that uses the supplied Comparator to compare 
+088         * the property values. 
+089         * 
+090         * @param property Name of a bean property, can contain the name 
+091         * of a simple, nested, indexed, mapped, or combined 
+092         * property. See {@link PropertyUtilsBean} for property query language  
+093         * syntax. 
+094         * @param comparator BeanComparator will pass the values of the 
+095         * specified bean property to this Comparator. 
+096         * If your bean property is not a comparable or 
+097         * contains null values, a suitable comparator 
+098         * may be supplied in this constructor.
+099         */
+100        public BeanComparator( String property, Comparator comparator ) {
+101            setProperty( property );
+102            if (comparator != null) {
+103                this.comparator = comparator;
+104            } else {
+105                this.comparator = ComparableComparator.getInstance();
+106            }
+107        }
+108    
+109        /**
+110         * Sets the method to be called to compare two JavaBeans
+111         *
+112         * @param property String method name to call to compare 
+113         * If the property passed in is null then the actual objects will be compared
+114         */
+115        public void setProperty( String property ) {
+116            this.property = property;
+117        }
+118    
+119    
+120        /**
+121         * Gets the property attribute of the BeanComparator
+122         *
+123         * @return String method name to call to compare. 
+124         * A null value indicates that the actual objects will be compared
+125         */
+126        public String getProperty() {
+127            return property;
+128        }
+129    
+130    
+131        /**
+132         * Gets the Comparator being used to compare beans.
+133         *
+134         * @return the Comparator being used to compare beans 
+135         */
+136        public Comparator getComparator() {
+137            return comparator;
+138        }
+139    
+140    
+141        /**
+142         * Compare two JavaBeans by their shared property.
+143         * If {@link #getProperty} is null then the actual objects will be compared.
+144         *
+145         * @param  o1 Object The first bean to get data from to compare against
+146         * @param  o2 Object The second bean to get data from to compare
+147         * @return int negative or positive based on order
+148         */
+149        public int compare( Object o1, Object o2 ) {
+150            
+151            if ( property == null ) {
+152                // compare the actual objects
+153                return comparator.compare( o1, o2 );
+154            }
+155            
+156            try {
+157                Object value1 = PropertyUtils.getProperty( o1, property );
+158                Object value2 = PropertyUtils.getProperty( o2, property );
+159                return comparator.compare( value1, value2 );
+160            }
+161            catch ( IllegalAccessException iae ) {
+162                throw new RuntimeException( "IllegalAccessException: " + iae.toString() );
+163            } 
+164            catch ( InvocationTargetException ite ) {
+165                throw new RuntimeException( "InvocationTargetException: " + ite.toString() );
+166            }
+167            catch ( NoSuchMethodException nsme ) {
+168                throw new RuntimeException( "NoSuchMethodException: " + nsme.toString() );
+169            } 
+170        }
+171        
+172        /**
+173         * Two <code>BeanComparator</code>'s are equals if and only if
+174         * the wrapped comparators and the property names to be compared
+175         * are equal.
+176         * @param  o Comparator to compare to
+177         * @return whether the the comparators are equal or not
+178         */
+179        public boolean equals(Object o) {
+180            if (this == o) {
+181                return true;
+182            }
+183            if (!(o instanceof BeanComparator)) {
+184                return false;
+185            }
+186    
+187            final BeanComparator beanComparator = (BeanComparator) o;
+188    
+189            if (!comparator.equals(beanComparator.comparator)) {
+190                return false;
+191            }
+192            if (property != null)
+193            {
+194                if (!property.equals(beanComparator.property)) {
+195                    return false;
+196                }
+197            }
+198            else
+199            {
+200                return (beanComparator.property == null);
+201            }
+202    
+203            return true;
+204        }
+205    
+206        /**
+207         * Hashcode compatible with equals.
+208         * @return the hash code for this comparator
+209         */ 
+210        public int hashCode() {
+211            int result;
+212            result = comparator.hashCode();
+213            return result;
+214        }
+215    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.Entry.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.Entry.html new file mode 100644 index 0000000..0e47dde --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.Entry.html @@ -0,0 +1,933 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    import java.beans.BeanInfo;
+020    import java.beans.IntrospectionException;
+021    import java.beans.Introspector;
+022    import java.beans.PropertyDescriptor;
+023    import java.lang.reflect.Constructor;
+024    import java.lang.reflect.InvocationTargetException;
+025    import java.lang.reflect.Method;
+026    import java.util.AbstractMap;
+027    import java.util.AbstractSet;
+028    import java.util.ArrayList;
+029    import java.util.Collection;
+030    import java.util.Collections;
+031    import java.util.HashMap;
+032    import java.util.Iterator;
+033    import java.util.Map;
+034    import java.util.Set;
+035    
+036    import org.apache.commons.collections.list.UnmodifiableList;
+037    import org.apache.commons.collections.keyvalue.AbstractMapEntry;
+038    import org.apache.commons.collections.set.UnmodifiableSet;
+039    import org.apache.commons.collections.Transformer;
+040    
+041    /** 
+042     * An implementation of Map for JavaBeans which uses introspection to
+043     * get and put properties in the bean.
+044     * <p>
+045     * If an exception occurs during attempts to get or set a property then the
+046     * property is considered non existent in the Map
+047     *
+048     * @version $Revision: 812176 $ $Date: 2009-09-07 15:59:25 +0100 (Mon, 07 Sep 2009) $
+049     * 
+050     * @author James Strachan
+051     * @author Stephen Colebourne
+052     */
+053    public class BeanMap extends AbstractMap implements Cloneable {
+054    
+055        private transient Object bean;
+056    
+057        private transient HashMap readMethods = new HashMap();
+058        private transient HashMap writeMethods = new HashMap();
+059        private transient HashMap types = new HashMap();
+060    
+061        /**
+062         * An empty array.  Used to invoke accessors via reflection.
+063         */
+064        public static final Object[] NULL_ARGUMENTS = {};
+065    
+066        /**
+067         * Maps primitive Class types to transformers.  The transformer
+068         * transform strings into the appropriate primitive wrapper.
+069         *
+070         * N.B. private & unmodifiable replacement for the (public & static) defaultTransformers instance.
+071         */
+072        private static final Map typeTransformers = Collections.unmodifiableMap(createTypeTransformers());
+073    
+074        /**
+075         * This HashMap has been made unmodifiable to prevent issues when
+076         * loaded in a shared ClassLoader enviroment.
+077         *
+078         * @see "http://issues.apache.org/jira/browse/BEANUTILS-112"
+079         * @deprecated Use {@link BeanMap#getTypeTransformer(Class)} method
+080         */
+081        public static HashMap defaultTransformers = new HashMap() {
+082            public void clear() {
+083                throw new UnsupportedOperationException();
+084            }
+085            public boolean containsKey(Object key) {
+086                return typeTransformers.containsKey(key);
+087            }
+088            public boolean containsValue(Object value) {
+089                return typeTransformers.containsValue(value);
+090            }
+091            public Set entrySet() {
+092                return typeTransformers.entrySet();
+093            }
+094            public Object get(Object key) {
+095                return typeTransformers.get(key);
+096            }
+097            public boolean isEmpty() {
+098                return false;
+099            }
+100            public Set keySet() {
+101                return typeTransformers.keySet();
+102            }
+103            public Object put(Object key, Object value) {
+104                throw new UnsupportedOperationException();
+105            }
+106            public void putAll(Map m) {
+107                throw new UnsupportedOperationException();
+108            }
+109            public Object remove(Object key) {
+110                throw new UnsupportedOperationException();
+111            }
+112            public int size() {
+113                return typeTransformers.size();
+114            }
+115            public Collection values() {
+116                return typeTransformers.values();
+117            }
+118        };
+119        
+120        private static Map createTypeTransformers() {
+121            Map defaultTransformers = new HashMap();
+122            defaultTransformers.put( 
+123                Boolean.TYPE, 
+124                new Transformer() {
+125                    public Object transform( Object input ) {
+126                        return Boolean.valueOf( input.toString() );
+127                    }
+128                }
+129            );
+130            defaultTransformers.put( 
+131                Character.TYPE, 
+132                new Transformer() {
+133                    public Object transform( Object input ) {
+134                        return new Character( input.toString().charAt( 0 ) );
+135                    }
+136                }
+137            );
+138            defaultTransformers.put( 
+139                Byte.TYPE, 
+140                new Transformer() {
+141                    public Object transform( Object input ) {
+142                        return Byte.valueOf( input.toString() );
+143                    }
+144                }
+145            );
+146            defaultTransformers.put( 
+147                Short.TYPE, 
+148                new Transformer() {
+149                    public Object transform( Object input ) {
+150                        return Short.valueOf( input.toString() );
+151                    }
+152                }
+153            );
+154            defaultTransformers.put( 
+155                Integer.TYPE, 
+156                new Transformer() {
+157                    public Object transform( Object input ) {
+158                        return Integer.valueOf( input.toString() );
+159                    }
+160                }
+161            );
+162            defaultTransformers.put( 
+163                Long.TYPE, 
+164                new Transformer() {
+165                    public Object transform( Object input ) {
+166                        return Long.valueOf( input.toString() );
+167                    }
+168                }
+169            );
+170            defaultTransformers.put( 
+171                Float.TYPE, 
+172                new Transformer() {
+173                    public Object transform( Object input ) {
+174                        return Float.valueOf( input.toString() );
+175                    }
+176                }
+177            );
+178            defaultTransformers.put( 
+179                Double.TYPE, 
+180                new Transformer() {
+181                    public Object transform( Object input ) {
+182                        return Double.valueOf( input.toString() );
+183                    }
+184                }
+185            );
+186            return defaultTransformers;
+187        }
+188        
+189        
+190        // Constructors
+191        //-------------------------------------------------------------------------
+192    
+193        /**
+194         * Constructs a new empty <code>BeanMap</code>.
+195         */
+196        public BeanMap() {
+197        }
+198    
+199        /**
+200         * Constructs a new <code>BeanMap</code> that operates on the 
+201         * specified bean.  If the given bean is <code>null</code>, then
+202         * this map will be empty.
+203         *
+204         * @param bean  the bean for this map to operate on
+205         */
+206        public BeanMap(Object bean) {
+207            this.bean = bean;
+208            initialise();
+209        }
+210    
+211        // Map interface
+212        //-------------------------------------------------------------------------
+213    
+214        /**
+215         * Renders a string representation of this object.
+216         * @return a <code>String</code> representation of this object
+217         */
+218        public String toString() {
+219            return "BeanMap<" + String.valueOf(bean) + ">";
+220        }
+221        
+222        /**
+223         * Clone this bean map using the following process: 
+224         *
+225         * <ul>
+226         * <li>If there is no underlying bean, return a cloned BeanMap without a
+227         * bean.
+228         *
+229         * <li>Since there is an underlying bean, try to instantiate a new bean of
+230         * the same type using Class.newInstance().
+231         * 
+232         * <li>If the instantiation fails, throw a CloneNotSupportedException
+233         *
+234         * <li>Clone the bean map and set the newly instantiated bean as the
+235         * underlying bean for the bean map.
+236         *
+237         * <li>Copy each property that is both readable and writable from the
+238         * existing object to a cloned bean map.  
+239         *
+240         * <li>If anything fails along the way, throw a
+241         * CloneNotSupportedException.
+242         *
+243         * <ul>
+244         *
+245         * @return a cloned instance of this bean map
+246         * @throws CloneNotSupportedException if the underlying bean
+247         * cannot be cloned
+248         */
+249        public Object clone() throws CloneNotSupportedException {
+250            BeanMap newMap = (BeanMap)super.clone();
+251    
+252            if(bean == null) {
+253                // no bean, just an empty bean map at the moment.  return a newly
+254                // cloned and empty bean map.
+255                return newMap;
+256            }
+257    
+258            Object newBean = null;            
+259            Class beanClass = bean.getClass(); // Cannot throw Exception
+260            try {
+261                newBean = beanClass.newInstance();
+262            } catch (Exception e) {
+263                // unable to instantiate
+264                throw new CloneNotSupportedException
+265                    ("Unable to instantiate the underlying bean \"" +
+266                     beanClass.getName() + "\": " + e);
+267            }
+268                
+269            try {
+270                newMap.setBean(newBean);
+271            } catch (Exception exception) {
+272                throw new CloneNotSupportedException
+273                    ("Unable to set bean in the cloned bean map: " + 
+274                     exception);
+275            }
+276                
+277            try {
+278                // copy only properties that are readable and writable.  If its
+279                // not readable, we can't get the value from the old map.  If
+280                // its not writable, we can't write a value into the new map.
+281                Iterator readableKeys = readMethods.keySet().iterator();
+282                while(readableKeys.hasNext()) {
+283                    Object key = readableKeys.next();
+284                    if(getWriteMethod(key) != null) {
+285                        newMap.put(key, get(key));
+286                    }
+287                }
+288            } catch (Exception exception) {
+289                throw new CloneNotSupportedException
+290                    ("Unable to copy bean values to cloned bean map: " +
+291                     exception);
+292            }
+293    
+294            return newMap;
+295        }
+296    
+297        /**
+298         * Puts all of the writable properties from the given BeanMap into this
+299         * BeanMap. Read-only and Write-only properties will be ignored.
+300         *
+301         * @param map  the BeanMap whose properties to put
+302         */
+303        public void putAllWriteable(BeanMap map) {
+304            Iterator readableKeys = map.readMethods.keySet().iterator();
+305            while (readableKeys.hasNext()) {
+306                Object key = readableKeys.next();
+307                if (getWriteMethod(key) != null) {
+308                    this.put(key, map.get(key));
+309                }
+310            }
+311        }
+312    
+313    
+314        /**
+315         * This method reinitializes the bean map to have default values for the
+316         * bean's properties.  This is accomplished by constructing a new instance
+317         * of the bean which the map uses as its underlying data source.  This
+318         * behavior for <code>clear()</code> differs from the Map contract in that
+319         * the mappings are not actually removed from the map (the mappings for a
+320         * BeanMap are fixed).
+321         */
+322        public void clear() {
+323            if(bean == null) {
+324                return;
+325            }
+326    
+327            Class beanClass = null;
+328            try {
+329                beanClass = bean.getClass();
+330                bean = beanClass.newInstance();
+331            }
+332            catch (Exception e) {
+333                throw new UnsupportedOperationException( "Could not create new instance of class: " + beanClass );
+334            }
+335        }
+336    
+337        /**
+338         * Returns true if the bean defines a property with the given name.
+339         * <p>
+340         * The given name must be a <code>String</code>; if not, this method
+341         * returns false. This method will also return false if the bean
+342         * does not define a property with that name.
+343         * <p>
+344         * Write-only properties will not be matched as the test operates against
+345         * property read methods.
+346         *
+347         * @param name  the name of the property to check
+348         * @return false if the given name is null or is not a <code>String</code>;
+349         *   false if the bean does not define a property with that name; or
+350         *   true if the bean does define a property with that name
+351         */
+352        public boolean containsKey(Object name) {
+353            Method method = getReadMethod(name);
+354            return method != null;
+355        }
+356    
+357        /**
+358         * Returns true if the bean defines a property whose current value is
+359         * the given object.
+360         *
+361         * @param value  the value to check
+362         * @return false  true if the bean has at least one property whose 
+363         *   current value is that object, false otherwise
+364         */
+365        public boolean containsValue(Object value) {
+366            // use default implementation
+367            return super.containsValue(value);
+368        }
+369    
+370        /**
+371         * Returns the value of the bean's property with the given name.
+372         * <p>
+373         * The given name must be a {@link String} and must not be 
+374         * null; otherwise, this method returns <code>null</code>.
+375         * If the bean defines a property with the given name, the value of
+376         * that property is returned.  Otherwise, <code>null</code> is 
+377         * returned.
+378         * <p>
+379         * Write-only properties will not be matched as the test operates against
+380         * property read methods.
+381         *
+382         * @param name  the name of the property whose value to return
+383         * @return  the value of the property with that name
+384         */
+385        public Object get(Object name) {
+386            if ( bean != null ) {
+387                Method method = getReadMethod( name );
+388                if ( method != null ) {
+389                    try {
+390                        return method.invoke( bean, NULL_ARGUMENTS );
+391                    }
+392                    catch (  IllegalAccessException e ) {
+393                        logWarn( e );
+394                    }
+395                    catch ( IllegalArgumentException e ) {
+396                        logWarn(  e );
+397                    }
+398                    catch ( InvocationTargetException e ) {
+399                        logWarn(  e );
+400                    }
+401                    catch ( NullPointerException e ) {
+402                        logWarn(  e );
+403                    }
+404                }
+405            }
+406            return null;
+407        }
+408    
+409        /**
+410         * Sets the bean property with the given name to the given value.
+411         *
+412         * @param name  the name of the property to set
+413         * @param value  the value to set that property to
+414         * @return  the previous value of that property
+415         * @throws IllegalArgumentException  if the given name is null;
+416         *   if the given name is not a {@link String}; if the bean doesn't
+417         *   define a property with that name; or if the bean property with
+418         *   that name is read-only
+419         * @throws ClassCastException if an error occurs creating the method args
+420         */
+421        public Object put(Object name, Object value) throws IllegalArgumentException, ClassCastException {
+422            if ( bean != null ) {
+423                Object oldValue = get( name );
+424                Method method = getWriteMethod( name );
+425                if ( method == null ) {
+426                    throw new IllegalArgumentException( "The bean of type: "+ 
+427                            bean.getClass().getName() + " has no property called: " + name );
+428                }
+429                try {
+430                    Object[] arguments = createWriteMethodArguments( method, value );
+431                    method.invoke( bean, arguments );
+432    
+433                    Object newValue = get( name );
+434                    firePropertyChange( name, oldValue, newValue );
+435                }
+436                catch ( InvocationTargetException e ) {
+437                    logInfo( e );
+438                    throw new IllegalArgumentException( e.getMessage() );
+439                }
+440                catch ( IllegalAccessException e ) {
+441                    logInfo( e );
+442                    throw new IllegalArgumentException( e.getMessage() );
+443                }
+444                return oldValue;
+445            }
+446            return null;
+447        }
+448                        
+449        /**
+450         * Returns the number of properties defined by the bean.
+451         *
+452         * @return  the number of properties defined by the bean
+453         */
+454        public int size() {
+455            return readMethods.size();
+456        }
+457    
+458        
+459        /**
+460         * Get the keys for this BeanMap.
+461         * <p>
+462         * Write-only properties are <b>not</b> included in the returned set of
+463         * property names, although it is possible to set their value and to get 
+464         * their type.
+465         * 
+466         * @return BeanMap keys.  The Set returned by this method is not
+467         *        modifiable.
+468         */
+469        public Set keySet() {
+470            return UnmodifiableSet.decorate(readMethods.keySet());
+471        }
+472    
+473        /**
+474         * Gets a Set of MapEntry objects that are the mappings for this BeanMap.
+475         * <p>
+476         * Each MapEntry can be set but not removed.
+477         * 
+478         * @return the unmodifiable set of mappings
+479         */
+480        public Set entrySet() {
+481            return UnmodifiableSet.decorate(new AbstractSet() {
+482                public Iterator iterator() {
+483                    return entryIterator();
+484                }
+485                public int size() {
+486                  return BeanMap.this.readMethods.size();
+487                }
+488            });
+489        }
+490    
+491        /**
+492         * Returns the values for the BeanMap.
+493         * 
+494         * @return values for the BeanMap.  The returned collection is not
+495         *        modifiable.
+496         */
+497        public Collection values() {
+498            ArrayList answer = new ArrayList( readMethods.size() );
+499            for ( Iterator iter = valueIterator(); iter.hasNext(); ) {
+500                answer.add( iter.next() );
+501            }
+502            return UnmodifiableList.decorate(answer);
+503        }
+504    
+505    
+506        // Helper methods
+507        //-------------------------------------------------------------------------
+508    
+509        /**
+510         * Returns the type of the property with the given name.
+511         *
+512         * @param name  the name of the property
+513         * @return  the type of the property, or <code>null</code> if no such
+514         *  property exists
+515         */
+516        public Class getType(String name) {
+517            return (Class) types.get( name );
+518        }
+519    
+520        /**
+521         * Convenience method for getting an iterator over the keys.
+522         * <p>
+523         * Write-only properties will not be returned in the iterator.
+524         *
+525         * @return an iterator over the keys
+526         */
+527        public Iterator keyIterator() {
+528            return readMethods.keySet().iterator();
+529        }
+530    
+531        /**
+532         * Convenience method for getting an iterator over the values.
+533         *
+534         * @return an iterator over the values
+535         */
+536        public Iterator valueIterator() {
+537            final Iterator iter = keyIterator();
+538            return new Iterator() {            
+539                public boolean hasNext() {
+540                    return iter.hasNext();
+541                }
+542                public Object next() {
+543                    Object key = iter.next();
+544                    return get(key);
+545                }
+546                public void remove() {
+547                    throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+548                }
+549            };
+550        }
+551    
+552        /**
+553         * Convenience method for getting an iterator over the entries.
+554         *
+555         * @return an iterator over the entries
+556         */
+557        public Iterator entryIterator() {
+558            final Iterator iter = keyIterator();
+559            return new Iterator() {            
+560                public boolean hasNext() {
+561                    return iter.hasNext();
+562                }            
+563                public Object next() {
+564                    Object key = iter.next();
+565                    Object value = get(key);
+566                    return new Entry( BeanMap.this, key, value );
+567                }            
+568                public void remove() {
+569                    throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+570                }
+571            };
+572        }
+573    
+574    
+575        // Properties
+576        //-------------------------------------------------------------------------
+577    
+578        /**
+579         * Returns the bean currently being operated on.  The return value may
+580         * be null if this map is empty.
+581         *
+582         * @return the bean being operated on by this map
+583         */
+584        public Object getBean() {
+585            return bean;
+586        }
+587    
+588        /**
+589         * Sets the bean to be operated on by this map.  The given value may
+590         * be null, in which case this map will be empty.
+591         *
+592         * @param newBean  the new bean to operate on
+593         */
+594        public void setBean( Object newBean ) {
+595            bean = newBean;
+596            reinitialise();
+597        }
+598    
+599        /**
+600         * Returns the accessor for the property with the given name.
+601         *
+602         * @param name  the name of the property 
+603         * @return the accessor method for the property, or null
+604         */
+605        public Method getReadMethod(String name) {
+606            return (Method) readMethods.get(name);
+607        }
+608    
+609        /**
+610         * Returns the mutator for the property with the given name.
+611         *
+612         * @param name  the name of the property
+613         * @return the mutator method for the property, or null
+614         */
+615        public Method getWriteMethod(String name) {
+616            return (Method) writeMethods.get(name);
+617        }
+618    
+619    
+620        // Implementation methods
+621        //-------------------------------------------------------------------------
+622    
+623        /**
+624         * Returns the accessor for the property with the given name.
+625         *
+626         * @param name  the name of the property 
+627         * @return null if the name is null; null if the name is not a 
+628         * {@link String}; null if no such property exists; or the accessor
+629         *  method for that property
+630         */
+631        protected Method getReadMethod( Object name ) {
+632            return (Method) readMethods.get( name );
+633        }
+634    
+635        /**
+636         * Returns the mutator for the property with the given name.
+637         *
+638         * @param name  the name of the 
+639         * @return null if the name is null; null if the name is not a 
+640         * {@link String}; null if no such property exists; null if the 
+641         * property is read-only; or the mutator method for that property
+642         */
+643        protected Method getWriteMethod( Object name ) {
+644            return (Method) writeMethods.get( name );
+645        }
+646    
+647        /**
+648         * Reinitializes this bean.  Called during {@link #setBean(Object)}.
+649         * Does introspection to find properties.
+650         */
+651        protected void reinitialise() {
+652            readMethods.clear();
+653            writeMethods.clear();
+654            types.clear();
+655            initialise();
+656        }
+657    
+658        private void initialise() {
+659            if(getBean() == null) {
+660                return;
+661            }
+662    
+663            Class  beanClass = getBean().getClass();
+664            try {
+665                //BeanInfo beanInfo = Introspector.getBeanInfo( bean, null );
+666                BeanInfo beanInfo = Introspector.getBeanInfo( beanClass );
+667                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+668                if ( propertyDescriptors != null ) {
+669                    for ( int i = 0; i < propertyDescriptors.length; i++ ) {
+670                        PropertyDescriptor propertyDescriptor = propertyDescriptors[i];
+671                        if ( propertyDescriptor != null ) {
+672                            String name = propertyDescriptor.getName();
+673                            Method readMethod = propertyDescriptor.getReadMethod();
+674                            Method writeMethod = propertyDescriptor.getWriteMethod();
+675                            Class aType = propertyDescriptor.getPropertyType();
+676    
+677                            if ( readMethod != null ) {
+678                                readMethods.put( name, readMethod );
+679                            }
+680                            if ( writeMethod != null ) {
+681                                writeMethods.put( name, writeMethod );
+682                            }
+683                            types.put( name, aType );
+684                        }
+685                    }
+686                }
+687            }
+688            catch ( IntrospectionException e ) {
+689                logWarn(  e );
+690            }
+691        }
+692    
+693        /**
+694         * Called during a successful {@link #put(Object,Object)} operation.
+695         * Default implementation does nothing.  Override to be notified of
+696         * property changes in the bean caused by this map.
+697         *
+698         * @param key  the name of the property that changed
+699         * @param oldValue  the old value for that property
+700         * @param newValue  the new value for that property
+701         */
+702        protected void firePropertyChange( Object key, Object oldValue, Object newValue ) {
+703        }
+704    
+705        // Implementation classes
+706        //-------------------------------------------------------------------------
+707    
+708        /**
+709         * Map entry used by {@link BeanMap}.
+710         */
+711        protected static class Entry extends AbstractMapEntry {        
+712            private BeanMap owner;
+713            
+714            /**
+715             * Constructs a new <code>Entry</code>.
+716             *
+717             * @param owner  the BeanMap this entry belongs to
+718             * @param key  the key for this entry
+719             * @param value  the value for this entry
+720             */
+721            protected Entry( BeanMap owner, Object key, Object value ) {
+722                super( key, value );
+723                this.owner = owner;
+724            }
+725    
+726            /**
+727             * Sets the value.
+728             *
+729             * @param value  the new value for the entry
+730             * @return the old value for the entry
+731             */
+732            public Object setValue(Object value) {
+733                Object key = getKey();
+734                Object oldValue = owner.get( key );
+735    
+736                owner.put( key, value );
+737                Object newValue = owner.get( key );
+738                super.setValue( newValue );
+739                return oldValue;
+740            }
+741        }
+742    
+743        /**
+744         * Creates an array of parameters to pass to the given mutator method.
+745         * If the given object is not the right type to pass to the method 
+746         * directly, it will be converted using {@link #convertType(Class,Object)}.
+747         *
+748         * @param method  the mutator method
+749         * @param value  the value to pass to the mutator method
+750         * @return an array containing one object that is either the given value
+751         *   or a transformed value
+752         * @throws IllegalAccessException if {@link #convertType(Class,Object)}
+753         *   raises it
+754         * @throws IllegalArgumentException if any other exception is raised
+755         *   by {@link #convertType(Class,Object)}
+756         * @throws ClassCastException if an error occurs creating the method args
+757         */
+758        protected Object[] createWriteMethodArguments( Method method, Object value ) 
+759            throws IllegalAccessException, ClassCastException {            
+760            try {
+761                if ( value != null ) {
+762                    Class[] types = method.getParameterTypes();
+763                    if ( types != null && types.length > 0 ) {
+764                        Class paramType = types[0];
+765                        if ( ! paramType.isAssignableFrom( value.getClass() ) ) {
+766                            value = convertType( paramType, value );
+767                        }
+768                    }
+769                }
+770                Object[] answer = { value };
+771                return answer;
+772            }
+773            catch ( InvocationTargetException e ) {
+774                logInfo( e );
+775                throw new IllegalArgumentException( e.getMessage() );
+776            }
+777            catch ( InstantiationException e ) {
+778                logInfo( e );
+779                throw new IllegalArgumentException( e.getMessage() );
+780            }
+781        }
+782    
+783        /**
+784         * Converts the given value to the given type.  First, reflection is
+785         * is used to find a public constructor declared by the given class 
+786         * that takes one argument, which must be the precise type of the 
+787         * given value.  If such a constructor is found, a new object is
+788         * created by passing the given value to that constructor, and the
+789         * newly constructed object is returned.<P>
+790         *
+791         * If no such constructor exists, and the given type is a primitive
+792         * type, then the given value is converted to a string using its 
+793         * {@link Object#toString() toString()} method, and that string is
+794         * parsed into the correct primitive type using, for instance, 
+795         * {@link Integer#valueOf(String)} to convert the string into an
+796         * <code>int</code>.<P>
+797         *
+798         * If no special constructor exists and the given type is not a 
+799         * primitive type, this method returns the original value.
+800         *
+801         * @param newType  the type to convert the value to
+802         * @param value  the value to convert
+803         * @return the converted value
+804         * @throws NumberFormatException if newType is a primitive type, and 
+805         *  the string representation of the given value cannot be converted
+806         *  to that type
+807         * @throws InstantiationException  if the constructor found with 
+808         *  reflection raises it
+809         * @throws InvocationTargetException  if the constructor found with
+810         *  reflection raises it
+811         * @throws IllegalAccessException  never
+812         * @throws IllegalArgumentException  never
+813         */
+814        protected Object convertType( Class newType, Object value ) 
+815            throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+816            
+817            // try call constructor
+818            Class[] types = { value.getClass() };
+819            try {
+820                Constructor constructor = newType.getConstructor( types );        
+821                Object[] arguments = { value };
+822                return constructor.newInstance( arguments );
+823            }
+824            catch ( NoSuchMethodException e ) {
+825                // try using the transformers
+826                Transformer transformer = getTypeTransformer( newType );
+827                if ( transformer != null ) {
+828                    return transformer.transform( value );
+829                }
+830                return value;
+831            }
+832        }
+833    
+834        /**
+835         * Returns a transformer for the given primitive type.
+836         *
+837         * @param aType  the primitive type whose transformer to return
+838         * @return a transformer that will convert strings into that type,
+839         *  or null if the given type is not a primitive type
+840         */
+841        protected Transformer getTypeTransformer( Class aType ) {
+842            return (Transformer) typeTransformers.get( aType );
+843        }
+844    
+845        /**
+846         * Logs the given exception to <code>System.out</code>.  Used to display
+847         * warnings while accessing/mutating the bean.
+848         *
+849         * @param ex  the exception to log
+850         */
+851        protected void logInfo(Exception ex) {
+852            // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+853            System.out.println( "INFO: Exception: " + ex );
+854        }
+855    
+856        /**
+857         * Logs the given exception to <code>System.err</code>.  Used to display
+858         * errors while accessing/mutating the bean.
+859         *
+860         * @param ex  the exception to log
+861         */
+862        protected void logWarn(Exception ex) {
+863            // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+864            System.out.println( "WARN: Exception: " + ex );
+865            ex.printStackTrace();
+866        }
+867    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.html new file mode 100644 index 0000000..0e47dde --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanMap.html @@ -0,0 +1,933 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    import java.beans.BeanInfo;
+020    import java.beans.IntrospectionException;
+021    import java.beans.Introspector;
+022    import java.beans.PropertyDescriptor;
+023    import java.lang.reflect.Constructor;
+024    import java.lang.reflect.InvocationTargetException;
+025    import java.lang.reflect.Method;
+026    import java.util.AbstractMap;
+027    import java.util.AbstractSet;
+028    import java.util.ArrayList;
+029    import java.util.Collection;
+030    import java.util.Collections;
+031    import java.util.HashMap;
+032    import java.util.Iterator;
+033    import java.util.Map;
+034    import java.util.Set;
+035    
+036    import org.apache.commons.collections.list.UnmodifiableList;
+037    import org.apache.commons.collections.keyvalue.AbstractMapEntry;
+038    import org.apache.commons.collections.set.UnmodifiableSet;
+039    import org.apache.commons.collections.Transformer;
+040    
+041    /** 
+042     * An implementation of Map for JavaBeans which uses introspection to
+043     * get and put properties in the bean.
+044     * <p>
+045     * If an exception occurs during attempts to get or set a property then the
+046     * property is considered non existent in the Map
+047     *
+048     * @version $Revision: 812176 $ $Date: 2009-09-07 15:59:25 +0100 (Mon, 07 Sep 2009) $
+049     * 
+050     * @author James Strachan
+051     * @author Stephen Colebourne
+052     */
+053    public class BeanMap extends AbstractMap implements Cloneable {
+054    
+055        private transient Object bean;
+056    
+057        private transient HashMap readMethods = new HashMap();
+058        private transient HashMap writeMethods = new HashMap();
+059        private transient HashMap types = new HashMap();
+060    
+061        /**
+062         * An empty array.  Used to invoke accessors via reflection.
+063         */
+064        public static final Object[] NULL_ARGUMENTS = {};
+065    
+066        /**
+067         * Maps primitive Class types to transformers.  The transformer
+068         * transform strings into the appropriate primitive wrapper.
+069         *
+070         * N.B. private & unmodifiable replacement for the (public & static) defaultTransformers instance.
+071         */
+072        private static final Map typeTransformers = Collections.unmodifiableMap(createTypeTransformers());
+073    
+074        /**
+075         * This HashMap has been made unmodifiable to prevent issues when
+076         * loaded in a shared ClassLoader enviroment.
+077         *
+078         * @see "http://issues.apache.org/jira/browse/BEANUTILS-112"
+079         * @deprecated Use {@link BeanMap#getTypeTransformer(Class)} method
+080         */
+081        public static HashMap defaultTransformers = new HashMap() {
+082            public void clear() {
+083                throw new UnsupportedOperationException();
+084            }
+085            public boolean containsKey(Object key) {
+086                return typeTransformers.containsKey(key);
+087            }
+088            public boolean containsValue(Object value) {
+089                return typeTransformers.containsValue(value);
+090            }
+091            public Set entrySet() {
+092                return typeTransformers.entrySet();
+093            }
+094            public Object get(Object key) {
+095                return typeTransformers.get(key);
+096            }
+097            public boolean isEmpty() {
+098                return false;
+099            }
+100            public Set keySet() {
+101                return typeTransformers.keySet();
+102            }
+103            public Object put(Object key, Object value) {
+104                throw new UnsupportedOperationException();
+105            }
+106            public void putAll(Map m) {
+107                throw new UnsupportedOperationException();
+108            }
+109            public Object remove(Object key) {
+110                throw new UnsupportedOperationException();
+111            }
+112            public int size() {
+113                return typeTransformers.size();
+114            }
+115            public Collection values() {
+116                return typeTransformers.values();
+117            }
+118        };
+119        
+120        private static Map createTypeTransformers() {
+121            Map defaultTransformers = new HashMap();
+122            defaultTransformers.put( 
+123                Boolean.TYPE, 
+124                new Transformer() {
+125                    public Object transform( Object input ) {
+126                        return Boolean.valueOf( input.toString() );
+127                    }
+128                }
+129            );
+130            defaultTransformers.put( 
+131                Character.TYPE, 
+132                new Transformer() {
+133                    public Object transform( Object input ) {
+134                        return new Character( input.toString().charAt( 0 ) );
+135                    }
+136                }
+137            );
+138            defaultTransformers.put( 
+139                Byte.TYPE, 
+140                new Transformer() {
+141                    public Object transform( Object input ) {
+142                        return Byte.valueOf( input.toString() );
+143                    }
+144                }
+145            );
+146            defaultTransformers.put( 
+147                Short.TYPE, 
+148                new Transformer() {
+149                    public Object transform( Object input ) {
+150                        return Short.valueOf( input.toString() );
+151                    }
+152                }
+153            );
+154            defaultTransformers.put( 
+155                Integer.TYPE, 
+156                new Transformer() {
+157                    public Object transform( Object input ) {
+158                        return Integer.valueOf( input.toString() );
+159                    }
+160                }
+161            );
+162            defaultTransformers.put( 
+163                Long.TYPE, 
+164                new Transformer() {
+165                    public Object transform( Object input ) {
+166                        return Long.valueOf( input.toString() );
+167                    }
+168                }
+169            );
+170            defaultTransformers.put( 
+171                Float.TYPE, 
+172                new Transformer() {
+173                    public Object transform( Object input ) {
+174                        return Float.valueOf( input.toString() );
+175                    }
+176                }
+177            );
+178            defaultTransformers.put( 
+179                Double.TYPE, 
+180                new Transformer() {
+181                    public Object transform( Object input ) {
+182                        return Double.valueOf( input.toString() );
+183                    }
+184                }
+185            );
+186            return defaultTransformers;
+187        }
+188        
+189        
+190        // Constructors
+191        //-------------------------------------------------------------------------
+192    
+193        /**
+194         * Constructs a new empty <code>BeanMap</code>.
+195         */
+196        public BeanMap() {
+197        }
+198    
+199        /**
+200         * Constructs a new <code>BeanMap</code> that operates on the 
+201         * specified bean.  If the given bean is <code>null</code>, then
+202         * this map will be empty.
+203         *
+204         * @param bean  the bean for this map to operate on
+205         */
+206        public BeanMap(Object bean) {
+207            this.bean = bean;
+208            initialise();
+209        }
+210    
+211        // Map interface
+212        //-------------------------------------------------------------------------
+213    
+214        /**
+215         * Renders a string representation of this object.
+216         * @return a <code>String</code> representation of this object
+217         */
+218        public String toString() {
+219            return "BeanMap<" + String.valueOf(bean) + ">";
+220        }
+221        
+222        /**
+223         * Clone this bean map using the following process: 
+224         *
+225         * <ul>
+226         * <li>If there is no underlying bean, return a cloned BeanMap without a
+227         * bean.
+228         *
+229         * <li>Since there is an underlying bean, try to instantiate a new bean of
+230         * the same type using Class.newInstance().
+231         * 
+232         * <li>If the instantiation fails, throw a CloneNotSupportedException
+233         *
+234         * <li>Clone the bean map and set the newly instantiated bean as the
+235         * underlying bean for the bean map.
+236         *
+237         * <li>Copy each property that is both readable and writable from the
+238         * existing object to a cloned bean map.  
+239         *
+240         * <li>If anything fails along the way, throw a
+241         * CloneNotSupportedException.
+242         *
+243         * <ul>
+244         *
+245         * @return a cloned instance of this bean map
+246         * @throws CloneNotSupportedException if the underlying bean
+247         * cannot be cloned
+248         */
+249        public Object clone() throws CloneNotSupportedException {
+250            BeanMap newMap = (BeanMap)super.clone();
+251    
+252            if(bean == null) {
+253                // no bean, just an empty bean map at the moment.  return a newly
+254                // cloned and empty bean map.
+255                return newMap;
+256            }
+257    
+258            Object newBean = null;            
+259            Class beanClass = bean.getClass(); // Cannot throw Exception
+260            try {
+261                newBean = beanClass.newInstance();
+262            } catch (Exception e) {
+263                // unable to instantiate
+264                throw new CloneNotSupportedException
+265                    ("Unable to instantiate the underlying bean \"" +
+266                     beanClass.getName() + "\": " + e);
+267            }
+268                
+269            try {
+270                newMap.setBean(newBean);
+271            } catch (Exception exception) {
+272                throw new CloneNotSupportedException
+273                    ("Unable to set bean in the cloned bean map: " + 
+274                     exception);
+275            }
+276                
+277            try {
+278                // copy only properties that are readable and writable.  If its
+279                // not readable, we can't get the value from the old map.  If
+280                // its not writable, we can't write a value into the new map.
+281                Iterator readableKeys = readMethods.keySet().iterator();
+282                while(readableKeys.hasNext()) {
+283                    Object key = readableKeys.next();
+284                    if(getWriteMethod(key) != null) {
+285                        newMap.put(key, get(key));
+286                    }
+287                }
+288            } catch (Exception exception) {
+289                throw new CloneNotSupportedException
+290                    ("Unable to copy bean values to cloned bean map: " +
+291                     exception);
+292            }
+293    
+294            return newMap;
+295        }
+296    
+297        /**
+298         * Puts all of the writable properties from the given BeanMap into this
+299         * BeanMap. Read-only and Write-only properties will be ignored.
+300         *
+301         * @param map  the BeanMap whose properties to put
+302         */
+303        public void putAllWriteable(BeanMap map) {
+304            Iterator readableKeys = map.readMethods.keySet().iterator();
+305            while (readableKeys.hasNext()) {
+306                Object key = readableKeys.next();
+307                if (getWriteMethod(key) != null) {
+308                    this.put(key, map.get(key));
+309                }
+310            }
+311        }
+312    
+313    
+314        /**
+315         * This method reinitializes the bean map to have default values for the
+316         * bean's properties.  This is accomplished by constructing a new instance
+317         * of the bean which the map uses as its underlying data source.  This
+318         * behavior for <code>clear()</code> differs from the Map contract in that
+319         * the mappings are not actually removed from the map (the mappings for a
+320         * BeanMap are fixed).
+321         */
+322        public void clear() {
+323            if(bean == null) {
+324                return;
+325            }
+326    
+327            Class beanClass = null;
+328            try {
+329                beanClass = bean.getClass();
+330                bean = beanClass.newInstance();
+331            }
+332            catch (Exception e) {
+333                throw new UnsupportedOperationException( "Could not create new instance of class: " + beanClass );
+334            }
+335        }
+336    
+337        /**
+338         * Returns true if the bean defines a property with the given name.
+339         * <p>
+340         * The given name must be a <code>String</code>; if not, this method
+341         * returns false. This method will also return false if the bean
+342         * does not define a property with that name.
+343         * <p>
+344         * Write-only properties will not be matched as the test operates against
+345         * property read methods.
+346         *
+347         * @param name  the name of the property to check
+348         * @return false if the given name is null or is not a <code>String</code>;
+349         *   false if the bean does not define a property with that name; or
+350         *   true if the bean does define a property with that name
+351         */
+352        public boolean containsKey(Object name) {
+353            Method method = getReadMethod(name);
+354            return method != null;
+355        }
+356    
+357        /**
+358         * Returns true if the bean defines a property whose current value is
+359         * the given object.
+360         *
+361         * @param value  the value to check
+362         * @return false  true if the bean has at least one property whose 
+363         *   current value is that object, false otherwise
+364         */
+365        public boolean containsValue(Object value) {
+366            // use default implementation
+367            return super.containsValue(value);
+368        }
+369    
+370        /**
+371         * Returns the value of the bean's property with the given name.
+372         * <p>
+373         * The given name must be a {@link String} and must not be 
+374         * null; otherwise, this method returns <code>null</code>.
+375         * If the bean defines a property with the given name, the value of
+376         * that property is returned.  Otherwise, <code>null</code> is 
+377         * returned.
+378         * <p>
+379         * Write-only properties will not be matched as the test operates against
+380         * property read methods.
+381         *
+382         * @param name  the name of the property whose value to return
+383         * @return  the value of the property with that name
+384         */
+385        public Object get(Object name) {
+386            if ( bean != null ) {
+387                Method method = getReadMethod( name );
+388                if ( method != null ) {
+389                    try {
+390                        return method.invoke( bean, NULL_ARGUMENTS );
+391                    }
+392                    catch (  IllegalAccessException e ) {
+393                        logWarn( e );
+394                    }
+395                    catch ( IllegalArgumentException e ) {
+396                        logWarn(  e );
+397                    }
+398                    catch ( InvocationTargetException e ) {
+399                        logWarn(  e );
+400                    }
+401                    catch ( NullPointerException e ) {
+402                        logWarn(  e );
+403                    }
+404                }
+405            }
+406            return null;
+407        }
+408    
+409        /**
+410         * Sets the bean property with the given name to the given value.
+411         *
+412         * @param name  the name of the property to set
+413         * @param value  the value to set that property to
+414         * @return  the previous value of that property
+415         * @throws IllegalArgumentException  if the given name is null;
+416         *   if the given name is not a {@link String}; if the bean doesn't
+417         *   define a property with that name; or if the bean property with
+418         *   that name is read-only
+419         * @throws ClassCastException if an error occurs creating the method args
+420         */
+421        public Object put(Object name, Object value) throws IllegalArgumentException, ClassCastException {
+422            if ( bean != null ) {
+423                Object oldValue = get( name );
+424                Method method = getWriteMethod( name );
+425                if ( method == null ) {
+426                    throw new IllegalArgumentException( "The bean of type: "+ 
+427                            bean.getClass().getName() + " has no property called: " + name );
+428                }
+429                try {
+430                    Object[] arguments = createWriteMethodArguments( method, value );
+431                    method.invoke( bean, arguments );
+432    
+433                    Object newValue = get( name );
+434                    firePropertyChange( name, oldValue, newValue );
+435                }
+436                catch ( InvocationTargetException e ) {
+437                    logInfo( e );
+438                    throw new IllegalArgumentException( e.getMessage() );
+439                }
+440                catch ( IllegalAccessException e ) {
+441                    logInfo( e );
+442                    throw new IllegalArgumentException( e.getMessage() );
+443                }
+444                return oldValue;
+445            }
+446            return null;
+447        }
+448                        
+449        /**
+450         * Returns the number of properties defined by the bean.
+451         *
+452         * @return  the number of properties defined by the bean
+453         */
+454        public int size() {
+455            return readMethods.size();
+456        }
+457    
+458        
+459        /**
+460         * Get the keys for this BeanMap.
+461         * <p>
+462         * Write-only properties are <b>not</b> included in the returned set of
+463         * property names, although it is possible to set their value and to get 
+464         * their type.
+465         * 
+466         * @return BeanMap keys.  The Set returned by this method is not
+467         *        modifiable.
+468         */
+469        public Set keySet() {
+470            return UnmodifiableSet.decorate(readMethods.keySet());
+471        }
+472    
+473        /**
+474         * Gets a Set of MapEntry objects that are the mappings for this BeanMap.
+475         * <p>
+476         * Each MapEntry can be set but not removed.
+477         * 
+478         * @return the unmodifiable set of mappings
+479         */
+480        public Set entrySet() {
+481            return UnmodifiableSet.decorate(new AbstractSet() {
+482                public Iterator iterator() {
+483                    return entryIterator();
+484                }
+485                public int size() {
+486                  return BeanMap.this.readMethods.size();
+487                }
+488            });
+489        }
+490    
+491        /**
+492         * Returns the values for the BeanMap.
+493         * 
+494         * @return values for the BeanMap.  The returned collection is not
+495         *        modifiable.
+496         */
+497        public Collection values() {
+498            ArrayList answer = new ArrayList( readMethods.size() );
+499            for ( Iterator iter = valueIterator(); iter.hasNext(); ) {
+500                answer.add( iter.next() );
+501            }
+502            return UnmodifiableList.decorate(answer);
+503        }
+504    
+505    
+506        // Helper methods
+507        //-------------------------------------------------------------------------
+508    
+509        /**
+510         * Returns the type of the property with the given name.
+511         *
+512         * @param name  the name of the property
+513         * @return  the type of the property, or <code>null</code> if no such
+514         *  property exists
+515         */
+516        public Class getType(String name) {
+517            return (Class) types.get( name );
+518        }
+519    
+520        /**
+521         * Convenience method for getting an iterator over the keys.
+522         * <p>
+523         * Write-only properties will not be returned in the iterator.
+524         *
+525         * @return an iterator over the keys
+526         */
+527        public Iterator keyIterator() {
+528            return readMethods.keySet().iterator();
+529        }
+530    
+531        /**
+532         * Convenience method for getting an iterator over the values.
+533         *
+534         * @return an iterator over the values
+535         */
+536        public Iterator valueIterator() {
+537            final Iterator iter = keyIterator();
+538            return new Iterator() {            
+539                public boolean hasNext() {
+540                    return iter.hasNext();
+541                }
+542                public Object next() {
+543                    Object key = iter.next();
+544                    return get(key);
+545                }
+546                public void remove() {
+547                    throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+548                }
+549            };
+550        }
+551    
+552        /**
+553         * Convenience method for getting an iterator over the entries.
+554         *
+555         * @return an iterator over the entries
+556         */
+557        public Iterator entryIterator() {
+558            final Iterator iter = keyIterator();
+559            return new Iterator() {            
+560                public boolean hasNext() {
+561                    return iter.hasNext();
+562                }            
+563                public Object next() {
+564                    Object key = iter.next();
+565                    Object value = get(key);
+566                    return new Entry( BeanMap.this, key, value );
+567                }            
+568                public void remove() {
+569                    throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+570                }
+571            };
+572        }
+573    
+574    
+575        // Properties
+576        //-------------------------------------------------------------------------
+577    
+578        /**
+579         * Returns the bean currently being operated on.  The return value may
+580         * be null if this map is empty.
+581         *
+582         * @return the bean being operated on by this map
+583         */
+584        public Object getBean() {
+585            return bean;
+586        }
+587    
+588        /**
+589         * Sets the bean to be operated on by this map.  The given value may
+590         * be null, in which case this map will be empty.
+591         *
+592         * @param newBean  the new bean to operate on
+593         */
+594        public void setBean( Object newBean ) {
+595            bean = newBean;
+596            reinitialise();
+597        }
+598    
+599        /**
+600         * Returns the accessor for the property with the given name.
+601         *
+602         * @param name  the name of the property 
+603         * @return the accessor method for the property, or null
+604         */
+605        public Method getReadMethod(String name) {
+606            return (Method) readMethods.get(name);
+607        }
+608    
+609        /**
+610         * Returns the mutator for the property with the given name.
+611         *
+612         * @param name  the name of the property
+613         * @return the mutator method for the property, or null
+614         */
+615        public Method getWriteMethod(String name) {
+616            return (Method) writeMethods.get(name);
+617        }
+618    
+619    
+620        // Implementation methods
+621        //-------------------------------------------------------------------------
+622    
+623        /**
+624         * Returns the accessor for the property with the given name.
+625         *
+626         * @param name  the name of the property 
+627         * @return null if the name is null; null if the name is not a 
+628         * {@link String}; null if no such property exists; or the accessor
+629         *  method for that property
+630         */
+631        protected Method getReadMethod( Object name ) {
+632            return (Method) readMethods.get( name );
+633        }
+634    
+635        /**
+636         * Returns the mutator for the property with the given name.
+637         *
+638         * @param name  the name of the 
+639         * @return null if the name is null; null if the name is not a 
+640         * {@link String}; null if no such property exists; null if the 
+641         * property is read-only; or the mutator method for that property
+642         */
+643        protected Method getWriteMethod( Object name ) {
+644            return (Method) writeMethods.get( name );
+645        }
+646    
+647        /**
+648         * Reinitializes this bean.  Called during {@link #setBean(Object)}.
+649         * Does introspection to find properties.
+650         */
+651        protected void reinitialise() {
+652            readMethods.clear();
+653            writeMethods.clear();
+654            types.clear();
+655            initialise();
+656        }
+657    
+658        private void initialise() {
+659            if(getBean() == null) {
+660                return;
+661            }
+662    
+663            Class  beanClass = getBean().getClass();
+664            try {
+665                //BeanInfo beanInfo = Introspector.getBeanInfo( bean, null );
+666                BeanInfo beanInfo = Introspector.getBeanInfo( beanClass );
+667                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+668                if ( propertyDescriptors != null ) {
+669                    for ( int i = 0; i < propertyDescriptors.length; i++ ) {
+670                        PropertyDescriptor propertyDescriptor = propertyDescriptors[i];
+671                        if ( propertyDescriptor != null ) {
+672                            String name = propertyDescriptor.getName();
+673                            Method readMethod = propertyDescriptor.getReadMethod();
+674                            Method writeMethod = propertyDescriptor.getWriteMethod();
+675                            Class aType = propertyDescriptor.getPropertyType();
+676    
+677                            if ( readMethod != null ) {
+678                                readMethods.put( name, readMethod );
+679                            }
+680                            if ( writeMethod != null ) {
+681                                writeMethods.put( name, writeMethod );
+682                            }
+683                            types.put( name, aType );
+684                        }
+685                    }
+686                }
+687            }
+688            catch ( IntrospectionException e ) {
+689                logWarn(  e );
+690            }
+691        }
+692    
+693        /**
+694         * Called during a successful {@link #put(Object,Object)} operation.
+695         * Default implementation does nothing.  Override to be notified of
+696         * property changes in the bean caused by this map.
+697         *
+698         * @param key  the name of the property that changed
+699         * @param oldValue  the old value for that property
+700         * @param newValue  the new value for that property
+701         */
+702        protected void firePropertyChange( Object key, Object oldValue, Object newValue ) {
+703        }
+704    
+705        // Implementation classes
+706        //-------------------------------------------------------------------------
+707    
+708        /**
+709         * Map entry used by {@link BeanMap}.
+710         */
+711        protected static class Entry extends AbstractMapEntry {        
+712            private BeanMap owner;
+713            
+714            /**
+715             * Constructs a new <code>Entry</code>.
+716             *
+717             * @param owner  the BeanMap this entry belongs to
+718             * @param key  the key for this entry
+719             * @param value  the value for this entry
+720             */
+721            protected Entry( BeanMap owner, Object key, Object value ) {
+722                super( key, value );
+723                this.owner = owner;
+724            }
+725    
+726            /**
+727             * Sets the value.
+728             *
+729             * @param value  the new value for the entry
+730             * @return the old value for the entry
+731             */
+732            public Object setValue(Object value) {
+733                Object key = getKey();
+734                Object oldValue = owner.get( key );
+735    
+736                owner.put( key, value );
+737                Object newValue = owner.get( key );
+738                super.setValue( newValue );
+739                return oldValue;
+740            }
+741        }
+742    
+743        /**
+744         * Creates an array of parameters to pass to the given mutator method.
+745         * If the given object is not the right type to pass to the method 
+746         * directly, it will be converted using {@link #convertType(Class,Object)}.
+747         *
+748         * @param method  the mutator method
+749         * @param value  the value to pass to the mutator method
+750         * @return an array containing one object that is either the given value
+751         *   or a transformed value
+752         * @throws IllegalAccessException if {@link #convertType(Class,Object)}
+753         *   raises it
+754         * @throws IllegalArgumentException if any other exception is raised
+755         *   by {@link #convertType(Class,Object)}
+756         * @throws ClassCastException if an error occurs creating the method args
+757         */
+758        protected Object[] createWriteMethodArguments( Method method, Object value ) 
+759            throws IllegalAccessException, ClassCastException {            
+760            try {
+761                if ( value != null ) {
+762                    Class[] types = method.getParameterTypes();
+763                    if ( types != null && types.length > 0 ) {
+764                        Class paramType = types[0];
+765                        if ( ! paramType.isAssignableFrom( value.getClass() ) ) {
+766                            value = convertType( paramType, value );
+767                        }
+768                    }
+769                }
+770                Object[] answer = { value };
+771                return answer;
+772            }
+773            catch ( InvocationTargetException e ) {
+774                logInfo( e );
+775                throw new IllegalArgumentException( e.getMessage() );
+776            }
+777            catch ( InstantiationException e ) {
+778                logInfo( e );
+779                throw new IllegalArgumentException( e.getMessage() );
+780            }
+781        }
+782    
+783        /**
+784         * Converts the given value to the given type.  First, reflection is
+785         * is used to find a public constructor declared by the given class 
+786         * that takes one argument, which must be the precise type of the 
+787         * given value.  If such a constructor is found, a new object is
+788         * created by passing the given value to that constructor, and the
+789         * newly constructed object is returned.<P>
+790         *
+791         * If no such constructor exists, and the given type is a primitive
+792         * type, then the given value is converted to a string using its 
+793         * {@link Object#toString() toString()} method, and that string is
+794         * parsed into the correct primitive type using, for instance, 
+795         * {@link Integer#valueOf(String)} to convert the string into an
+796         * <code>int</code>.<P>
+797         *
+798         * If no special constructor exists and the given type is not a 
+799         * primitive type, this method returns the original value.
+800         *
+801         * @param newType  the type to convert the value to
+802         * @param value  the value to convert
+803         * @return the converted value
+804         * @throws NumberFormatException if newType is a primitive type, and 
+805         *  the string representation of the given value cannot be converted
+806         *  to that type
+807         * @throws InstantiationException  if the constructor found with 
+808         *  reflection raises it
+809         * @throws InvocationTargetException  if the constructor found with
+810         *  reflection raises it
+811         * @throws IllegalAccessException  never
+812         * @throws IllegalArgumentException  never
+813         */
+814        protected Object convertType( Class newType, Object value ) 
+815            throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+816            
+817            // try call constructor
+818            Class[] types = { value.getClass() };
+819            try {
+820                Constructor constructor = newType.getConstructor( types );        
+821                Object[] arguments = { value };
+822                return constructor.newInstance( arguments );
+823            }
+824            catch ( NoSuchMethodException e ) {
+825                // try using the transformers
+826                Transformer transformer = getTypeTransformer( newType );
+827                if ( transformer != null ) {
+828                    return transformer.transform( value );
+829                }
+830                return value;
+831            }
+832        }
+833    
+834        /**
+835         * Returns a transformer for the given primitive type.
+836         *
+837         * @param aType  the primitive type whose transformer to return
+838         * @return a transformer that will convert strings into that type,
+839         *  or null if the given type is not a primitive type
+840         */
+841        protected Transformer getTypeTransformer( Class aType ) {
+842            return (Transformer) typeTransformers.get( aType );
+843        }
+844    
+845        /**
+846         * Logs the given exception to <code>System.out</code>.  Used to display
+847         * warnings while accessing/mutating the bean.
+848         *
+849         * @param ex  the exception to log
+850         */
+851        protected void logInfo(Exception ex) {
+852            // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+853            System.out.println( "INFO: Exception: " + ex );
+854        }
+855    
+856        /**
+857         * Logs the given exception to <code>System.err</code>.  Used to display
+858         * errors while accessing/mutating the bean.
+859         *
+860         * @param ex  the exception to log
+861         */
+862        protected void logWarn(Exception ex) {
+863            // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+864            System.out.println( "WARN: Exception: " + ex );
+865            ex.printStackTrace();
+866        }
+867    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPredicate.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPredicate.html new file mode 100644 index 0000000..f32fd53 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPredicate.html @@ -0,0 +1,191 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    import org.apache.commons.collections.Predicate;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.lang.reflect.InvocationTargetException;
+025    
+026    /**
+027     * <p>Predicate implementation that applies the given <code>Predicate</code>
+028     * to the result of calling the given property getter.
+029     * </p>
+030     */
+031    public class BeanPredicate implements Predicate {
+032       
+033        private final Log log = LogFactory.getLog(this.getClass());
+034        
+035        /** Name of the property whose value will be predicated */
+036        private String propertyName;
+037        /** <code>Predicate</code> to be applied to the property value */
+038        private Predicate predicate;
+039    
+040        /**
+041         * Constructs a <code>BeanPredicate</code> that applies the given
+042         * <code>Predicate</code> to the named property value.
+043         * @param propertyName the name of the property whose value is to be predicated,
+044         * not null
+045         * @param predicate the <code>Predicate</code> to be applied,
+046         * not null
+047         */
+048        public BeanPredicate(String propertyName, Predicate predicate) {
+049            this.propertyName = propertyName;
+050            this.predicate = predicate;
+051        }
+052    
+053        /**
+054         * Evaluates the given object by applying the {@link #getPredicate()}
+055         * to a property value named by {@link #getPropertyName()}.
+056         *
+057         * @param object The object being evaluated
+058         * @return the result of the predicate evaluation
+059         * @throws IllegalArgumentException when the property cannot be evaluated
+060         */
+061        public boolean evaluate(Object object) {
+062           
+063            boolean evaluation = false;
+064    
+065            try {
+066                Object propValue = PropertyUtils.getProperty( object, propertyName );
+067                evaluation = predicate.evaluate(propValue);
+068            } catch (IllegalArgumentException e) {
+069                final String errorMsg = "Problem during evaluation.";
+070                log.error("ERROR: " + errorMsg, e);
+071                throw e;
+072            } catch (IllegalAccessException e) {
+073                final String errorMsg = "Unable to access the property provided.";
+074                log.error(errorMsg, e);
+075                throw new IllegalArgumentException(errorMsg);
+076            } catch (InvocationTargetException e) {
+077                final String errorMsg = "Exception occurred in property's getter";
+078                log.error(errorMsg, e);
+079                throw new IllegalArgumentException(errorMsg);
+080            } catch (NoSuchMethodException e) {
+081                final String errorMsg = "Property not found.";
+082                log.error(errorMsg, e);
+083                throw new IllegalArgumentException(errorMsg);
+084            }
+085    
+086            return evaluation;
+087        }
+088    
+089        /**
+090         * Gets the name of the property whose value is to be predicated.
+091         * in the evaluation.
+092         * @return the property name, not null
+093         */ 
+094        public String getPropertyName() {
+095            return propertyName;
+096        }
+097    
+098        /** 
+099         * Sets the name of the property whose value is to be predicated.
+100         * @param propertyName the name of the property whose value is to be predicated,
+101         * not null
+102         */
+103        public void setPropertyName(String propertyName) {
+104            this.propertyName = propertyName;
+105        }
+106    
+107        /**
+108         * Gets the <code>Predicate</code> to be applied to the value of the named property
+109         * during {@link #evaluate}.
+110         * @return <code>Predicate</code>, not null
+111         */
+112        public Predicate getPredicate() {
+113            return predicate;
+114        }
+115    
+116        /** 
+117         * Sets the <code>Predicate</code> to be applied to the value of the named property
+118         * during {@link #evaluate(Object)}.
+119         * @param predicate <code>Predicate</code>, not null
+120         */
+121        public void setPredicate(Predicate predicate) {
+122            this.predicate = predicate;
+123        }
+124    
+125    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html new file mode 100644 index 0000000..b988c1f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueChangeClosure.html @@ -0,0 +1,305 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils;
+019    
+020    import org.apache.commons.collections.Closure;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.lang.reflect.InvocationTargetException;
+025    
+026    
+027    /**
+028     * <p><code>Closure</code> that sets a property.</p>
+029     * <p>
+030     * An implementation of <code>org.apache.commons.collections.Closure</code> that updates
+031     * a specified property on the object provided with a specified value.
+032     * The <code>BeanPropertyValueChangeClosure</code> constructor takes two parameters which determine
+033     * what property will be updated and with what value.
+034     * <dl>
+035     *    <dt>
+036     *       <b><code>
+037     *           <pre>public BeanPropertyValueChangeClosure( String propertyName, Object propertyValue )</pre>
+038     *       </code></b>
+039     *    </dt>
+040     *    <dd>
+041     *       Will create a <code>Closure</code> that will update an object by setting the property
+042     *       specified by <code>propertyName</code> to the value specified by <code>propertyValue</code>.
+043     *    </dd>
+044     * </dl>
+045     *
+046     * <p/>
+047     * <strong>Note:</strong> Property names can be a simple, nested, indexed, or mapped property as defined by
+048     * <code>org.apache.commons.beanutils.PropertyUtils</code>.  If any object in the property path
+049     * specified by <code>propertyName</code> is <code>null</code> then the outcome is based on the
+050     * value of the <code>ignoreNull</code> attribute.
+051     *
+052     * <p/>
+053     * A typical usage might look like:
+054     * <code><pre>
+055     * // create the closure
+056     * BeanPropertyValueChangeClosure closure =
+057     *    new BeanPropertyValueChangeClosure( "activeEmployee", Boolean.TRUE );
+058     *
+059     * // update the Collection
+060     * CollectionUtils.forAllDo( peopleCollection, closure );
+061     * </pre></code>
+062     * <p/>
+063     *
+064     * This would take a <code>Collection</code> of person objects and update the
+065     * <code>activeEmployee</code> property of each object in the <code>Collection</code> to
+066     * <code>true</code>. Assuming...
+067     * <ul>
+068     *    <li>
+069     *       The top level object in the <code>peopleCollection</code> is an object which represents a
+070     *       person.
+071     *    </li>
+072     *    <li>
+073     *       The person object has a <code>setActiveEmployee( boolean )</code> method which updates
+074     *       the value for the object's <code>activeEmployee</code> property.
+075     *    </li>
+076     * </ul>
+077     *
+078     * @author Norm Deane
+079     * @see org.apache.commons.beanutils.PropertyUtils
+080     * @see org.apache.commons.collections.Closure
+081     */
+082    public class BeanPropertyValueChangeClosure implements Closure {
+083       
+084        /** For logging. */
+085        private final Log log = LogFactory.getLog(this.getClass());
+086    
+087        /**
+088         * The name of the property which will be updated when this <code>Closure</code> executes.
+089         */
+090        private String propertyName;
+091    
+092        /**
+093         * The value that the property specified by <code>propertyName</code>
+094         * will be updated to when this <code>Closure</code> executes.
+095         */
+096        private Object propertyValue;
+097    
+098        /**
+099         * Determines whether <code>null</code> objects in the property path will genenerate an
+100         * <code>IllegalArgumentException</code> or not. If set to <code>true</code> then if any objects
+101         * in the property path leading up to the target property evaluate to <code>null</code> then the
+102         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged but
+103         * not rethrown.  If set to <code>false</code> then if any objects in the property path leading
+104         * up to the target property evaluate to <code>null</code> then the
+105         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged and
+106         * rethrown.
+107         */
+108        private boolean ignoreNull;
+109    
+110        /**
+111         * Constructor which takes the name of the property to be changed, the new value to set
+112         * the property to, and assumes <code>ignoreNull</code> to be <code>false</code>.
+113         *
+114         * @param propertyName The name of the property that will be updated with the value specified by
+115         * <code>propertyValue</code>.
+116         * @param propertyValue The value that <code>propertyName</code> will be set to on the target
+117         * object.
+118         * @throws IllegalArgumentException If the propertyName provided is null or empty.
+119         */
+120        public BeanPropertyValueChangeClosure(String propertyName, Object propertyValue) {
+121            this(propertyName, propertyValue, false);
+122        }
+123    
+124        /**
+125         * Constructor which takes the name of the property to be changed, the new value to set
+126         * the property to and a boolean which determines whether <code>null</code> objects in the
+127         * property path will genenerate an <code>IllegalArgumentException</code> or not.
+128         *
+129         * @param propertyName The name of the property that will be updated with the value specified by
+130         * <code>propertyValue</code>.
+131         * @param propertyValue The value that <code>propertyName</code> will be set to on the target
+132         * object.
+133         * @param ignoreNull Determines whether <code>null</code> objects in the property path will
+134         * genenerate an <code>IllegalArgumentException</code> or not.
+135         * @throws IllegalArgumentException If the propertyName provided is null or empty.
+136         */
+137        public BeanPropertyValueChangeClosure(String propertyName, Object propertyValue, boolean ignoreNull) {
+138            super();
+139    
+140            if ((propertyName != null) && (propertyName.length() > 0)) {
+141                this.propertyName = propertyName;
+142                this.propertyValue = propertyValue;
+143                this.ignoreNull = ignoreNull;
+144            } else {
+145                throw new IllegalArgumentException("propertyName cannot be null or empty");
+146            }
+147        }
+148    
+149        /**
+150         * Updates the target object provided using the property update criteria provided when this
+151         * <code>BeanPropertyValueChangeClosure</code> was constructed.  If any object in the property
+152         * path leading up to the target property is <code>null</code> then the outcome will be based on
+153         * the value of the <code>ignoreNull</code> attribute. By default, <code>ignoreNull</code> is
+154         * <code>false</code> and would result in an <code>IllegalArgumentException</code> if an object
+155         * in the property path leading up to the target property is <code>null</code>.
+156         *
+157         * @param object The object to be updated.
+158         * @throws IllegalArgumentException If an IllegalAccessException, InvocationTargetException, or
+159         * NoSuchMethodException is thrown when trying to access the property specified on the object
+160         * provided. Or if an object in the property path provided is <code>null</code> and
+161         * <code>ignoreNull</code> is set to <code>false</code>.
+162         */
+163        public void execute(Object object) {
+164           
+165            try {
+166                PropertyUtils.setProperty(object, propertyName, propertyValue);
+167            } catch (IllegalArgumentException e) {
+168                final String errorMsg = "Unable to execute Closure. Null value encountered in property path...";
+169    
+170                if (ignoreNull) {
+171                    log.warn("WARNING: " + errorMsg + e);
+172                } else {
+173                    IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+174                    if (!BeanUtils.initCause(iae, e)) {
+175                        log.error(errorMsg, e);
+176                    }
+177                    throw iae;
+178                }
+179            } catch (IllegalAccessException e) {
+180                final String errorMsg = "Unable to access the property provided.";
+181                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+182                if (!BeanUtils.initCause(iae, e)) {
+183                    log.error(errorMsg, e);
+184                }
+185                throw iae;
+186            } catch (InvocationTargetException e) {
+187                final String errorMsg = "Exception occurred in property's getter";
+188                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+189                if (!BeanUtils.initCause(iae, e)) {
+190                    log.error(errorMsg, e);
+191                }
+192                throw iae;
+193            } catch (NoSuchMethodException e) {
+194                final String errorMsg = "Property not found";
+195                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+196                if (!BeanUtils.initCause(iae, e)) {
+197                    log.error(errorMsg, e);
+198                }
+199                throw iae;
+200            }
+201        }
+202    
+203        /**
+204         * Returns the name of the property which will be updated when this <code>Closure</code> executes.
+205         *
+206         * @return The name of the property which will be updated when this <code>Closure</code> executes.
+207         */
+208        public String getPropertyName() {
+209            return propertyName;
+210        }
+211    
+212        /**
+213         * Returns the value that the property specified by <code>propertyName</code>
+214         * will be updated to when this <code>Closure</code> executes.
+215         *
+216         * @return The value that the property specified by <code>propertyName</code>
+217         * will be updated to when this <code>Closure</code> executes.
+218         */
+219        public Object getPropertyValue() {
+220            return propertyValue;
+221        }
+222    
+223        /**
+224         * Returns the flag that determines whether <code>null</code> objects in the property path will
+225         * genenerate an <code>IllegalArgumentException</code> or not. If set to <code>true</code> then
+226         * if any objects in the property path leading up to the target property evaluate to
+227         * <code>null</code> then the <code>IllegalArgumentException</code> throw by
+228         * <code>PropertyUtils</code> will be logged but not rethrown.  If set to <code>false</code> then
+229         * if any objects in the property path leading up to the target property evaluate to
+230         * <code>null</code> then the <code>IllegalArgumentException</code> throw by
+231         * <code>PropertyUtils</code> will be logged and rethrown.
+232         *
+233         * @return The flag that determines whether <code>null</code> objects in the property path will
+234         * genenerate an <code>IllegalArgumentException</code> or not.
+235         */
+236        public boolean isIgnoreNull() {
+237            return ignoreNull;
+238        }
+239    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html new file mode 100644 index 0000000..dd88d55 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanPropertyValueEqualsPredicate.html @@ -0,0 +1,356 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils;
+019    
+020    import org.apache.commons.collections.Predicate;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.lang.reflect.InvocationTargetException;
+025    
+026    
+027    /**
+028     * <p><code>Predicate</code> that evaluates a property value against a specified value.</p>
+029     * <p>
+030     * An implementation of <code>org.apache.commons.collections.Predicate</code> that evaluates a
+031     * property value on the object provided against a specified value and returns <code>true</code>
+032     * if equal; <code>false</code> otherwise.
+033     * The <code>BeanPropertyValueEqualsPredicate</code> constructor takes two parameters which
+034     * determine what property will be evaluated on the target object and what its expected value should
+035     * be.
+036     * <dl>
+037     *    <dt>
+038     *       <strong><code>
+039     *           <pre>public BeanPropertyValueEqualsPredicate( String propertyName, Object propertyValue )</pre>
+040     *       </code></strong>
+041     *    </dt>
+042     *    <dd>
+043     *       Will create a <code>Predicate</code> that will evaluate the target object and return
+044     *       <code>true</code> if the property specified by <code>propertyName</code> has a value which
+045     *       is equal to the the value specified by <code>propertyValue</code>. Or return
+046     *       <code>false</code> otherwise.
+047     *    </dd>
+048     * </dl>
+049     * </p>
+050     * <p>
+051     * <strong>Note:</strong> Property names can be a simple, nested, indexed, or mapped property as defined by
+052     * <code>org.apache.commons.beanutils.PropertyUtils</code>.  If any object in the property path
+053     * specified by <code>propertyName</code> is <code>null</code> then the outcome is based on the
+054     * value of the <code>ignoreNull</code> attribute.
+055     * </p>
+056     * <p>
+057     * A typical usage might look like:
+058     * <code><pre>
+059     * // create the closure
+060     * BeanPropertyValueEqualsPredicate predicate =
+061     *    new BeanPropertyValueEqualsPredicate( "activeEmployee", Boolean.FALSE );
+062     *
+063     * // filter the Collection
+064     * CollectionUtils.filter( peopleCollection, predicate );
+065     * </pre></code>
+066     * </p>
+067     * <p>
+068     * This would take a <code>Collection</code> of person objects and filter out any people whose
+069     * <code>activeEmployee</code> property is <code>false</code>. Assuming...
+070     * <ul>
+071     *    <li>
+072     *       The top level object in the <code>peeopleCollection</code> is an object which represents a
+073     *       person.
+074     *    </li>
+075     *    <li>
+076     *       The person object has a <code>getActiveEmployee()</code> method which returns
+077     *       the boolean value for the object's <code>activeEmployee</code> property.
+078     *    </li>
+079     * </ul>
+080     * </p>
+081     * <p>
+082     * Another typical usage might look like:
+083     * <code><pre>
+084     * // create the closure
+085     * BeanPropertyValueEqualsPredicate predicate =
+086     *    new BeanPropertyValueEqualsPredicate( "personId", "456-12-1234" );
+087     *
+088     * // search the Collection
+089     * CollectionUtils.find( peopleCollection, predicate );
+090     * </pre><code>
+091     * </p>
+092     * <p>
+093     * This would search a <code>Collection</code> of person objects and return the first object whose
+094     * <code>personId</code> property value equals <code>456-12-1234</code>. Assuming...
+095     * <ul>
+096     *    <li>
+097     *       The top level object in the <code>peeopleCollection</code> is an object which represents a
+098     *       person.
+099     *    </li>
+100     *    <li>
+101     *       The person object has a <code>getPersonId()</code> method which returns
+102     *       the value for the object's <code>personId</code> property.
+103     *    </li>
+104     * </ul>
+105     * </p>
+106     *
+107     * @author Norm Deane
+108     * @see org.apache.commons.beanutils.PropertyUtils
+109     * @see org.apache.commons.collections.Predicate
+110     */
+111    public class BeanPropertyValueEqualsPredicate implements Predicate {
+112       
+113        /** For logging. */
+114        private final Log log = LogFactory.getLog(this.getClass());
+115    
+116        /**
+117         * The name of the property which will be evaluated when this <code>Predicate</code> is executed.
+118         */
+119        private String propertyName;
+120    
+121        /**
+122         * The value that the property specified by <code>propertyName</code>
+123         * will be compared to when this <code>Predicate</code> executes.
+124         */
+125        private Object propertyValue;
+126    
+127        /**
+128         * <p>Should <code>null</code> objects in the property path be ignored?</p>
+129         * <p>
+130         * Determines whether <code>null</code> objects in the property path will genenerate an
+131         * <code>IllegalArgumentException</code> or not. If set to <code>true</code> then if any objects
+132         * in the property path evaluate to <code>null</code> then the
+133         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged but
+134         * not rethrown and <code>false</code> will be returned.  If set to <code>false</code> then if
+135         * any objects in the property path evaluate to <code>null</code> then the
+136         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged and
+137         * rethrown.
+138         * </p>
+139         */
+140        private boolean ignoreNull;
+141    
+142        /**
+143         * Constructor which takes the name of the property, its expected value to be used in evaluation,
+144         * and assumes <code>ignoreNull</code> to be <code>false</code>.
+145         *
+146         * @param propertyName The name of the property that will be evaluated against the expected value.
+147         * @param propertyValue The value to use in object evaluation.
+148         * @throws IllegalArgumentException If the property name provided is null or empty.
+149         */
+150        public BeanPropertyValueEqualsPredicate(String propertyName, Object propertyValue) {
+151            this(propertyName, propertyValue, false);
+152        }
+153    
+154        /**
+155         * Constructor which takes the name of the property, its expected value
+156         * to be used in evaluation, and a boolean which determines whether <code>null</code> objects in
+157         * the property path will genenerate an <code>IllegalArgumentException</code> or not.
+158         *
+159         * @param propertyName The name of the property that will be evaluated against the expected value.
+160         * @param propertyValue The value to use in object evaluation.
+161         * @param ignoreNull Determines whether <code>null</code> objects in the property path will
+162         * genenerate an <code>IllegalArgumentException</code> or not.
+163         * @throws IllegalArgumentException If the property name provided is null or empty.
+164         */
+165        public BeanPropertyValueEqualsPredicate(String propertyName, Object propertyValue, boolean ignoreNull) {
+166            super();
+167    
+168            if ((propertyName != null) && (propertyName.length() > 0)) {
+169                this.propertyName = propertyName;
+170                this.propertyValue = propertyValue;
+171                this.ignoreNull = ignoreNull;
+172            } else {
+173                throw new IllegalArgumentException("propertyName cannot be null or empty");
+174            }
+175        }
+176    
+177        /**
+178         * Evaulates the object provided against the criteria specified when this
+179         * <code>BeanPropertyValueEqualsPredicate</code> was constructed.  Equality is based on
+180         * either reference or logical equality as defined by the property object's equals method. If
+181         * any object in the property path leading up to the target property is <code>null</code> then
+182         * the outcome will be based on the value of the <code>ignoreNull</code> attribute. By default,
+183         * <code>ignoreNull</code> is <code>false</code> and would result in an
+184         * <code>IllegalArgumentException</code> if an object in the property path leading up to the
+185         * target property is <code>null</code>.
+186         *
+187         * @param object The object to be evaluated.
+188         * @return True if the object provided meets all the criteria for this <code>Predicate</code>;
+189         * false otherwise.
+190         * @throws IllegalArgumentException If an IllegalAccessException, InvocationTargetException, or
+191         * NoSuchMethodException is thrown when trying to access the property specified on the object
+192         * provided. Or if an object in the property path provided is <code>null</code> and
+193         * <code>ignoreNull</code> is set to <code>false</code>.
+194         */
+195        public boolean evaluate(Object object) {
+196           
+197            boolean evaluation = false;
+198    
+199            try {
+200                evaluation = evaluateValue(propertyValue,
+201                        PropertyUtils.getProperty(object, propertyName));
+202            } catch (IllegalArgumentException e) {
+203                final String errorMsg = "Problem during evaluation. Null value encountered in property path...";
+204    
+205                if (ignoreNull) {
+206                    log.warn("WARNING: " + errorMsg + e);
+207                } else {
+208                    IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+209                    if (!BeanUtils.initCause(iae, e)) {
+210                        log.error(errorMsg, e);
+211                    }
+212                    throw iae;
+213                }
+214            } catch (IllegalAccessException e) {
+215                final String errorMsg = "Unable to access the property provided.";
+216                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+217                if (!BeanUtils.initCause(iae, e)) {
+218                    log.error(errorMsg, e);
+219                }
+220                throw iae;
+221            } catch (InvocationTargetException e) {
+222                final String errorMsg = "Exception occurred in property's getter";
+223                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+224                if (!BeanUtils.initCause(iae, e)) {
+225                    log.error(errorMsg, e);
+226                }
+227                throw iae;
+228            } catch (NoSuchMethodException e) {
+229                final String errorMsg = "Property not found.";
+230                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+231                if (!BeanUtils.initCause(iae, e)) {
+232                    log.error(errorMsg, e);
+233                }
+234                throw iae;
+235            }
+236    
+237            return evaluation;
+238        }
+239    
+240        /**
+241         * Utility method which evaluates whether the actual property value equals the expected property
+242         * value.
+243         *
+244         * @param expected The expected value.
+245         * @param actual The actual value.
+246         * @return True if they are equal; false otherwise.
+247         */
+248        protected boolean evaluateValue(Object expected, Object actual) {
+249            return (expected == actual) || ((expected != null) && expected.equals(actual));
+250        }
+251    
+252        /**
+253         * Returns the name of the property which will be evaluated when this <code>Predicate</code> is
+254         * executed.
+255         *
+256         * @return The name of the property which will be evaluated when this <code>Predicate</code> is
+257         * executed.
+258         */
+259        public String getPropertyName() {
+260            return propertyName;
+261        }
+262    
+263        /**
+264         * Returns the value that the property specified by <code>propertyName</code> will be compared to
+265         * when this <code>Predicate</code> executes.
+266         *
+267         * @return The value that the property specified by <code>propertyName</code> will be compared to
+268         * when this <code>Predicate</code> executes.
+269         */
+270        public Object getPropertyValue() {
+271            return propertyValue;
+272        }
+273    
+274        /**
+275         * Returns the flag which determines whether <code>null</code> objects in the property path will
+276         * genenerate an <code>IllegalArgumentException</code> or not. If set to <code>true</code> then
+277         * if any objects in the property path evaluate to <code>null</code> then the
+278         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged but
+279         * not rethrown and <code>false</code> will be returned.  If set to <code>false</code> then if
+280         * any objects in the property path evaluate to <code>null</code> then the
+281         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged and
+282         * rethrown.
+283         *
+284         * @return The flag which determines whether <code>null</code> objects in the property path will
+285         * genenerate an <code>IllegalArgumentException</code> or not.
+286         */
+287        public boolean isIgnoreNull() {
+288            return ignoreNull;
+289        }
+290    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html new file mode 100644 index 0000000..bd75380 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanToPropertyValueTransformer.html @@ -0,0 +1,284 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils;
+019    
+020    import org.apache.commons.collections.Transformer;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.lang.reflect.InvocationTargetException;
+025    
+026    
+027    /**
+028     * <p><code>Transformer</code> that outputs a property value.</p>
+029     *
+030     * <p>An implementation of <code>org.apache.commons.collections.Transformer</code> that transforms
+031     * the object provided by returning the value of a specified property of the object.  The
+032     * constructor for <code>BeanToPropertyValueTransformer</code> requires the name of the property
+033     * that will be used in the transformation.  The property can be a simple, nested, indexed, or
+034     * mapped property as defined by <code>org.apache.commons.beanutils.PropertyUtils</code>. If any
+035     * object in the property path specified by <code>propertyName</code> is <code>null</code> then the
+036     * outcome is based on the value of the <code>ignoreNull</code> attribute.
+037     * </p>
+038     *
+039     * <p>
+040     * A typical usage might look like:
+041     * <code><pre>
+042     * // create the transformer
+043     * BeanToPropertyValueTransformer transformer = new BeanToPropertyValueTransformer( "person.address.city" );
+044     *
+045     * // transform the Collection
+046     * Collection peoplesCities = CollectionUtils.collect( peopleCollection, transformer );
+047     * </pre></code>
+048     * </p>
+049     *
+050     * <p>
+051     * This would take a <code>Collection</code> of person objects and return a <code>Collection</code>
+052     * of objects which represents the cities in which each person lived. Assuming...
+053     * <ul>
+054     *    <li>
+055     *       The top level object in the <code>peeopleCollection</code> is an object which represents a
+056     *       person.
+057     *    </li>
+058     *    <li>
+059     *       The person object has a <code>getAddress()</code> method which returns an object which
+060     *       represents a person's address.
+061     *    </li>
+062     *    <li>
+063     *       The address object has a <code>getCity()</code> method which returns an object which
+064     *       represents the city in which a person lives.
+065     *    </li>
+066     * </ul>
+067     *
+068     * @author Norm Deane
+069     * @see org.apache.commons.beanutils.PropertyUtils
+070     * @see org.apache.commons.collections.Transformer
+071     */
+072    public class BeanToPropertyValueTransformer implements Transformer {
+073       
+074        /** For logging. */
+075        private final Log log = LogFactory.getLog(this.getClass());
+076    
+077        /** The name of the property that will be used in the transformation of the object. */
+078        private String propertyName;
+079    
+080        /**
+081         * <p>Should null objects on the property path throw an <code>IllegalArgumentException</code>?</p>
+082         * <p>
+083         * Determines whether <code>null</code> objects in the property path will genenerate an
+084         * <code>IllegalArgumentException</code> or not. If set to <code>true</code> then if any objects
+085         * in the property path evaluate to <code>null</code> then the
+086         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged but
+087         * not rethrown and <code>null</code> will be returned.  If set to <code>false</code> then if any
+088         * objects in the property path evaluate to <code>null</code> then the
+089         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged and
+090         * rethrown.
+091         * </p>
+092         */
+093        private boolean ignoreNull;
+094    
+095        /**
+096         * Constructs a Transformer which does not ignore nulls.
+097         * Constructor which takes the name of the property that will be used in the transformation and
+098         * assumes <code>ignoreNull</code> to be <code>false</code>.
+099         *
+100         * @param propertyName The name of the property that will be used in the transformation.
+101         * @throws IllegalArgumentException If the <code>propertyName</code> is <code>null</code> or
+102         * empty.
+103         */
+104        public BeanToPropertyValueTransformer(String propertyName) {
+105            this(propertyName, false);
+106        }
+107    
+108        /**
+109         * Constructs a Transformer and sets ignoreNull.
+110         * Constructor which takes the name of the property that will be used in the transformation and
+111         * a boolean which determines whether <code>null</code> objects in the property path will
+112         * genenerate an <code>IllegalArgumentException</code> or not.
+113         *
+114         * @param propertyName The name of the property that will be used in the transformation.
+115         * @param ignoreNull Determines whether <code>null</code> objects in the property path will
+116         * genenerate an <code>IllegalArgumentException</code> or not.
+117         * @throws IllegalArgumentException If the <code>propertyName</code> is <code>null</code> or
+118         * empty.
+119         */
+120        public BeanToPropertyValueTransformer(String propertyName, boolean ignoreNull) {
+121            super();
+122    
+123            if ((propertyName != null) && (propertyName.length() > 0)) {
+124                this.propertyName = propertyName;
+125                this.ignoreNull = ignoreNull;
+126            } else {
+127                throw new IllegalArgumentException(
+128                    "propertyName cannot be null or empty");
+129            }
+130        }
+131    
+132        /**
+133         * Returns the value of the property named in the transformer's constructor for
+134         * the object provided. If any object in the property path leading up to the target property is
+135         * <code>null</code> then the outcome will be based on the value of the <code>ignoreNull</code>
+136         * attribute. By default, <code>ignoreNull</code> is <code>false</code> and would result in an
+137         * <code>IllegalArgumentException</code> if an object in the property path leading up to the
+138         * target property is <code>null</code>.
+139         *
+140         * @param object The object to be transformed.
+141         * @return The value of the property named in the transformer's constructor for the object
+142         * provided.
+143         * @throws IllegalArgumentException If an IllegalAccessException, InvocationTargetException, or
+144         * NoSuchMethodException is thrown when trying to access the property specified on the object
+145         * provided. Or if an object in the property path provided is <code>null</code> and
+146         * <code>ignoreNull</code> is set to <code>false</code>.
+147         */
+148        public Object transform(Object object) {
+149           
+150            Object propertyValue = null;
+151    
+152            try {
+153                propertyValue = PropertyUtils.getProperty(object, propertyName);
+154            } catch (IllegalArgumentException e) {
+155                final String errorMsg = "Problem during transformation. Null value encountered in property path...";
+156    
+157                if (ignoreNull) {
+158                    log.warn("WARNING: " + errorMsg + e);
+159                } else {
+160                    IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+161                    if (!BeanUtils.initCause(iae, e)) {
+162                        log.error(errorMsg, e);
+163                    }
+164                    throw iae;
+165                }
+166            } catch (IllegalAccessException e) {
+167                final String errorMsg = "Unable to access the property provided.";
+168                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+169                if (!BeanUtils.initCause(iae, e)) {
+170                    log.error(errorMsg, e);
+171                }
+172                throw iae;
+173            } catch (InvocationTargetException e) {
+174                final String errorMsg = "Exception occurred in property's getter";
+175                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+176                if (!BeanUtils.initCause(iae, e)) {
+177                    log.error(errorMsg, e);
+178                }
+179                throw iae;
+180            } catch (NoSuchMethodException e) {
+181                final String errorMsg = "No property found for name [" +
+182                    propertyName + "]";
+183                IllegalArgumentException iae = new IllegalArgumentException(errorMsg);
+184                if (!BeanUtils.initCause(iae, e)) {
+185                    log.error(errorMsg, e);
+186                }
+187                throw iae;
+188            }
+189    
+190            return propertyValue;
+191        }
+192    
+193        /**
+194         * Returns the name of the property that will be used in the transformation of the bean.
+195         *
+196         * @return The name of the property that will be used in the transformation of the bean.
+197         */
+198        public String getPropertyName() {
+199            return propertyName;
+200        }
+201    
+202        /**
+203         * Returns the flag which determines whether <code>null</code> objects in the property path will
+204         * genenerate an <code>IllegalArgumentException</code> or not. If set to <code>true</code> then
+205         * if any objects in the property path evaluate to <code>null</code> then the
+206         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged but
+207         * not rethrown and <code>null</code> will be returned.  If set to <code>false</code> then if any
+208         * objects in the property path evaluate to <code>null</code> then the
+209         * <code>IllegalArgumentException</code> throw by <code>PropertyUtils</code> will be logged and
+210         * rethrown.
+211         *
+212         * @return The flag which determines whether <code>null</code> objects in the property path will
+213         * genenerate an <code>IllegalArgumentException</code> or not.
+214         */
+215        public boolean isIgnoreNull() {
+216            return ignoreNull;
+217        }
+218    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtils.html new file mode 100644 index 0000000..53cead2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtils.html @@ -0,0 +1,571 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    import java.lang.reflect.InvocationTargetException;
+022    import java.util.Map;
+023    
+024    
+025    
+026    /**
+027     * <p>Utility methods for populating JavaBeans properties via reflection.</p>
+028     *
+029     * <p>The implementations are provided by {@link BeanUtilsBean}.
+030     * These static utility methods use the default instance.
+031     * More sophisticated behaviour can be provided by using a <code>BeanUtilsBean</code> instance.</p>
+032     *
+033     * @author Craig R. McClanahan
+034     * @author Ralph Schaer
+035     * @author Chris Audley
+036     * @author Rey Francois
+037     * @author Gregor Rayman
+038     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+039     * @see BeanUtilsBean
+040     */
+041    
+042    public class BeanUtils {
+043    
+044    
+045        // ------------------------------------------------------ Private Variables
+046    
+047    
+048        /**
+049         * The debugging detail level for this component.
+050         * 
+051         * Note that this static variable will have unexpected side-effects if
+052         * this class is deployed in a shared classloader within a container.
+053         * However as it is actually completely ignored by this class due to its
+054         * deprecated status, it doesn't do any actual harm.
+055         * 
+056         * @deprecated BeanUtils now uses commons-logging for all log messages.
+057         *             Use your favorite logging tool to configure logging for
+058         *             this class.
+059         */
+060        private static int debug = 0;
+061    
+062        /**
+063         * The <code>debug</code> static property is no longer used
+064         * @return debug property
+065         * @deprecated BeanUtils now uses commons-logging for all log messages.
+066         *             Use your favorite logging tool to configure logging for
+067         *             this class.
+068         */
+069        public static int getDebug() {
+070            return (debug);
+071        }
+072    
+073        /**
+074         * The <code>debug</code> static property is no longer used
+075         * @param newDebug debug property
+076         * @deprecated BeanUtils now uses commons-logging for all log messages.
+077         *             Use your favorite logging tool to configure logging for
+078         *             this class.
+079         */
+080        public static void setDebug(int newDebug) {
+081            debug = newDebug;
+082        }
+083    
+084        // --------------------------------------------------------- Class Methods
+085    
+086    
+087        /**
+088         * <p>Clone a bean based on the available property getters and setters,
+089         * even if the bean class itself does not implement Cloneable.</p>
+090         *
+091         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+092         *
+093         * @param bean Bean to be cloned
+094         * @return the cloned bean
+095         *
+096         * @exception IllegalAccessException if the caller does not have
+097         *  access to the property accessor method
+098         * @exception InstantiationException if a new instance of the bean's
+099         *  class cannot be instantiated
+100         * @exception InvocationTargetException if the property accessor method
+101         *  throws an exception
+102         * @exception NoSuchMethodException if an accessor method for this
+103         *  property cannot be found
+104         * @see BeanUtilsBean#cloneBean
+105         */
+106        public static Object cloneBean(Object bean)
+107                throws IllegalAccessException, InstantiationException,
+108                InvocationTargetException, NoSuchMethodException {
+109    
+110            return BeanUtilsBean.getInstance().cloneBean(bean);
+111    
+112        }
+113    
+114    
+115        /**
+116         * <p>Copy property values from the origin bean to the destination bean
+117         * for all cases where the property names are the same.</p>
+118         *
+119         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+120         *
+121         * @param dest Destination bean whose properties are modified
+122         * @param orig Origin bean whose properties are retrieved
+123         *
+124         * @exception IllegalAccessException if the caller does not have
+125         *  access to the property accessor method
+126         * @exception IllegalArgumentException if the <code>dest</code> or
+127         *  <code>orig</code> argument is null or if the <code>dest</code> 
+128         *  property type is different from the source type and the relevant
+129         *  converter has not been registered.
+130         * @exception InvocationTargetException if the property accessor method
+131         *  throws an exception
+132         * @see BeanUtilsBean#copyProperties
+133         */
+134        public static void copyProperties(Object dest, Object orig)
+135            throws IllegalAccessException, InvocationTargetException {
+136            
+137            BeanUtilsBean.getInstance().copyProperties(dest, orig);
+138        }
+139    
+140    
+141        /**
+142         * <p>Copy the specified property value to the specified destination bean,
+143         * performing any type conversion that is required.</p>    
+144         *
+145         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+146         *
+147         * @param bean Bean on which setting is to be performed
+148         * @param name Property name (can be nested/indexed/mapped/combo)
+149         * @param value Value to be set
+150         *
+151         * @exception IllegalAccessException if the caller does not have
+152         *  access to the property accessor method
+153         * @exception InvocationTargetException if the property accessor method
+154         *  throws an exception
+155         * @see BeanUtilsBean#copyProperty     
+156         */
+157        public static void copyProperty(Object bean, String name, Object value)
+158            throws IllegalAccessException, InvocationTargetException {
+159    
+160            BeanUtilsBean.getInstance().copyProperty(bean, name, value);
+161        }
+162    
+163    
+164        /**
+165         * <p>Return the entire set of properties for which the specified bean
+166         * provides a read method.</p>
+167         *
+168         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+169         *
+170         * @param bean Bean whose properties are to be extracted
+171         * @return Map of property descriptors
+172         *
+173         * @exception IllegalAccessException if the caller does not have
+174         *  access to the property accessor method
+175         * @exception InvocationTargetException if the property accessor method
+176         *  throws an exception
+177         * @exception NoSuchMethodException if an accessor method for this
+178         *  property cannot be found
+179         * @see BeanUtilsBean#describe 
+180         */
+181        public static Map describe(Object bean)
+182                throws IllegalAccessException, InvocationTargetException,
+183                NoSuchMethodException {
+184    
+185            return BeanUtilsBean.getInstance().describe(bean);
+186        }
+187    
+188    
+189        /**
+190         * <p>Return the value of the specified array property of the specified
+191         * bean, as a String array.</p>
+192         *
+193         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+194         *
+195         * @param bean Bean whose property is to be extracted
+196         * @param name Name of the property to be extracted
+197         * @return The array property value
+198         *
+199         * @exception IllegalAccessException if the caller does not have
+200         *  access to the property accessor method
+201         * @exception InvocationTargetException if the property accessor method
+202         *  throws an exception
+203         * @exception NoSuchMethodException if an accessor method for this
+204         *  property cannot be found
+205         * @see BeanUtilsBean#getArrayProperty 
+206         */
+207        public static String[] getArrayProperty(Object bean, String name)
+208                throws IllegalAccessException, InvocationTargetException,
+209                NoSuchMethodException {
+210    
+211            return BeanUtilsBean.getInstance().getArrayProperty(bean, name);
+212        }
+213    
+214    
+215        /**
+216         * <p>Return the value of the specified indexed property of the specified
+217         * bean, as a String.</p>
+218         *
+219         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+220         *
+221         * @param bean Bean whose property is to be extracted
+222         * @param name <code>propertyname[index]</code> of the property value
+223         *  to be extracted
+224         * @return The indexed property's value, converted to a String
+225         *
+226         * @exception IllegalAccessException if the caller does not have
+227         *  access to the property accessor method
+228         * @exception InvocationTargetException if the property accessor method
+229         *  throws an exception
+230         * @exception NoSuchMethodException if an accessor method for this
+231         *  property cannot be found
+232         * @see BeanUtilsBean#getIndexedProperty(Object, String)
+233         */
+234        public static String getIndexedProperty(Object bean, String name)
+235                throws IllegalAccessException, InvocationTargetException,
+236                NoSuchMethodException {
+237            
+238            return BeanUtilsBean.getInstance().getIndexedProperty(bean, name);
+239    
+240        }
+241    
+242    
+243        /**
+244         * Return the value of the specified indexed property of the specified
+245         * bean, as a String.  The index is specified as a method parameter and
+246         * must *not* be included in the property name expression
+247         *
+248         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+249         *
+250         * @param bean Bean whose property is to be extracted
+251         * @param name Simple property name of the property value to be extracted
+252         * @param index Index of the property value to be extracted
+253         * @return The indexed property's value, converted to a String
+254         *
+255         * @exception IllegalAccessException if the caller does not have
+256         *  access to the property accessor method
+257         * @exception InvocationTargetException if the property accessor method
+258         *  throws an exception
+259         * @exception NoSuchMethodException if an accessor method for this
+260         *  property cannot be found
+261         * @see BeanUtilsBean#getIndexedProperty(Object, String, int)
+262         */
+263        public static String getIndexedProperty(Object bean,
+264                                                String name, int index)
+265                throws IllegalAccessException, InvocationTargetException,
+266                NoSuchMethodException {
+267    
+268            return BeanUtilsBean.getInstance().getIndexedProperty(bean, name, index);
+269    
+270        }
+271    
+272    
+273        /**
+274         * </p>Return the value of the specified indexed property of the specified
+275         * bean, as a String.</p>
+276         *
+277         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+278         *
+279         * @param bean Bean whose property is to be extracted
+280         * @param name <code>propertyname(index)</code> of the property value
+281         *  to be extracted
+282         * @return The mapped property's value, converted to a String
+283         *
+284         * @exception IllegalAccessException if the caller does not have
+285         *  access to the property accessor method
+286         * @exception InvocationTargetException if the property accessor method
+287         *  throws an exception
+288         * @exception NoSuchMethodException if an accessor method for this
+289         *  property cannot be found
+290         * @see BeanUtilsBean#getMappedProperty(Object, String)
+291         */
+292        public static String getMappedProperty(Object bean, String name)
+293                throws IllegalAccessException, InvocationTargetException,
+294                NoSuchMethodException {
+295    
+296            return BeanUtilsBean.getInstance().getMappedProperty(bean, name);
+297    
+298        }
+299    
+300    
+301        /**
+302         * </p>Return the value of the specified mapped property of the specified
+303         * bean, as a String.</p>
+304         *
+305         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+306         *
+307         * @param bean Bean whose property is to be extracted
+308         * @param name Simple property name of the property value to be extracted
+309         * @param key Lookup key of the property value to be extracted
+310         * @return The mapped property's value, converted to a String
+311         *
+312         * @exception IllegalAccessException if the caller does not have
+313         *  access to the property accessor method
+314         * @exception InvocationTargetException if the property accessor method
+315         *  throws an exception
+316         * @exception NoSuchMethodException if an accessor method for this
+317         *  property cannot be found
+318         * @see BeanUtilsBean#getMappedProperty(Object, String, String)
+319         */
+320        public static String getMappedProperty(Object bean,
+321                                               String name, String key)
+322                throws IllegalAccessException, InvocationTargetException,
+323                NoSuchMethodException {
+324    
+325            return BeanUtilsBean.getInstance().getMappedProperty(bean, name, key);
+326    
+327        }
+328    
+329    
+330        /**
+331         * <p>Return the value of the (possibly nested) property of the specified
+332         * name, for the specified bean, as a String.</p>
+333         *
+334         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+335         *
+336         * @param bean Bean whose property is to be extracted
+337         * @param name Possibly nested name of the property to be extracted
+338         * @return The nested property's value, converted to a String
+339         *
+340         * @exception IllegalAccessException if the caller does not have
+341         *  access to the property accessor method
+342         * @exception IllegalArgumentException if a nested reference to a
+343         *  property returns null
+344         * @exception InvocationTargetException if the property accessor method
+345         *  throws an exception
+346         * @exception NoSuchMethodException if an accessor method for this
+347         *  property cannot be found
+348         * @see BeanUtilsBean#getNestedProperty
+349         */
+350        public static String getNestedProperty(Object bean, String name)
+351                throws IllegalAccessException, InvocationTargetException,
+352                NoSuchMethodException {
+353    
+354            return BeanUtilsBean.getInstance().getNestedProperty(bean, name);
+355    
+356        }
+357    
+358    
+359        /**
+360         * <p>Return the value of the specified property of the specified bean,
+361         * no matter which property reference format is used, as a String.</p>
+362         *
+363         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+364         *
+365         * @param bean Bean whose property is to be extracted
+366         * @param name Possibly indexed and/or nested name of the property
+367         *  to be extracted
+368         * @return The property's value, converted to a String
+369         *
+370         * @exception IllegalAccessException if the caller does not have
+371         *  access to the property accessor method
+372         * @exception InvocationTargetException if the property accessor method
+373         *  throws an exception
+374         * @exception NoSuchMethodException if an accessor method for this
+375         *  property cannot be found
+376         * @see BeanUtilsBean#getProperty
+377         */
+378        public static String getProperty(Object bean, String name)
+379                throws IllegalAccessException, InvocationTargetException,
+380                NoSuchMethodException {
+381    
+382            return BeanUtilsBean.getInstance().getProperty(bean, name);
+383    
+384        }
+385    
+386    
+387        /**
+388         * <p>Return the value of the specified simple property of the specified
+389         * bean, converted to a String.</p>
+390         *
+391         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+392         *
+393         * @param bean Bean whose property is to be extracted
+394         * @param name Name of the property to be extracted
+395         * @return The property's value, converted to a String
+396         *
+397         * @exception IllegalAccessException if the caller does not have
+398         *  access to the property accessor method
+399         * @exception InvocationTargetException if the property accessor method
+400         *  throws an exception
+401         * @exception NoSuchMethodException if an accessor method for this
+402         *  property cannot be found
+403         * @see BeanUtilsBean#getSimpleProperty
+404         */
+405        public static String getSimpleProperty(Object bean, String name)
+406                throws IllegalAccessException, InvocationTargetException,
+407                NoSuchMethodException {
+408    
+409            return BeanUtilsBean.getInstance().getSimpleProperty(bean, name);
+410    
+411        }
+412    
+413    
+414        /**
+415         * <p>Populate the JavaBeans properties of the specified bean, based on
+416         * the specified name/value pairs.</p>
+417         *
+418         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+419         *
+420         * @param bean JavaBean whose properties are being populated
+421         * @param properties Map keyed by property name, with the
+422         *  corresponding (String or String[]) value(s) to be set
+423         *
+424         * @exception IllegalAccessException if the caller does not have
+425         *  access to the property accessor method
+426         * @exception InvocationTargetException if the property accessor method
+427         *  throws an exception
+428         * @see BeanUtilsBean#populate
+429         */
+430        public static void populate(Object bean, Map properties)
+431            throws IllegalAccessException, InvocationTargetException {
+432            
+433            BeanUtilsBean.getInstance().populate(bean, properties);
+434        }
+435    
+436    
+437        /**
+438         * <p>Set the specified property value, performing type conversions as
+439         * required to conform to the type of the destination property.</p>
+440         *
+441         * <p>For more details see <code>BeanUtilsBean</code>.</p>
+442         *
+443         * @param bean Bean on which setting is to be performed
+444         * @param name Property name (can be nested/indexed/mapped/combo)
+445         * @param value Value to be set
+446         *
+447         * @exception IllegalAccessException if the caller does not have
+448         *  access to the property accessor method
+449         * @exception InvocationTargetException if the property accessor method
+450         *  throws an exception
+451         * @see BeanUtilsBean#setProperty
+452         */
+453        public static void setProperty(Object bean, String name, Object value)
+454            throws IllegalAccessException, InvocationTargetException {
+455    
+456            BeanUtilsBean.getInstance().setProperty(bean, name, value);
+457        }
+458    
+459        /** 
+460         * If we're running on JDK 1.4 or later, initialize the cause for the given throwable.
+461         * 
+462         * @param  throwable The throwable.
+463         * @param  cause     The cause of the throwable.
+464         * @return  true if the cause was initialized, otherwise false.
+465         * @since 1.8.0
+466         */
+467        public static boolean initCause(Throwable throwable, Throwable cause) {
+468            return BeanUtilsBean.getInstance().initCause(throwable, cause);
+469        }
+470    
+471        /**
+472         * Create a cache.
+473         * @return a new cache
+474         * @since 1.8.0
+475         */
+476        public static Map createCache() {
+477            return new WeakFastHashMap();
+478        }
+479    
+480        /**
+481         * Return whether a Map is fast
+482         * @param map The map
+483         * @return Whether it is fast or not.
+484         * @since 1.8.0
+485         */
+486        public static boolean getCacheFast(Map map) {
+487            if (map instanceof WeakFastHashMap) {
+488                return ((WeakFastHashMap)map).getFast();
+489            } else {
+490                return false;
+491            }
+492        }
+493    
+494        /**
+495         * Set whether fast on a Map
+496         * @param map The map
+497         * @param fast Whether it should be fast or not.
+498         * @since 1.8.0
+499         */
+500        public static void setCacheFast(Map map, boolean fast) {
+501            if (map instanceof WeakFastHashMap) {
+502                ((WeakFastHashMap)map).setFast(fast);
+503            }
+504        }
+505    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean.html new file mode 100644 index 0000000..c9d0f14 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean.html @@ -0,0 +1,1177 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.beans.IndexedPropertyDescriptor;
+023    import java.beans.PropertyDescriptor;
+024    import java.lang.reflect.Array;
+025    import java.lang.reflect.InvocationTargetException;
+026    import java.lang.reflect.Method;
+027    import java.util.ArrayList;
+028    import java.util.Collection;
+029    import java.util.HashMap;
+030    import java.util.Iterator;
+031    import java.util.Map;
+032    
+033    import org.apache.commons.beanutils.expression.Resolver;
+034    import org.apache.commons.logging.Log;
+035    import org.apache.commons.logging.LogFactory;
+036    
+037    
+038    /**
+039     * <p>JavaBean property population methods.</p>
+040     *
+041     * <p>This class provides implementations for the utility methods in
+042     * {@link BeanUtils}.
+043     * Different instances can be used to isolate caches between classloaders
+044     * and to vary the value converters registered.</p>
+045     *
+046     * @author Craig R. McClanahan
+047     * @author Ralph Schaer
+048     * @author Chris Audley
+049     * @author Rey Francois
+050     * @author Gregor Rayman
+051     * @version $Revision: 834031 $ $Date: 2009-11-09 12:26:52 +0000 (Mon, 09 Nov 2009) $
+052     * @see BeanUtils
+053     * @since 1.7
+054     */
+055    
+056    public class BeanUtilsBean {
+057    
+058    
+059        // ------------------------------------------------------ Private Class Variables
+060    
+061        /** 
+062         * Contains <code>BeanUtilsBean</code> instances indexed by context classloader.
+063         */
+064        private static final ContextClassLoaderLocal 
+065                BEANS_BY_CLASSLOADER = new ContextClassLoaderLocal() {
+066                            // Creates the default instance used when the context classloader is unavailable
+067                            protected Object initialValue() {
+068                                return new BeanUtilsBean();
+069                            }
+070                        };
+071        
+072        /** 
+073         * Gets the instance which provides the functionality for {@link BeanUtils}.
+074         * This is a pseudo-singleton - an single instance is provided per (thread) context classloader.
+075         * This mechanism provides isolation for web apps deployed in the same container.
+076         *
+077         * @return The (pseudo-singleton) BeanUtils bean instance
+078         */
+079        public static BeanUtilsBean getInstance() {
+080            return (BeanUtilsBean) BEANS_BY_CLASSLOADER.get();
+081        }
+082    
+083        /** 
+084         * Sets the instance which provides the functionality for {@link BeanUtils}.
+085         * This is a pseudo-singleton - an single instance is provided per (thread) context classloader.
+086         * This mechanism provides isolation for web apps deployed in the same container.
+087         * 
+088         * @param newInstance The (pseudo-singleton) BeanUtils bean instance
+089         */
+090        public static void setInstance(BeanUtilsBean newInstance) {
+091            BEANS_BY_CLASSLOADER.set(newInstance);
+092        }
+093    
+094        // --------------------------------------------------------- Attributes
+095    
+096        /**
+097         * Logging for this instance
+098         */
+099        private Log log = LogFactory.getLog(BeanUtils.class);
+100        
+101        /** Used to perform conversions between object types when setting properties */
+102        private ConvertUtilsBean convertUtilsBean;
+103        
+104        /** Used to access properties*/
+105        private PropertyUtilsBean propertyUtilsBean;
+106    
+107        /** A reference to Throwable's initCause method, or null if it's not there in this JVM */
+108        private static final Method INIT_CAUSE_METHOD = getInitCauseMethod();
+109    
+110        // --------------------------------------------------------- Constuctors
+111    
+112        /** 
+113         * <p>Constructs an instance using new property 
+114         * and conversion instances.</p>
+115         */
+116        public BeanUtilsBean() {
+117            this(new ConvertUtilsBean(), new PropertyUtilsBean());
+118        }
+119    
+120        /** 
+121         * <p>Constructs an instance using given conversion instances
+122         * and new {@link PropertyUtilsBean} instance.</p>
+123         *
+124         * @param convertUtilsBean use this <code>ConvertUtilsBean</code> 
+125         * to perform conversions from one object to another
+126         *
+127         * @since 1.8.0
+128         */
+129        public BeanUtilsBean(ConvertUtilsBean convertUtilsBean) {
+130            this(convertUtilsBean, new PropertyUtilsBean());
+131        }
+132    
+133        /** 
+134         * <p>Constructs an instance using given property and conversion instances.</p>
+135         *
+136         * @param convertUtilsBean use this <code>ConvertUtilsBean</code> 
+137         * to perform conversions from one object to another
+138         * @param propertyUtilsBean use this <code>PropertyUtilsBean</code>
+139         * to access properties
+140         */
+141        public BeanUtilsBean(
+142                                ConvertUtilsBean convertUtilsBean, 
+143                                PropertyUtilsBean propertyUtilsBean) {
+144                                
+145            this.convertUtilsBean = convertUtilsBean;
+146            this.propertyUtilsBean = propertyUtilsBean;
+147        }
+148    
+149        // --------------------------------------------------------- Public Methods
+150    
+151        /**
+152         * <p>Clone a bean based on the available property getters and setters,
+153         * even if the bean class itself does not implement Cloneable.</p>
+154         *
+155         * <p>
+156         * <strong>Note:</strong> this method creates a <strong>shallow</strong> clone.
+157         * In other words, any objects referred to by the bean are shared with the clone
+158         * rather than being cloned in turn.
+159         * </p>
+160         *
+161         * @param bean Bean to be cloned
+162         * @return the cloned bean
+163         *
+164         * @exception IllegalAccessException if the caller does not have
+165         *  access to the property accessor method
+166         * @exception InstantiationException if a new instance of the bean's
+167         *  class cannot be instantiated
+168         * @exception InvocationTargetException if the property accessor method
+169         *  throws an exception
+170         * @exception NoSuchMethodException if an accessor method for this
+171         *  property cannot be found
+172         */
+173        public Object cloneBean(Object bean)
+174                throws IllegalAccessException, InstantiationException,
+175                InvocationTargetException, NoSuchMethodException {
+176    
+177            if (log.isDebugEnabled()) {
+178                log.debug("Cloning bean: " + bean.getClass().getName());
+179            }
+180            Object newBean = null;
+181            if (bean instanceof DynaBean) {
+182                newBean = ((DynaBean) bean).getDynaClass().newInstance();
+183            } else {
+184                newBean = bean.getClass().newInstance();
+185            }
+186            getPropertyUtils().copyProperties(newBean, bean);
+187            return (newBean);
+188    
+189        }
+190    
+191    
+192        /**
+193         * <p>Copy property values from the origin bean to the destination bean
+194         * for all cases where the property names are the same.  For each
+195         * property, a conversion is attempted as necessary.  All combinations of
+196         * standard JavaBeans and DynaBeans as origin and destination are
+197         * supported.  Properties that exist in the origin bean, but do not exist
+198         * in the destination bean (or are read-only in the destination bean) are
+199         * silently ignored.</p>
+200         *
+201         * <p>If the origin "bean" is actually a <code>Map</code>, it is assumed
+202         * to contain String-valued <strong>simple</strong> property names as the keys, pointing at
+203         * the corresponding property values that will be converted (if necessary)
+204         * and set in the destination bean. <strong>Note</strong> that this method
+205         * is intended to perform a "shallow copy" of the properties and so complex
+206         * properties (for example, nested ones) will not be copied.</p>
+207         *
+208         * <p>This method differs from <code>populate()</code>, which
+209         * was primarily designed for populating JavaBeans from the map of request
+210         * parameters retrieved on an HTTP request, is that no scalar->indexed
+211         * or indexed->scalar manipulations are performed.  If the origin property
+212         * is indexed, the destination property must be also.</p>
+213         *
+214         * <p>If you know that no type conversions are required, the
+215         * <code>copyProperties()</code> method in {@link PropertyUtils} will
+216         * execute faster than this method.</p>
+217         *
+218         * <p><strong>FIXME</strong> - Indexed and mapped properties that do not
+219         * have getter and setter methods for the underlying array or Map are not
+220         * copied by this method.</p>
+221         *
+222         * @param dest Destination bean whose properties are modified
+223         * @param orig Origin bean whose properties are retrieved
+224         *
+225         * @exception IllegalAccessException if the caller does not have
+226         *  access to the property accessor method
+227         * @exception IllegalArgumentException if the <code>dest</code> or
+228         *  <code>orig</code> argument is null or if the <code>dest</code> 
+229         *  property type is different from the source type and the relevant
+230         *  converter has not been registered.
+231         * @exception InvocationTargetException if the property accessor method
+232         *  throws an exception
+233         */
+234        public void copyProperties(Object dest, Object orig)
+235            throws IllegalAccessException, InvocationTargetException {
+236    
+237            // Validate existence of the specified beans
+238            if (dest == null) {
+239                throw new IllegalArgumentException
+240                        ("No destination bean specified");
+241            }
+242            if (orig == null) {
+243                throw new IllegalArgumentException("No origin bean specified");
+244            }
+245            if (log.isDebugEnabled()) {
+246                log.debug("BeanUtils.copyProperties(" + dest + ", " +
+247                          orig + ")");
+248            }
+249    
+250            // Copy the properties, converting as necessary
+251            if (orig instanceof DynaBean) {
+252                DynaProperty[] origDescriptors =
+253                    ((DynaBean) orig).getDynaClass().getDynaProperties();
+254                for (int i = 0; i < origDescriptors.length; i++) {
+255                    String name = origDescriptors[i].getName();
+256                    // Need to check isReadable() for WrapDynaBean
+257                    // (see Jira issue# BEANUTILS-61)
+258                    if (getPropertyUtils().isReadable(orig, name) &&
+259                        getPropertyUtils().isWriteable(dest, name)) {
+260                        Object value = ((DynaBean) orig).get(name);
+261                        copyProperty(dest, name, value);
+262                    }
+263                }
+264            } else if (orig instanceof Map) {
+265                Iterator entries = ((Map) orig).entrySet().iterator();
+266                while (entries.hasNext()) {
+267                    Map.Entry entry = (Map.Entry) entries.next();
+268                    String name = (String)entry.getKey();
+269                    if (getPropertyUtils().isWriteable(dest, name)) {
+270                        copyProperty(dest, name, entry.getValue());
+271                    }
+272                }
+273            } else /* if (orig is a standard JavaBean) */ {
+274                PropertyDescriptor[] origDescriptors =
+275                    getPropertyUtils().getPropertyDescriptors(orig);
+276                for (int i = 0; i < origDescriptors.length; i++) {
+277                    String name = origDescriptors[i].getName();
+278                    if ("class".equals(name)) {
+279                        continue; // No point in trying to set an object's class
+280                    }
+281                    if (getPropertyUtils().isReadable(orig, name) &&
+282                        getPropertyUtils().isWriteable(dest, name)) {
+283                        try {
+284                            Object value =
+285                                getPropertyUtils().getSimpleProperty(orig, name);
+286                            copyProperty(dest, name, value);
+287                        } catch (NoSuchMethodException e) {
+288                            // Should not happen
+289                        }
+290                    }
+291                }
+292            }
+293    
+294        }
+295    
+296    
+297        /**
+298         * <p>Copy the specified property value to the specified destination bean,
+299         * performing any type conversion that is required.  If the specified
+300         * bean does not have a property of the specified name, or the property
+301         * is read only on the destination bean, return without
+302         * doing anything.  If you have custom destination property types, register
+303         * {@link Converter}s for them by calling the <code>register()</code>
+304         * method of {@link ConvertUtils}.</p>
+305         *
+306         * <p><strong>IMPLEMENTATION RESTRICTIONS</strong>:</p>
+307         * <ul>
+308         * <li>Does not support destination properties that are indexed,
+309         *     but only an indexed setter (as opposed to an array setter)
+310         *     is available.</li>
+311         * <li>Does not support destination properties that are mapped,
+312         *     but only a keyed setter (as opposed to a Map setter)
+313         *     is available.</li>
+314         * <li>The desired property type of a mapped setter cannot be
+315         *     determined (since Maps support any data type), so no conversion
+316         *     will be performed.</li>
+317         * </ul>
+318         *
+319         * @param bean Bean on which setting is to be performed
+320         * @param name Property name (can be nested/indexed/mapped/combo)
+321         * @param value Value to be set
+322         *
+323         * @exception IllegalAccessException if the caller does not have
+324         *  access to the property accessor method
+325         * @exception InvocationTargetException if the property accessor method
+326         *  throws an exception
+327         */
+328        public void copyProperty(Object bean, String name, Object value)
+329            throws IllegalAccessException, InvocationTargetException {
+330    
+331            // Trace logging (if enabled)
+332            if (log.isTraceEnabled()) {
+333                StringBuffer sb = new StringBuffer("  copyProperty(");
+334                sb.append(bean);
+335                sb.append(", ");
+336                sb.append(name);
+337                sb.append(", ");
+338                if (value == null) {
+339                    sb.append("<NULL>");
+340                } else if (value instanceof String) {
+341                    sb.append((String) value);
+342                } else if (value instanceof String[]) {
+343                    String[] values = (String[]) value;
+344                    sb.append('[');
+345                    for (int i = 0; i < values.length; i++) {
+346                        if (i > 0) {
+347                            sb.append(',');
+348                        }
+349                        sb.append(values[i]);
+350                    }
+351                    sb.append(']');
+352                } else {
+353                    sb.append(value.toString());
+354                }
+355                sb.append(')');
+356                log.trace(sb.toString());
+357            }
+358    
+359            // Resolve any nested expression to get the actual target bean
+360            Object target = bean;
+361            Resolver resolver = getPropertyUtils().getResolver();
+362            while (resolver.hasNested(name)) {
+363                try {
+364                    target = getPropertyUtils().getProperty(target, resolver.next(name));
+365                    name = resolver.remove(name);
+366                } catch (NoSuchMethodException e) {
+367                    return; // Skip this property setter
+368                }
+369            }
+370            if (log.isTraceEnabled()) {
+371                log.trace("    Target bean = " + target);
+372                log.trace("    Target name = " + name);
+373            }
+374    
+375            // Declare local variables we will require
+376            String propName = resolver.getProperty(name); // Simple name of target property
+377            Class type = null;                            // Java type of target property
+378            int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
+379            String key = resolver.getKey(name);           // Mapped key value (if any)
+380    
+381            // Calculate the target property type
+382            if (target instanceof DynaBean) {
+383                DynaClass dynaClass = ((DynaBean) target).getDynaClass();
+384                DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);
+385                if (dynaProperty == null) {
+386                    return; // Skip this property setter
+387                }
+388                type = dynaProperty.getType();
+389            } else {
+390                PropertyDescriptor descriptor = null;
+391                try {
+392                    descriptor =
+393                        getPropertyUtils().getPropertyDescriptor(target, name);
+394                    if (descriptor == null) {
+395                        return; // Skip this property setter
+396                    }
+397                } catch (NoSuchMethodException e) {
+398                    return; // Skip this property setter
+399                }
+400                type = descriptor.getPropertyType();
+401                if (type == null) {
+402                    // Most likely an indexed setter on a POJB only
+403                    if (log.isTraceEnabled()) {
+404                        log.trace("    target type for property '" +
+405                                  propName + "' is null, so skipping ths setter");
+406                    }
+407                    return;
+408                }
+409            }
+410            if (log.isTraceEnabled()) {
+411                log.trace("    target propName=" + propName + ", type=" +
+412                          type + ", index=" + index + ", key=" + key);
+413            }
+414    
+415            // Convert the specified value to the required type and store it
+416            if (index >= 0) {                    // Destination must be indexed
+417                value = convert(value, type.getComponentType());
+418                try {
+419                    getPropertyUtils().setIndexedProperty(target, propName,
+420                                                     index, value);
+421                } catch (NoSuchMethodException e) {
+422                    throw new InvocationTargetException
+423                        (e, "Cannot set " + propName);
+424                }
+425            } else if (key != null) {            // Destination must be mapped
+426                // Maps do not know what the preferred data type is,
+427                // so perform no conversions at all
+428                // FIXME - should we create or support a TypedMap?
+429                try {
+430                    getPropertyUtils().setMappedProperty(target, propName,
+431                                                    key, value);
+432                } catch (NoSuchMethodException e) {
+433                    throw new InvocationTargetException
+434                        (e, "Cannot set " + propName);
+435                }
+436            } else {                             // Destination must be simple
+437                value = convert(value, type);
+438                try {
+439                    getPropertyUtils().setSimpleProperty(target, propName, value);
+440                } catch (NoSuchMethodException e) {
+441                    throw new InvocationTargetException
+442                        (e, "Cannot set " + propName);
+443                }
+444            }
+445    
+446        }
+447    
+448    
+449        /**
+450         * <p>Return the entire set of properties for which the specified bean
+451         * provides a read method. This map contains the to <code>String</code>
+452         * converted property values for all properties for which a read method
+453         * is provided (i.e. where the getReadMethod() returns non-null).</p>
+454         *
+455         * <p>This map can be fed back to a call to
+456         * <code>BeanUtils.populate()</code> to reconsitute the same set of
+457         * properties, modulo differences for read-only and write-only
+458         * properties, but only if there are no indexed properties.</p>
+459         *
+460         * <p><strong>Warning:</strong> if any of the bean property implementations
+461         * contain (directly or indirectly) a call to this method then 
+462         * a stack overflow may result. For example:
+463         * <code><pre>
+464         * class MyBean
+465         * {
+466         *    public Map getParameterMap()
+467         *    {
+468         *         BeanUtils.describe(this);
+469         *    }
+470         * }
+471         * </pre></code>
+472         * will result in an infinite regression when <code>getParametersMap</code>
+473         * is called. It is recommended that such methods are given alternative
+474         * names (for example, <code>parametersMap</code>).
+475         * </p>
+476         * @param bean Bean whose properties are to be extracted
+477         * @return Map of property descriptors
+478         *
+479         * @exception IllegalAccessException if the caller does not have
+480         *  access to the property accessor method
+481         * @exception InvocationTargetException if the property accessor method
+482         *  throws an exception
+483         * @exception NoSuchMethodException if an accessor method for this
+484         *  property cannot be found
+485         */
+486        public Map describe(Object bean)
+487                throws IllegalAccessException, InvocationTargetException,
+488                NoSuchMethodException {
+489    
+490            if (bean == null) {
+491            //            return (Collections.EMPTY_MAP);
+492                return (new java.util.HashMap());
+493            }
+494            
+495            if (log.isDebugEnabled()) {
+496                log.debug("Describing bean: " + bean.getClass().getName());
+497            }
+498                
+499            Map description = new HashMap();
+500            if (bean instanceof DynaBean) {
+501                DynaProperty[] descriptors =
+502                    ((DynaBean) bean).getDynaClass().getDynaProperties();
+503                for (int i = 0; i < descriptors.length; i++) {
+504                    String name = descriptors[i].getName();
+505                    description.put(name, getProperty(bean, name));
+506                }
+507            } else {
+508                PropertyDescriptor[] descriptors =
+509                    getPropertyUtils().getPropertyDescriptors(bean);
+510                Class clazz = bean.getClass();
+511                for (int i = 0; i < descriptors.length; i++) {
+512                    String name = descriptors[i].getName();
+513                    if (getPropertyUtils().getReadMethod(clazz, descriptors[i]) != null) {
+514                        description.put(name, getProperty(bean, name));
+515                    }
+516                }
+517            }
+518            return (description);
+519    
+520        }
+521    
+522    
+523        /**
+524         * Return the value of the specified array property of the specified
+525         * bean, as a String array.
+526         *
+527         * @param bean Bean whose property is to be extracted
+528         * @param name Name of the property to be extracted
+529         * @return The array property value
+530         *
+531         * @exception IllegalAccessException if the caller does not have
+532         *  access to the property accessor method
+533         * @exception InvocationTargetException if the property accessor method
+534         *  throws an exception
+535         * @exception NoSuchMethodException if an accessor method for this
+536         *  property cannot be found
+537         */
+538        public String[] getArrayProperty(Object bean, String name)
+539                throws IllegalAccessException, InvocationTargetException,
+540                NoSuchMethodException {
+541    
+542            Object value = getPropertyUtils().getProperty(bean, name);
+543            if (value == null) {
+544                return (null);
+545            } else if (value instanceof Collection) {
+546                ArrayList values = new ArrayList();
+547                Iterator items = ((Collection) value).iterator();
+548                while (items.hasNext()) {
+549                    Object item = items.next();
+550                    if (item == null) {
+551                        values.add((String) null);
+552                    } else {
+553                        // convert to string using convert utils
+554                        values.add(getConvertUtils().convert(item));
+555                    }
+556                }
+557                return ((String[]) values.toArray(new String[values.size()]));
+558            } else if (value.getClass().isArray()) {
+559                int n = Array.getLength(value);
+560                String[] results = new String[n];
+561                for (int i = 0; i < n; i++) {
+562                    Object item = Array.get(value, i);
+563                    if (item == null) {
+564                        results[i] = null;
+565                    } else {
+566                        // convert to string using convert utils
+567                        results[i] = getConvertUtils().convert(item);
+568                    }
+569                }
+570                return (results);
+571            } else {
+572                String[] results = new String[1];
+573                results[0] = getConvertUtils().convert(value);
+574                return (results);
+575            }
+576    
+577        }
+578    
+579    
+580        /**
+581         * Return the value of the specified indexed property of the specified
+582         * bean, as a String.  The zero-relative index of the
+583         * required value must be included (in square brackets) as a suffix to
+584         * the property name, or <code>IllegalArgumentException</code> will be
+585         * thrown.
+586         *
+587         * @param bean Bean whose property is to be extracted
+588         * @param name <code>propertyname[index]</code> of the property value
+589         *  to be extracted
+590         * @return The indexed property's value, converted to a String
+591         *
+592         * @exception IllegalAccessException if the caller does not have
+593         *  access to the property accessor method
+594         * @exception InvocationTargetException if the property accessor method
+595         *  throws an exception
+596         * @exception NoSuchMethodException if an accessor method for this
+597         *  property cannot be found
+598         */
+599        public String getIndexedProperty(Object bean, String name)
+600                throws IllegalAccessException, InvocationTargetException,
+601                NoSuchMethodException {
+602    
+603            Object value = getPropertyUtils().getIndexedProperty(bean, name);
+604            return (getConvertUtils().convert(value));
+605    
+606        }
+607    
+608    
+609        /**
+610         * Return the value of the specified indexed property of the specified
+611         * bean, as a String.  The index is specified as a method parameter and
+612         * must *not* be included in the property name expression
+613         *
+614         * @param bean Bean whose property is to be extracted
+615         * @param name Simple property name of the property value to be extracted
+616         * @param index Index of the property value to be extracted
+617         * @return The indexed property's value, converted to a String
+618         *
+619         * @exception IllegalAccessException if the caller does not have
+620         *  access to the property accessor method
+621         * @exception InvocationTargetException if the property accessor method
+622         *  throws an exception
+623         * @exception NoSuchMethodException if an accessor method for this
+624         *  property cannot be found
+625         */
+626        public String getIndexedProperty(Object bean,
+627                                                String name, int index)
+628                throws IllegalAccessException, InvocationTargetException,
+629                NoSuchMethodException {
+630    
+631            Object value = getPropertyUtils().getIndexedProperty(bean, name, index);
+632            return (getConvertUtils().convert(value));
+633    
+634        }
+635    
+636    
+637        /**
+638         * Return the value of the specified indexed property of the specified
+639         * bean, as a String.  The String-valued key of the required value
+640         * must be included (in parentheses) as a suffix to
+641         * the property name, or <code>IllegalArgumentException</code> will be
+642         * thrown.
+643         *
+644         * @param bean Bean whose property is to be extracted
+645         * @param name <code>propertyname(index)</code> of the property value
+646         *  to be extracted
+647         * @return The mapped property's value, converted to a String
+648         *
+649         * @exception IllegalAccessException if the caller does not have
+650         *  access to the property accessor method
+651         * @exception InvocationTargetException if the property accessor method
+652         *  throws an exception
+653         * @exception NoSuchMethodException if an accessor method for this
+654         *  property cannot be found
+655         */
+656        public String getMappedProperty(Object bean, String name)
+657                throws IllegalAccessException, InvocationTargetException,
+658                NoSuchMethodException {
+659    
+660            Object value = getPropertyUtils().getMappedProperty(bean, name);
+661            return (getConvertUtils().convert(value));
+662    
+663        }
+664    
+665    
+666        /**
+667         * Return the value of the specified mapped property of the specified
+668         * bean, as a String.  The key is specified as a method parameter and
+669         * must *not* be included in the property name expression
+670         *
+671         * @param bean Bean whose property is to be extracted
+672         * @param name Simple property name of the property value to be extracted
+673         * @param key Lookup key of the property value to be extracted
+674         * @return The mapped property's value, converted to a String
+675         *
+676         * @exception IllegalAccessException if the caller does not have
+677         *  access to the property accessor method
+678         * @exception InvocationTargetException if the property accessor method
+679         *  throws an exception
+680         * @exception NoSuchMethodException if an accessor method for this
+681         *  property cannot be found
+682         */
+683        public String getMappedProperty(Object bean,
+684                                               String name, String key)
+685                throws IllegalAccessException, InvocationTargetException,
+686                NoSuchMethodException {
+687    
+688            Object value = getPropertyUtils().getMappedProperty(bean, name, key);
+689            return (getConvertUtils().convert(value));
+690    
+691        }
+692    
+693    
+694        /**
+695         * Return the value of the (possibly nested) property of the specified
+696         * name, for the specified bean, as a String.
+697         *
+698         * @param bean Bean whose property is to be extracted
+699         * @param name Possibly nested name of the property to be extracted
+700         * @return The nested property's value, converted to a String
+701         *
+702         * @exception IllegalAccessException if the caller does not have
+703         *  access to the property accessor method
+704         * @exception IllegalArgumentException if a nested reference to a
+705         *  property returns null
+706         * @exception InvocationTargetException if the property accessor method
+707         *  throws an exception
+708         * @exception NoSuchMethodException if an accessor method for this
+709         *  property cannot be found
+710         */
+711        public String getNestedProperty(Object bean, String name)
+712                throws IllegalAccessException, InvocationTargetException,
+713                NoSuchMethodException {
+714    
+715            Object value = getPropertyUtils().getNestedProperty(bean, name);
+716            return (getConvertUtils().convert(value));
+717    
+718        }
+719    
+720    
+721        /**
+722         * Return the value of the specified property of the specified bean,
+723         * no matter which property reference format is used, as a String.
+724         *
+725         * @param bean Bean whose property is to be extracted
+726         * @param name Possibly indexed and/or nested name of the property
+727         *  to be extracted
+728         * @return The property's value, converted to a String
+729         *
+730         * @exception IllegalAccessException if the caller does not have
+731         *  access to the property accessor method
+732         * @exception InvocationTargetException if the property accessor method
+733         *  throws an exception
+734         * @exception NoSuchMethodException if an accessor method for this
+735         *  property cannot be found
+736         */
+737        public String getProperty(Object bean, String name)
+738                throws IllegalAccessException, InvocationTargetException,
+739                NoSuchMethodException {
+740    
+741            return (getNestedProperty(bean, name));
+742    
+743        }
+744    
+745    
+746        /**
+747         * Return the value of the specified simple property of the specified
+748         * bean, converted to a String.
+749         *
+750         * @param bean Bean whose property is to be extracted
+751         * @param name Name of the property to be extracted
+752         * @return The property's value, converted to a String
+753         *
+754         * @exception IllegalAccessException if the caller does not have
+755         *  access to the property accessor method
+756         * @exception InvocationTargetException if the property accessor method
+757         *  throws an exception
+758         * @exception NoSuchMethodException if an accessor method for this
+759         *  property cannot be found
+760         */
+761        public String getSimpleProperty(Object bean, String name)
+762                throws IllegalAccessException, InvocationTargetException,
+763                NoSuchMethodException {
+764    
+765            Object value = getPropertyUtils().getSimpleProperty(bean, name);
+766            return (getConvertUtils().convert(value));
+767    
+768        }
+769    
+770    
+771        /**
+772         * <p>Populate the JavaBeans properties of the specified bean, based on
+773         * the specified name/value pairs.  This method uses Java reflection APIs
+774         * to identify corresponding "property setter" method names, and deals
+775         * with setter arguments of type <code>String</code>, <code>boolean</code>,
+776         * <code>int</code>, <code>long</code>, <code>float</code>, and
+777         * <code>double</code>.  In addition, array setters for these types (or the
+778         * corresponding primitive types) can also be identified.</p>
+779         * 
+780         * <p>The particular setter method to be called for each property is
+781         * determined using the usual JavaBeans introspection mechanisms.  Thus,
+782         * you may identify custom setter methods using a BeanInfo class that is
+783         * associated with the class of the bean itself.  If no such BeanInfo
+784         * class is available, the standard method name conversion ("set" plus
+785         * the capitalized name of the property in question) is used.</p>
+786         * 
+787         * <p><strong>NOTE</strong>:  It is contrary to the JavaBeans Specification
+788         * to have more than one setter method (with different argument
+789         * signatures) for the same property.</p>
+790         *
+791         * <p><strong>WARNING</strong> - The logic of this method is customized
+792         * for extracting String-based request parameters from an HTTP request.
+793         * It is probably not what you want for general property copying with
+794         * type conversion.  For that purpose, check out the
+795         * <code>copyProperties()</code> method instead.</p>
+796         *
+797         * @param bean JavaBean whose properties are being populated
+798         * @param properties Map keyed by property name, with the
+799         *  corresponding (String or String[]) value(s) to be set
+800         *
+801         * @exception IllegalAccessException if the caller does not have
+802         *  access to the property accessor method
+803         * @exception InvocationTargetException if the property accessor method
+804         *  throws an exception
+805         */
+806        public void populate(Object bean, Map properties)
+807            throws IllegalAccessException, InvocationTargetException {
+808    
+809            // Do nothing unless both arguments have been specified
+810            if ((bean == null) || (properties == null)) {
+811                return;
+812            }
+813            if (log.isDebugEnabled()) {
+814                log.debug("BeanUtils.populate(" + bean + ", " +
+815                        properties + ")");
+816            }
+817    
+818            // Loop through the property name/value pairs to be set
+819            Iterator entries = properties.entrySet().iterator();
+820            while (entries.hasNext()) {
+821    
+822                // Identify the property name and value(s) to be assigned
+823                Map.Entry entry = (Map.Entry)entries.next();
+824                String name = (String) entry.getKey();
+825                if (name == null) {
+826                    continue;
+827                }
+828    
+829                // Perform the assignment for this property
+830                setProperty(bean, name, entry.getValue());
+831    
+832            }
+833    
+834        }
+835    
+836    
+837        /**
+838         * <p>Set the specified property value, performing type conversions as
+839         * required to conform to the type of the destination property.</p>
+840         *
+841         * <p>If the property is read only then the method returns 
+842         * without throwing an exception.</p>
+843         *
+844         * <p>If <code>null</code> is passed into a property expecting a primitive value,
+845         * then this will be converted as if it were a <code>null</code> string.</p>
+846         *
+847         * <p><strong>WARNING</strong> - The logic of this method is customized
+848         * to meet the needs of <code>populate()</code>, and is probably not what
+849         * you want for general property copying with type conversion.  For that
+850         * purpose, check out the <code>copyProperty()</code> method instead.</p>
+851         *
+852         * <p><strong>WARNING</strong> - PLEASE do not modify the behavior of this
+853         * method without consulting with the Struts developer community.  There
+854         * are some subtleties to its functionality that are not documented in the
+855         * Javadoc description above, yet are vital to the way that Struts utilizes
+856         * this method.</p>
+857         *
+858         * @param bean Bean on which setting is to be performed
+859         * @param name Property name (can be nested/indexed/mapped/combo)
+860         * @param value Value to be set
+861         *
+862         * @exception IllegalAccessException if the caller does not have
+863         *  access to the property accessor method
+864         * @exception InvocationTargetException if the property accessor method
+865         *  throws an exception
+866         */
+867        public void setProperty(Object bean, String name, Object value)
+868            throws IllegalAccessException, InvocationTargetException {
+869    
+870            // Trace logging (if enabled)
+871            if (log.isTraceEnabled()) {
+872                StringBuffer sb = new StringBuffer("  setProperty(");
+873                sb.append(bean);
+874                sb.append(", ");
+875                sb.append(name);
+876                sb.append(", ");
+877                if (value == null) {
+878                    sb.append("<NULL>");
+879                } else if (value instanceof String) {
+880                    sb.append((String) value);
+881                } else if (value instanceof String[]) {
+882                    String[] values = (String[]) value;
+883                    sb.append('[');
+884                    for (int i = 0; i < values.length; i++) {
+885                        if (i > 0) {
+886                            sb.append(',');
+887                        }
+888                        sb.append(values[i]);
+889                    }
+890                    sb.append(']');
+891                } else {
+892                    sb.append(value.toString());
+893                }
+894                sb.append(')');
+895                log.trace(sb.toString());
+896            }
+897    
+898            // Resolve any nested expression to get the actual target bean
+899            Object target = bean;
+900            Resolver resolver = getPropertyUtils().getResolver();
+901            while (resolver.hasNested(name)) {
+902                try {
+903                    target = getPropertyUtils().getProperty(target, resolver.next(name));
+904                    name = resolver.remove(name);
+905                } catch (NoSuchMethodException e) {
+906                    return; // Skip this property setter
+907                }
+908            }
+909            if (log.isTraceEnabled()) {
+910                log.trace("    Target bean = " + target);
+911                log.trace("    Target name = " + name);
+912            }
+913    
+914            // Declare local variables we will require
+915            String propName = resolver.getProperty(name); // Simple name of target property
+916            Class type = null;                            // Java type of target property
+917            int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
+918            String key = resolver.getKey(name);           // Mapped key value (if any)
+919    
+920            // Calculate the property type
+921            if (target instanceof DynaBean) {
+922                DynaClass dynaClass = ((DynaBean) target).getDynaClass();
+923                DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);
+924                if (dynaProperty == null) {
+925                    return; // Skip this property setter
+926                }
+927                type = dynaProperty.getType();
+928            } else if (target instanceof Map) {
+929                type = Object.class;
+930            } else if (target != null && target.getClass().isArray() && index >= 0) {
+931                type = Array.get(target, index).getClass();
+932            } else {
+933                PropertyDescriptor descriptor = null;
+934                try {
+935                    descriptor =
+936                        getPropertyUtils().getPropertyDescriptor(target, name);
+937                    if (descriptor == null) {
+938                        return; // Skip this property setter
+939                    }
+940                } catch (NoSuchMethodException e) {
+941                    return; // Skip this property setter
+942                }
+943                if (descriptor instanceof MappedPropertyDescriptor) {
+944                    if (((MappedPropertyDescriptor) descriptor).getMappedWriteMethod() == null) {
+945                        if (log.isDebugEnabled()) {
+946                            log.debug("Skipping read-only property");
+947                        }
+948                        return; // Read-only, skip this property setter
+949                    }
+950                    type = ((MappedPropertyDescriptor) descriptor).
+951                        getMappedPropertyType();
+952                } else if (index >= 0 && descriptor instanceof IndexedPropertyDescriptor) {
+953                    if (((IndexedPropertyDescriptor) descriptor).getIndexedWriteMethod() == null) {
+954                        if (log.isDebugEnabled()) {
+955                            log.debug("Skipping read-only property");
+956                        }
+957                        return; // Read-only, skip this property setter
+958                    }
+959                    type = ((IndexedPropertyDescriptor) descriptor).
+960                        getIndexedPropertyType();
+961                } else if (key != null) {
+962                    if (descriptor.getReadMethod() == null) {
+963                        if (log.isDebugEnabled()) {
+964                            log.debug("Skipping read-only property");
+965                        }
+966                        return; // Read-only, skip this property setter
+967                    }
+968                    type = (value == null) ? Object.class : value.getClass();
+969                } else {
+970                    if (descriptor.getWriteMethod() == null) {
+971                        if (log.isDebugEnabled()) {
+972                            log.debug("Skipping read-only property");
+973                        }
+974                        return; // Read-only, skip this property setter
+975                    }
+976                    type = descriptor.getPropertyType();
+977                }
+978            }
+979    
+980            // Convert the specified value to the required type
+981            Object newValue = null;
+982            if (type.isArray() && (index < 0)) { // Scalar value into array
+983                if (value == null) {
+984                    String[] values = new String[1];
+985                    values[0] = null;
+986                    newValue = getConvertUtils().convert(values, type);
+987                } else if (value instanceof String) {
+988                    newValue = getConvertUtils().convert(value, type);
+989                } else if (value instanceof String[]) {
+990                    newValue = getConvertUtils().convert((String[]) value, type);
+991                } else {
+992                    newValue = convert(value, type);
+993                }
+994            } else if (type.isArray()) {         // Indexed value into array
+995                if (value instanceof String || value == null) {
+996                    newValue = getConvertUtils().convert((String) value,
+997                                                    type.getComponentType());
+998                } else if (value instanceof String[]) {
+999                    newValue = getConvertUtils().convert(((String[]) value)[0],
+1000                                                    type.getComponentType());
+1001                } else {
+1002                    newValue = convert(value, type.getComponentType());
+1003                }
+1004            } else {                             // Value into scalar
+1005                if (value instanceof String) {
+1006                    newValue = getConvertUtils().convert((String) value, type);
+1007                } else if (value instanceof String[]) {
+1008                    newValue = getConvertUtils().convert(((String[]) value)[0],
+1009                                                    type);
+1010                } else {
+1011                    newValue = convert(value, type);
+1012                }
+1013            }
+1014    
+1015            // Invoke the setter method
+1016            try {
+1017              getPropertyUtils().setProperty(target, name, newValue);
+1018            } catch (NoSuchMethodException e) {
+1019                throw new InvocationTargetException
+1020                    (e, "Cannot set " + propName);
+1021            }
+1022    
+1023        }
+1024        
+1025        /** 
+1026         * Gets the <code>ConvertUtilsBean</code> instance used to perform the conversions.
+1027         *
+1028         * @return The ConvertUtils bean instance
+1029         */
+1030        public ConvertUtilsBean getConvertUtils() {
+1031            return convertUtilsBean;
+1032        }
+1033        
+1034        /**
+1035         * Gets the <code>PropertyUtilsBean</code> instance used to access properties.
+1036         *
+1037         * @return The ConvertUtils bean instance
+1038         */
+1039        public PropertyUtilsBean getPropertyUtils() {
+1040            return propertyUtilsBean;
+1041        }
+1042    
+1043        /** 
+1044         * If we're running on JDK 1.4 or later, initialize the cause for the given throwable.
+1045         * 
+1046         * @param  throwable The throwable.
+1047         * @param  cause     The cause of the throwable.
+1048         * @return  true if the cause was initialized, otherwise false.
+1049         * @since 1.8.0
+1050         */
+1051        public boolean initCause(Throwable throwable, Throwable cause) {
+1052            if (INIT_CAUSE_METHOD != null && cause != null) {
+1053                try {
+1054                    INIT_CAUSE_METHOD.invoke(throwable, new Object[] { cause });
+1055                    return true;
+1056                } catch (Throwable e) {
+1057                    return false; // can't initialize cause
+1058                }
+1059            }
+1060            return false;
+1061        }
+1062    
+1063        /**
+1064         * <p>Convert the value to an object of the specified class (if
+1065         * possible).</p>
+1066         *
+1067         * @param value Value to be converted (may be null)
+1068         * @param type Class of the value to be converted to
+1069         * @return The converted value
+1070         *
+1071         * @exception ConversionException if thrown by an underlying Converter
+1072         * @since 1.8.0
+1073         */
+1074        protected Object convert(Object value, Class type) {
+1075            Converter converter = getConvertUtils().lookup(type);
+1076            if (converter != null) {
+1077                log.trace("        USING CONVERTER " + converter);
+1078                return converter.convert(type, value);
+1079            } else {
+1080                return value;
+1081            }
+1082        }
+1083    
+1084        /**
+1085         * Returns a <code>Method<code> allowing access to
+1086         * {@link Throwable#initCause(Throwable)} method of {@link Throwable},
+1087         * or <code>null</code> if the method
+1088         * does not exist.
+1089         * 
+1090         * @return A <code>Method<code> for <code>Throwable.initCause</code>, or
+1091         * <code>null</code> if unavailable.
+1092         */ 
+1093        private static Method getInitCauseMethod() {
+1094            try {
+1095                Class[] paramsClasses = new Class[] { Throwable.class };
+1096                return Throwable.class.getMethod("initCause", paramsClasses);
+1097            } catch (NoSuchMethodException e) {
+1098                Log log = LogFactory.getLog(BeanUtils.class);
+1099                if (log.isWarnEnabled()) {
+1100                    log.warn("Throwable does not have initCause() method in JDK 1.3");
+1101                }
+1102                return null;
+1103            } catch (Throwable e) {
+1104                Log log = LogFactory.getLog(BeanUtils.class);
+1105                if (log.isWarnEnabled()) {
+1106                    log.warn("Error getting the Throwable initCause() method", e);
+1107                }
+1108                return null;
+1109            }
+1110        }
+1111    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean2.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean2.html new file mode 100644 index 0000000..6232094 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/BeanUtilsBean2.html @@ -0,0 +1,141 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    /**
+020     * <p>{@link BeanUtilsBean} implementation that creates a
+021     * {@link ConvertUtilsBean2} and delegates conversion to
+022     * {@link ConvertUtilsBean#convert(Object, Class)}.
+023     * </p>
+024     *
+025     * <p>
+026     * To configure this implementation for the current context ClassLoader invoke
+027     * <code>BeanUtilsBean.setInstance(new BeanUtilsBean2());</code>
+028     * </p>
+029     *
+030     * <p>
+031     * BeanUtils 1.7.0 delegated all conversion to String to the converter
+032     * registered for the <code>String.class</code>. One of the improvements in
+033     * BeanUtils 1.8.0 was to upgrade the {@link Converter} implementations so
+034     * that they could handle conversion to String for their type (e.g.
+035     * IntegerConverter now handles conversion from an Integer to a String as
+036     * well as String to Integer).
+037     * </p>
+038     *
+039     * <p>
+040     * In order to take advantage of these improvements BeanUtils needs to change
+041     * how it gets the appropriate {@link Converter}. This functionality has been
+042     * implemented in the new {@link ConvertUtilsBean#lookup(Class, Class)} and
+043     * {@link ConvertUtilsBean#convert(Object, Class)} methods. However changing
+044     * {@link BeanUtilsBean} to use these methods could create compatibility
+045     * issues for existing users. In order to avoid that, this new
+046     * {@link BeanUtilsBean} implementation has been created (and the associated
+047     * {@link ConvertUtilsBean2}).
+048     * </p>
+049     *
+050     * @see ConvertUtilsBean2
+051     * @version $Revision: 552381 $ $Date: 2007-07-02 03:00:17 +0100 (Mon, 02 Jul 2007) $
+052     * @since 1.8.0
+053     */
+054    public class BeanUtilsBean2 extends BeanUtilsBean {
+055    
+056        /**
+057         * <p>Constructs an instance using new property
+058         * and conversion instances.</p>
+059         */
+060        public BeanUtilsBean2() {
+061            super(new ConvertUtilsBean2());
+062        }
+063    
+064        /**
+065         * <p>Convert the value to an object of the specified class (if
+066         * possible).</p>
+067         *
+068         * @param value Value to be converted (may be null)
+069         * @param type Class of the value to be converted to
+070         * @return The converted value
+071         */
+072        protected Object convert(Object value, Class type) {
+073            return getConvertUtils().convert(value, type);
+074        }
+075    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConstructorUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConstructorUtils.html new file mode 100644 index 0000000..c8ae137 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConstructorUtils.html @@ -0,0 +1,502 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    import java.lang.reflect.Constructor;
+021    import java.lang.reflect.InvocationTargetException;
+022    import java.lang.reflect.Modifier;
+023    
+024    /**
+025     * <p> Utility reflection methods focussed on constructors, modelled after {@link MethodUtils}. </p>
+026     *
+027     * <h3>Known Limitations</h3>
+028     * <h4>Accessing Public Constructors In A Default Access Superclass</h4>
+029     * <p>There is an issue when invoking public constructors contained in a default access superclass.
+030     * Reflection locates these constructors fine and correctly assigns them as public.
+031     * However, an <code>IllegalAccessException</code> is thrown if the constructors is invoked.</p>
+032     *
+033     * <p><code>ConstructorUtils</code> contains a workaround for this situation.
+034     * It will attempt to call <code>setAccessible</code> on this constructor.
+035     * If this call succeeds, then the method can be invoked as normal.
+036     * This call will only succeed when the application has sufficient security privilages.
+037     * If this call fails then a warning will be logged and the method may fail.</p>
+038     *
+039     * @author Craig R. McClanahan
+040     * @author Ralph Schaer
+041     * @author Chris Audley
+042     * @author Rey Francois
+043     * @author Gregor Rayman
+044     * @author Jan Sorensen
+045     * @author Robert Burrell Donkin
+046     * @author Rodney Waldhoff
+047     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+048     */
+049    public class ConstructorUtils {
+050    
+051        // --------------------------------------------------------- Private Members
+052        /** An empty class array */
+053        private static final Class[] EMPTY_CLASS_PARAMETERS = new Class[0];
+054        /** An empty object array */
+055        private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+056    
+057        // --------------------------------------------------------- Public Methods
+058    
+059        /**
+060         * <p>Convenience method returning new instance of <code>klazz</code> using a single argument constructor.
+061         * The formal parameter type is inferred from the actual values of <code>arg</code>.
+062         * See {@link #invokeExactConstructor(Class, Object[], Class[])} for more details.</p>
+063         *
+064         * <p>The signatures should be assignment compatible.</p>
+065         *
+066         * @param klass the class to be constructed.
+067         * @param arg the actual argument
+068         * @return new instance of <code>klazz</code>
+069         *
+070         * @throws NoSuchMethodException If the constructor cannot be found
+071         * @throws IllegalAccessException If an error occurs accessing the constructor
+072         * @throws InvocationTargetException If an error occurs invoking the constructor
+073         * @throws InstantiationException If an error occurs instantiating the class
+074         *
+075         * @see #invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+076         */
+077        public static Object invokeConstructor(Class klass, Object arg)
+078            throws
+079                NoSuchMethodException,
+080                IllegalAccessException,
+081                InvocationTargetException,
+082                InstantiationException {
+083    
+084            Object[] args = { arg };
+085            return invokeConstructor(klass, args);
+086    
+087        }
+088    
+089        /**
+090         * <p>Returns new instance of <code>klazz</code> created using the actual arguments <code>args</code>.
+091         * The formal parameter types are inferred from the actual values of <code>args</code>.
+092         * See {@link #invokeExactConstructor(Class, Object[], Class[])} for more details.</p>
+093         *
+094         * <p>The signatures should be assignment compatible.</p>
+095         *
+096         * @param klass the class to be constructed.
+097         * @param args actual argument array
+098         * @return new instance of <code>klazz</code>
+099         *
+100         * @throws NoSuchMethodException If the constructor cannot be found
+101         * @throws IllegalAccessException If an error occurs accessing the constructor
+102         * @throws InvocationTargetException If an error occurs invoking the constructor
+103         * @throws InstantiationException If an error occurs instantiating the class
+104         *
+105         * @see #invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+106         */
+107        public static Object invokeConstructor(Class klass, Object[] args)
+108            throws
+109                NoSuchMethodException,
+110                IllegalAccessException,
+111                InvocationTargetException,
+112                InstantiationException {
+113    
+114            if (null == args) {
+115                args = EMPTY_OBJECT_ARRAY;
+116            }
+117            int arguments = args.length;
+118            Class parameterTypes[] = new Class[arguments];
+119            for (int i = 0; i < arguments; i++) {
+120                parameterTypes[i] = args[i].getClass();
+121            }
+122            return invokeConstructor(klass, args, parameterTypes);
+123    
+124        }
+125    
+126        /**
+127         * <p>Returns new instance of <code>klazz</code> created using constructor
+128         * with signature <code>parameterTypes</code> and actual arguments <code>args</code>.</p>
+129         *
+130         * <p>The signatures should be assignment compatible.</p>
+131         *
+132         * @param klass the class to be constructed.
+133         * @param args actual argument array
+134         * @param parameterTypes parameter types array
+135         * @return new instance of <code>klazz</code>
+136         *
+137         * @throws NoSuchMethodException if matching constructor cannot be found
+138         * @throws IllegalAccessException thrown on the constructor's invocation
+139         * @throws InvocationTargetException thrown on the constructor's invocation
+140         * @throws InstantiationException thrown on the constructor's invocation
+141         * @see Constructor#newInstance
+142         */
+143        public static Object invokeConstructor(
+144            Class klass,
+145            Object[] args,
+146            Class[] parameterTypes)
+147            throws
+148                NoSuchMethodException,
+149                IllegalAccessException,
+150                InvocationTargetException,
+151                InstantiationException {
+152    
+153            if (parameterTypes == null) {
+154                parameterTypes = EMPTY_CLASS_PARAMETERS;
+155            }
+156            if (args == null) {
+157                args = EMPTY_OBJECT_ARRAY;
+158            }
+159    
+160            Constructor ctor =
+161                getMatchingAccessibleConstructor(klass, parameterTypes);
+162            if (null == ctor) {
+163                throw new NoSuchMethodException(
+164                    "No such accessible constructor on object: " + klass.getName());
+165            }
+166            return ctor.newInstance(args);
+167        }
+168    
+169    
+170        /**
+171         * <p>Convenience method returning new instance of <code>klazz</code> using a single argument constructor.
+172         * The formal parameter type is inferred from the actual values of <code>arg</code>.
+173         * See {@link #invokeExactConstructor(Class, Object[], Class[])} for more details.</p>
+174         *
+175         * <p>The signatures should match exactly.</p>
+176         *
+177         * @param klass the class to be constructed.
+178         * @param arg the actual argument
+179         * @return new instance of <code>klazz</code>
+180         *
+181         * @throws NoSuchMethodException If the constructor cannot be found
+182         * @throws IllegalAccessException If an error occurs accessing the constructor
+183         * @throws InvocationTargetException If an error occurs invoking the constructor
+184         * @throws InstantiationException If an error occurs instantiating the class
+185         *
+186         * @see #invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+187         */
+188        public static Object invokeExactConstructor(Class klass, Object arg)
+189            throws
+190                NoSuchMethodException,
+191                IllegalAccessException,
+192                InvocationTargetException,
+193                InstantiationException {
+194    
+195            Object[] args = { arg };
+196            return invokeExactConstructor(klass, args);
+197    
+198        }
+199    
+200        /**
+201         * <p>Returns new instance of <code>klazz</code> created using the actual arguments <code>args</code>.
+202         * The formal parameter types are inferred from the actual values of <code>args</code>.
+203         * See {@link #invokeExactConstructor(Class, Object[], Class[])} for more details.</p>
+204         *
+205         * <p>The signatures should match exactly.</p>
+206         *
+207         * @param klass the class to be constructed.
+208         * @param args actual argument array
+209         * @return new instance of <code>klazz</code>
+210         *
+211         * @throws NoSuchMethodException If the constructor cannot be found
+212         * @throws IllegalAccessException If an error occurs accessing the constructor
+213         * @throws InvocationTargetException If an error occurs invoking the constructor
+214         * @throws InstantiationException If an error occurs instantiating the class
+215         *
+216         * @see #invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
+217         */
+218        public static Object invokeExactConstructor(Class klass, Object[] args)
+219            throws
+220                NoSuchMethodException,
+221                IllegalAccessException,
+222                InvocationTargetException,
+223                InstantiationException {
+224            if (null == args) {
+225                args = EMPTY_OBJECT_ARRAY;
+226            }
+227            int arguments = args.length;
+228            Class parameterTypes[] = new Class[arguments];
+229            for (int i = 0; i < arguments; i++) {
+230                parameterTypes[i] = args[i].getClass();
+231            }
+232            return invokeExactConstructor(klass, args, parameterTypes);
+233    
+234        }
+235    
+236        /**
+237         * <p>Returns new instance of <code>klazz</code> created using constructor
+238         * with signature <code>parameterTypes</code> and actual arguments
+239         * <code>args</code>.</p>
+240         *
+241         * <p>The signatures should match exactly.</p>
+242         *
+243         * @param klass the class to be constructed.
+244         * @param args actual argument array
+245         * @param parameterTypes parameter types array
+246         * @return new instance of <code>klazz</code>
+247         *
+248         * @throws NoSuchMethodException if matching constructor cannot be found
+249         * @throws IllegalAccessException thrown on the constructor's invocation
+250         * @throws InvocationTargetException thrown on the constructor's invocation
+251         * @throws InstantiationException thrown on the constructor's invocation
+252         * @see Constructor#newInstance
+253         */
+254        public static Object invokeExactConstructor(
+255            Class klass,
+256            Object[] args,
+257            Class[] parameterTypes)
+258            throws
+259                NoSuchMethodException,
+260                IllegalAccessException,
+261                InvocationTargetException,
+262                InstantiationException {
+263    
+264            if (args == null) {
+265                args = EMPTY_OBJECT_ARRAY;
+266            }
+267    
+268            if (parameterTypes == null) {
+269                parameterTypes = EMPTY_CLASS_PARAMETERS;
+270            }
+271    
+272            Constructor ctor = getAccessibleConstructor(klass, parameterTypes);
+273            if (null == ctor) {
+274                throw new NoSuchMethodException(
+275                    "No such accessible constructor on object: " + klass.getName());
+276            }
+277            return ctor.newInstance(args);
+278    
+279        }
+280    
+281        /**
+282         * Returns a constructor with single argument.
+283         * @param klass the class to be constructed
+284         * @param parameterType The constructor parameter type
+285         * @return null if matching accessible constructor can not be found.
+286         * @see Class#getConstructor
+287         * @see #getAccessibleConstructor(java.lang.reflect.Constructor)
+288         */
+289        public static Constructor getAccessibleConstructor(
+290            Class klass,
+291            Class parameterType) {
+292    
+293            Class[] parameterTypes = { parameterType };
+294            return getAccessibleConstructor(klass, parameterTypes);
+295    
+296        }
+297    
+298        /**
+299         * Returns a constructor given a class and signature.
+300         * @param klass the class to be constructed
+301         * @param parameterTypes the parameter array
+302         * @return null if matching accessible constructor can not be found
+303         * @see Class#getConstructor
+304         * @see #getAccessibleConstructor(java.lang.reflect.Constructor)
+305         */
+306        public static Constructor getAccessibleConstructor(
+307            Class klass,
+308            Class[] parameterTypes) {
+309    
+310            try {
+311                return getAccessibleConstructor(
+312                    klass.getConstructor(parameterTypes));
+313            } catch (NoSuchMethodException e) {
+314                return (null);
+315            }
+316    
+317        }
+318    
+319        /**
+320         * Returns accessible version of the given constructor.
+321         * @param ctor prototype constructor object.
+322         * @return <code>null</code> if accessible constructor can not be found.
+323         * @see java.lang.SecurityManager
+324         */
+325        public static Constructor getAccessibleConstructor(Constructor ctor) {
+326    
+327            // Make sure we have a method to check
+328            if (ctor == null) {
+329                return (null);
+330            }
+331    
+332            // If the requested method is not public we cannot call it
+333            if (!Modifier.isPublic(ctor.getModifiers())) {
+334                return (null);
+335            }
+336    
+337            // If the declaring class is public, we are done
+338            Class clazz = ctor.getDeclaringClass();
+339            if (Modifier.isPublic(clazz.getModifiers())) {
+340                return (ctor);
+341            }
+342    
+343            // what else can we do?
+344            return null;
+345    
+346        }
+347    
+348        // -------------------------------------------------------- Private Methods
+349        /**
+350         * <p>Find an accessible constructor with compatible parameters.
+351         * Compatible parameters mean that every method parameter is assignable from
+352         * the given parameters. In other words, it finds constructor that will take
+353         * the parameters given.</p>
+354         *
+355         * <p>First it checks if there is constructor matching the exact signature.
+356         * If no such, all the constructors of the class are tested if their signatures
+357         * are assignment compatible with the parameter types.
+358         * The first matching constructor is returned.</p>
+359         *
+360         * @param clazz find constructor for this class
+361         * @param parameterTypes find method with compatible parameters
+362         * @return a valid Constructor object. If there's no matching constructor, returns <code>null</code>.
+363         */
+364        private static Constructor getMatchingAccessibleConstructor(
+365            Class clazz,
+366            Class[] parameterTypes) {
+367            // see if we can find the method directly
+368            // most of the time this works and it's much faster
+369            try {
+370                Constructor ctor = clazz.getConstructor(parameterTypes);
+371                try {
+372                    //
+373                    // XXX Default access superclass workaround
+374                    //
+375                    // When a public class has a default access superclass
+376                    // with public methods, these methods are accessible.
+377                    // Calling them from compiled code works fine.
+378                    //
+379                    // Unfortunately, using reflection to invoke these methods
+380                    // seems to (wrongly) to prevent access even when the method
+381                    // modifer is public.
+382                    //
+383                    // The following workaround solves the problem but will only
+384                    // work from sufficiently privilages code. 
+385                    //
+386                    // Better workarounds would be greatfully accepted.
+387                    //
+388                    ctor.setAccessible(true);
+389                } catch (SecurityException se) {
+390                    /* SWALLOW, if workaround fails don't fret. */
+391                }
+392                return ctor;
+393    
+394            } catch (NoSuchMethodException e) { /* SWALLOW */
+395            }
+396    
+397            // search through all methods 
+398            int paramSize = parameterTypes.length;
+399            Constructor[] ctors = clazz.getConstructors();
+400            for (int i = 0, size = ctors.length; i < size; i++) {
+401                // compare parameters
+402                Class[] ctorParams = ctors[i].getParameterTypes();
+403                int ctorParamSize = ctorParams.length;
+404                if (ctorParamSize == paramSize) {
+405                    boolean match = true;
+406                    for (int n = 0; n < ctorParamSize; n++) {
+407                        if (!MethodUtils
+408                            .isAssignmentCompatible(
+409                                ctorParams[n],
+410                                parameterTypes[n])) {
+411                            match = false;
+412                            break;
+413                        }
+414                    }
+415    
+416                    if (match) {
+417                        // get accessible version of method
+418                        Constructor ctor = getAccessibleConstructor(ctors[i]);
+419                        if (ctor != null) {
+420                            try {
+421                                ctor.setAccessible(true);
+422                            } catch (SecurityException se) {
+423                                /* Swallow SecurityException
+424                                 * TODO: Why?
+425                                 */
+426                            }
+427                            return ctor;
+428                        }
+429                    }
+430                }
+431            }
+432    
+433            return null;
+434        }
+435    
+436    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ContextClassLoaderLocal.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ContextClassLoaderLocal.html new file mode 100644 index 0000000..a794797 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ContextClassLoaderLocal.html @@ -0,0 +1,282 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils;
+019    
+020    import java.util.Map;
+021    import java.util.WeakHashMap;
+022    
+023    /**
+024     * An instance of this class represents a value that is provided per (thread)
+025     * context classloader.
+026     * 
+027     * <p>Occasionally it is necessary to store data in "global" variables
+028     * (including uses of the Singleton pattern). In applications which have only
+029     * a single classloader such data can simply be stored as "static" members on
+030     * some class. When multiple classloaders are involved, however, this approach
+031     * can fail; in particular, this doesn't work when the code may be run within a
+032     * servlet container or a j2ee container, and the class on which the static
+033     * member is defined is loaded via a "shared" classloader that is visible to all
+034     * components running within the container. This class provides a mechanism for
+035     * associating data with a ClassLoader instance, which ensures that when the
+036     * code runs in such a container each component gets its own copy of the
+037     * "global" variable rather than unexpectedly sharing a single copy of the
+038     * variable with other components that happen to be running in the same
+039     * container at the same time (eg servlets or EJBs.)</p>
+040     *
+041     * <p>This class is strongly patterned after the java.lang.ThreadLocal
+042     * class, which performs a similar task in allowing data to be associated
+043     * with a particular thread.</p>
+044     *
+045     * <p>When code that uses this class is run as a "normal" application, ie
+046     * not within a container, the effect is identical to just using a static 
+047     * member variable to store the data, because Thread.getContextClassLoader
+048     * always returns the same classloader (the system classloader).</p>
+049     *
+050     * <p>Expected usage is as follows:<br>
+051     * <pre>
+052     *  public class SomeClass {
+053     *    private static final ContextClassLoaderLocal global 
+054     *      = new ContextClassLoaderLocal() {
+055     *          protected Object initialValue() {
+056     *              return new String("Initial value");
+057     *          };
+058     *
+059     *    public void testGlobal() {
+060     *      String s = (String) global.get();
+061     *      System.out.println("global value:" + s);
+062     *      buf.set("New Value");
+063     *    }
+064     * </pre>
+065     * </p>
+066     *
+067     * <p><strong>Note:</strong> This class takes some care to ensure that when
+068     * a component which uses this class is "undeployed" by a container the
+069     * component-specific classloader and all its associated classes (and their
+070     * static variables) are garbage-collected. Unfortunately there is one
+071     * scenario in which this does <i>not</i> work correctly and there
+072     * is unfortunately no known workaround other than ensuring that the
+073     * component (or its container) calls the "unset" method on this class for
+074     * each instance of this class when the component is undeployed. The problem
+075     * occurs if:
+076     * <ul>
+077     * <li>the class containing a static instance of this class was loaded via
+078     * a shared classloader, and</li>
+079     * <li>the value stored in the instance is an object whose class was loaded
+080     * via the component-specific classloader (or any of the objects it refers
+081     * to were loaded via that classloader).</li>
+082     * </ul>
+083     * The result is that the map managed by this object still contains a strong
+084     * reference to the stored object, which contains a strong reference to the
+085     * classloader that loaded it, meaning that although the container has
+086     * "undeployed" the component the component-specific classloader and all the
+087     * related classes and static variables cannot be garbage-collected. This is
+088     * not expected to be an issue with the commons-beanutils library as the only
+089     * classes which use this class are BeanUtilsBean and ConvertUtilsBean and
+090     * there is no obvious reason for a user of the beanutils library to subclass
+091     * either of those classes.</p>
+092     *
+093     * <p><strong>Note:</strong> A WeakHashMap bug in several 1.3 JVMs results in 
+094     * a memory leak for those JVMs.</p>
+095     *
+096     * <p><strong>Note:</strong> Of course all of this would be unnecessary if
+097     * containers required each component to load the full set of classes it
+098     * needs, ie avoided providing classes loaded via a "shared" classloader.</p>
+099     * 
+100     * @see java.lang.Thread#getContextClassLoader  
+101     * @author Eric Pabst
+102     */
+103    public class ContextClassLoaderLocal {
+104        private Map valueByClassLoader = new WeakHashMap();
+105        private boolean globalValueInitialized = false;
+106        private Object globalValue;
+107    
+108        /**
+109         * Construct a context classloader instance
+110         */
+111        public ContextClassLoaderLocal() {
+112            super();
+113        }
+114    
+115        /**
+116         * Returns the initial value for this ContextClassLoaderLocal
+117         * variable. This method will be called once per Context ClassLoader for
+118         * each ContextClassLoaderLocal, the first time it is accessed 
+119         * with get or set.  If the programmer desires ContextClassLoaderLocal variables
+120         * to be initialized to some value other than null, ContextClassLoaderLocal must
+121         * be subclassed, and this method overridden.  Typically, an anonymous
+122         * inner class will be used.  Typical implementations of initialValue
+123         * will call an appropriate constructor and return the newly constructed
+124         * object.
+125         *
+126         * @return a new Object to be used as an initial value for this ContextClassLoaderLocal
+127         */
+128        protected Object initialValue() {
+129            return null;
+130        }
+131    
+132        /** 
+133         * Gets the instance which provides the functionality for {@link BeanUtils}.
+134         * This is a pseudo-singleton - an single instance is provided per (thread) context classloader.
+135         * This mechanism provides isolation for web apps deployed in the same container. 
+136         * @return the object currently associated with the context-classloader of the current thread. 
+137         */
+138        public synchronized Object get() {
+139            // synchronizing the whole method is a bit slower 
+140            // but guarantees no subtle threading problems, and there's no 
+141            // need to synchronize valueByClassLoader
+142            
+143            // make sure that the map is given a change to purge itself
+144            valueByClassLoader.isEmpty();
+145            try {
+146                
+147                ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+148                if (contextClassLoader != null) {
+149                    
+150                    Object value = valueByClassLoader.get(contextClassLoader);
+151                    if ((value == null) 
+152                    && !valueByClassLoader.containsKey(contextClassLoader)) {
+153                        value = initialValue();
+154                        valueByClassLoader.put(contextClassLoader, value);
+155                    }
+156                    return value;
+157                    
+158                }
+159                
+160            } catch (SecurityException e) { /* SWALLOW - should we log this? */ }
+161            
+162            // if none or exception, return the globalValue 
+163            if (!globalValueInitialized) {
+164                globalValue = initialValue();
+165                globalValueInitialized = true;
+166            }//else already set
+167            return globalValue;
+168        }
+169    
+170        /** 
+171         * Sets the value - a value is provided per (thread) context classloader.
+172         * This mechanism provides isolation for web apps deployed in the same container. 
+173         * 
+174         * @param value the object to be associated with the entrant thread's context classloader
+175         */
+176        public synchronized void set(Object value) {
+177            // synchronizing the whole method is a bit slower 
+178            // but guarentees no subtle threading problems
+179            
+180            // make sure that the map is given a change to purge itself
+181            valueByClassLoader.isEmpty();
+182            try {
+183                
+184                ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+185                if (contextClassLoader != null) {
+186                    valueByClassLoader.put(contextClassLoader, value);
+187                    return;
+188                }
+189                
+190            } catch (SecurityException e) { /* SWALLOW - should we log this? */ }
+191            
+192            // if in doubt, set the global value
+193            globalValue = value;
+194            globalValueInitialized = true;
+195        }
+196        
+197        /** 
+198         * Unsets the value associated with the current thread's context classloader
+199         */
+200        public synchronized void unset() {    
+201            try {
+202            
+203                ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+204                unset(contextClassLoader);
+205                
+206            } catch (SecurityException e) { /* SWALLOW - should we log this? */ }
+207        }
+208        
+209        /** 
+210         * Unsets the value associated with the given classloader
+211         * @param classLoader The classloader to <i>unset</i> for
+212         */
+213        public synchronized void unset(ClassLoader classLoader) {    
+214            valueByClassLoader.remove(classLoader);
+215        }    
+216    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConversionException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConversionException.html new file mode 100644 index 0000000..951eafc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConversionException.html @@ -0,0 +1,160 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    /**
+023     * <p>A <strong>ConversionException</strong> indicates that a call to
+024     * <code>Converter.convert()</code> has failed to complete successfully.
+025     *
+026     * @author Craig McClanahan
+027     * @author Paulo Gaspar
+028     * @since 1.3
+029     */
+030    
+031    public class ConversionException extends RuntimeException {
+032    
+033    
+034        // ----------------------------------------------------------- Constructors
+035    
+036    
+037        /**
+038         * Construct a new exception with the specified message.
+039         *
+040         * @param message The message describing this exception
+041         */
+042        public ConversionException(String message) {
+043    
+044            super(message);
+045    
+046        }
+047    
+048    
+049        /**
+050         * Construct a new exception with the specified message and root cause.
+051         *
+052         * @param message The message describing this exception
+053         * @param cause The root cause of this exception
+054         */
+055        public ConversionException(String message, Throwable cause) {
+056    
+057            super(message);
+058            this.cause = cause;
+059    
+060        }
+061    
+062    
+063        /**
+064         * Construct a new exception with the specified root cause.
+065         *
+066         * @param cause The root cause of this exception
+067         */
+068        public ConversionException(Throwable cause) {
+069    
+070            super(cause.getMessage());
+071            this.cause = cause;
+072    
+073        }
+074    
+075    
+076        // ------------------------------------------------------------- Properties
+077    
+078    
+079        /**
+080         * The root cause of this <code>ConversionException</code>, compatible with
+081         * JDK 1.4's extensions to <code>java.lang.Throwable</code>.
+082         */
+083        protected Throwable cause = null;
+084    
+085        /**
+086         * Return the root cause of this conversion exception.
+087         * @return the root cause of this conversion exception
+088         */
+089        public Throwable getCause() {
+090            return (this.cause);
+091        }
+092    
+093    
+094    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtils.html new file mode 100644 index 0000000..c870888 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtils.html @@ -0,0 +1,427 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    /**
+022     * <p>Utility methods for converting String scalar values to objects of the
+023     * specified Class, String arrays to arrays of the specified Class.</p>
+024     *
+025     * <p>For more details, see <code>ConvertUtilsBean</code> which provides the
+026     * implementations for these methods.</p>
+027     *
+028     * @author Craig R. McClanahan
+029     * @author Ralph Schaer
+030     * @author Chris Audley
+031     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+032     * @see ConvertUtilsBean
+033     */
+034    
+035    public class ConvertUtils {
+036    
+037    
+038        // ------------------------------------------------------ Static Properties
+039    
+040        /**
+041         * Gets the default value for Boolean conversions.
+042         * @return The default Boolean value
+043         * @deprecated Register replacement converters for Boolean.TYPE and
+044         *  Boolean.class instead
+045         */
+046        public static boolean getDefaultBoolean() {
+047            return (ConvertUtilsBean.getInstance().getDefaultBoolean());
+048        }
+049    
+050        /**
+051         * Sets the default value for Boolean conversions.
+052         * @param newDefaultBoolean The default Boolean value
+053         * @deprecated Register replacement converters for Boolean.TYPE and
+054         *  Boolean.class instead
+055         */
+056        public static void setDefaultBoolean(boolean newDefaultBoolean) {
+057            ConvertUtilsBean.getInstance().setDefaultBoolean(newDefaultBoolean);
+058        }
+059    
+060    
+061        /**
+062         * Gets the default value for Byte conversions.
+063         * @return The default Byte value
+064         * @deprecated Register replacement converters for Byte.TYPE and
+065         *  Byte.class instead
+066         */
+067        public static byte getDefaultByte() {
+068            return ConvertUtilsBean.getInstance().getDefaultByte();
+069        }
+070    
+071        /**
+072         * Sets the default value for Byte conversions.
+073         * @param newDefaultByte The default Byte value
+074         * @deprecated Register replacement converters for Byte.TYPE and
+075         *  Byte.class instead
+076         */
+077        public static void setDefaultByte(byte newDefaultByte) {
+078            ConvertUtilsBean.getInstance().setDefaultByte(newDefaultByte);
+079        }
+080    
+081    
+082        /**
+083         * Gets the default value for Character conversions.
+084         * @return The default Character value
+085         * @deprecated Register replacement converters for Character.TYPE and
+086         *  Character.class instead
+087         */
+088        public static char getDefaultCharacter() {
+089            return ConvertUtilsBean.getInstance().getDefaultCharacter();
+090        }
+091    
+092        /**
+093         * Sets the default value for Character conversions.
+094         * @param newDefaultCharacter The default Character value
+095         * @deprecated Register replacement converters for Character.TYPE and
+096         *  Character.class instead
+097         */
+098        public static void setDefaultCharacter(char newDefaultCharacter) {
+099            ConvertUtilsBean.getInstance().setDefaultCharacter(newDefaultCharacter);
+100        }
+101    
+102    
+103        /**
+104         * Gets the default value for Double conversions.
+105         * @return The default Double value
+106         * @deprecated Register replacement converters for Double.TYPE and
+107         *  Double.class instead
+108         */
+109        public static double getDefaultDouble() {
+110            return ConvertUtilsBean.getInstance().getDefaultDouble();
+111        }
+112    
+113        /**
+114         * Sets the default value for Double conversions.
+115         * @param newDefaultDouble The default Double value
+116         * @deprecated Register replacement converters for Double.TYPE and
+117         *  Double.class instead
+118         */
+119        public static void setDefaultDouble(double newDefaultDouble) {
+120            ConvertUtilsBean.getInstance().setDefaultDouble(newDefaultDouble);
+121        }
+122    
+123    
+124        /**
+125         * Get the default value for Float conversions.
+126         * @return The default Float value
+127         * @deprecated Register replacement converters for Float.TYPE and
+128         *  Float.class instead
+129         */
+130        public static float getDefaultFloat() {
+131            return ConvertUtilsBean.getInstance().getDefaultFloat();
+132        }
+133    
+134        /**
+135         * Sets the default value for Float conversions.
+136         * @param newDefaultFloat The default Float value
+137         * @deprecated Register replacement converters for Float.TYPE and
+138         *  Float.class instead
+139         */
+140        public static void setDefaultFloat(float newDefaultFloat) {
+141            ConvertUtilsBean.getInstance().setDefaultFloat(newDefaultFloat);
+142        }
+143    
+144    
+145        /**
+146         * Gets the default value for Integer conversions.
+147         * @return The default Integer value
+148         * @deprecated Register replacement converters for Integer.TYPE and
+149         *  Integer.class instead
+150         */
+151        public static int getDefaultInteger() {
+152            return ConvertUtilsBean.getInstance().getDefaultInteger();
+153        }
+154    
+155        /**
+156         * Sets the default value for Integer conversions.
+157         * @param newDefaultInteger The default Integer value
+158         * @deprecated Register replacement converters for Integer.TYPE and
+159         *  Integer.class instead
+160         */
+161        public static void setDefaultInteger(int newDefaultInteger) {
+162            ConvertUtilsBean.getInstance().setDefaultInteger(newDefaultInteger);
+163        }
+164    
+165    
+166        /**
+167         * Gets the default value for Long conversions.
+168         * @return The default Long value
+169         * @deprecated Register replacement converters for Long.TYPE and
+170         *  Long.class instead
+171         */
+172        public static long getDefaultLong() {
+173            return (ConvertUtilsBean.getInstance().getDefaultLong());
+174        }
+175    
+176        /**
+177         * Sets the default value for Long conversions.
+178         * @param newDefaultLong The default Long value
+179         * @deprecated Register replacement converters for Long.TYPE and
+180         *  Long.class instead
+181         */
+182        public static void setDefaultLong(long newDefaultLong) {
+183            ConvertUtilsBean.getInstance().setDefaultLong(newDefaultLong);
+184        }
+185    
+186    
+187        /**
+188         * Gets the default value for Short conversions.
+189         * @return The default Short value
+190         * @deprecated Register replacement converters for Short.TYPE and
+191         *  Short.class instead
+192         */
+193        public static short getDefaultShort() {
+194            return ConvertUtilsBean.getInstance().getDefaultShort();
+195        }
+196    
+197        /**
+198         * Sets the default value for Short conversions.
+199         * @param newDefaultShort The default Short value
+200         * @deprecated Register replacement converters for Short.TYPE and
+201         *  Short.class instead
+202         */
+203        public static void setDefaultShort(short newDefaultShort) {
+204            ConvertUtilsBean.getInstance().setDefaultShort(newDefaultShort);
+205        }
+206    
+207        // --------------------------------------------------------- Public Classes
+208    
+209    
+210        /**
+211         * <p>Convert the specified value into a String.</p>
+212         *
+213         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+214         *
+215         * @param value Value to be converted (may be null)
+216         * @return The converted String value
+217         *
+218         * @see ConvertUtilsBean#convert(Object)
+219         */
+220        public static String convert(Object value) {
+221    
+222            return ConvertUtilsBean.getInstance().convert(value);
+223    
+224        }
+225    
+226    
+227        /**
+228         * <p>Convert the specified value to an object of the specified class (if
+229         * possible).  Otherwise, return a String representation of the value.</p>
+230         *
+231         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+232         *
+233         * @param value Value to be converted (may be null)
+234         * @param clazz Java class to be converted to
+235         * @return The converted value
+236         *
+237         * @see ConvertUtilsBean#convert(String, Class)
+238         */
+239        public static Object convert(String value, Class clazz) {
+240    
+241            return ConvertUtilsBean.getInstance().convert(value, clazz);
+242    
+243        }
+244    
+245    
+246        /**
+247         * <p>Convert an array of specified values to an array of objects of the
+248         * specified class (if possible).</p>
+249         *
+250         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+251         *
+252         * @param values Array of values to be converted
+253         * @param clazz Java array or element class to be converted to
+254         * @return The converted value
+255         *
+256         * @see ConvertUtilsBean#convert(String[], Class)
+257         */
+258        public static Object convert(String[] values, Class clazz) {
+259    
+260      return ConvertUtilsBean.getInstance().convert(values, clazz);
+261    
+262        }
+263    
+264        /**
+265         * <p>Convert the value to an object of the specified class (if
+266         * possible).</p>
+267         *
+268         * @param value Value to be converted (may be null)
+269         * @param targetType Class of the value to be converted to
+270         * @return The converted value
+271         *
+272         * @exception ConversionException if thrown by an underlying Converter
+273         */
+274        public static Object convert(Object value, Class targetType) {
+275    
+276            return ConvertUtilsBean.getInstance().convert(value, targetType);
+277    
+278        }
+279    
+280        /**
+281         * <p>Remove all registered {@link Converter}s, and re-establish the
+282         * standard Converters.</p>
+283         *
+284         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+285         *
+286         * @see ConvertUtilsBean#deregister()
+287         */
+288        public static void deregister() {
+289    
+290            ConvertUtilsBean.getInstance().deregister();
+291    
+292        }
+293    
+294    
+295        /**
+296         * <p>Remove any registered {@link Converter} for the specified destination
+297         * <code>Class</code>.</p>
+298         *
+299         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+300         *
+301         * @param clazz Class for which to remove a registered Converter
+302         * @see ConvertUtilsBean#deregister(Class)
+303         */
+304        public static void deregister(Class clazz) {
+305    
+306            ConvertUtilsBean.getInstance().deregister(clazz);
+307    
+308        }
+309    
+310    
+311        /**
+312         * <p>Look up and return any registered {@link Converter} for the specified
+313         * destination class; if there is no registered Converter, return
+314         * <code>null</code>.</p>
+315         *
+316         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+317         *
+318         * @param clazz Class for which to return a registered Converter
+319         * @return The registered {@link Converter} or <code>null</code> if not found
+320         * @see ConvertUtilsBean#lookup(Class)
+321         */
+322        public static Converter lookup(Class clazz) {
+323    
+324            return ConvertUtilsBean.getInstance().lookup(clazz);
+325    
+326        }
+327    
+328        /**
+329         * Look up and return any registered {@link Converter} for the specified
+330         * source and destination class; if there is no registered Converter,
+331         * return <code>null</code>.
+332         *
+333         * @param sourceType Class of the value being converted
+334         * @param targetType Class of the value to be converted to
+335         * @return The registered {@link Converter} or <code>null</code> if not found
+336         */
+337        public static Converter lookup(Class sourceType, Class targetType) {
+338    
+339            return ConvertUtilsBean.getInstance().lookup(sourceType, targetType);
+340    
+341        }
+342    
+343        /**
+344         * <p>Register a custom {@link Converter} for the specified destination
+345         * <code>Class</code>, replacing any previously registered Converter.</p>
+346         *
+347         * <p>For more details see <code>ConvertUtilsBean</code>.</p>
+348         *
+349         * @param converter Converter to be registered
+350         * @param clazz Destination class for conversions performed by this
+351         *  Converter
+352         * @see ConvertUtilsBean#register(Converter, Class)
+353         */
+354        public static void register(Converter converter, Class clazz) {
+355    
+356            ConvertUtilsBean.getInstance().register(converter, clazz);
+357    
+358        }
+359    
+360    
+361    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean.html new file mode 100644 index 0000000..6de217a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean.html @@ -0,0 +1,942 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.io.File;
+023    import java.lang.reflect.Array;
+024    import java.math.BigDecimal;
+025    import java.math.BigInteger;
+026    import java.net.URL;
+027    import java.sql.Timestamp;
+028    import java.util.Calendar;
+029    import java.util.Collection;
+030    
+031    import org.apache.commons.beanutils.converters.ArrayConverter;
+032    import org.apache.commons.beanutils.converters.BigDecimalConverter;
+033    import org.apache.commons.beanutils.converters.BigIntegerConverter;
+034    import org.apache.commons.beanutils.converters.BooleanConverter;
+035    import org.apache.commons.beanutils.converters.ByteConverter;
+036    import org.apache.commons.beanutils.converters.CalendarConverter;
+037    import org.apache.commons.beanutils.converters.CharacterConverter;
+038    import org.apache.commons.beanutils.converters.ClassConverter;
+039    import org.apache.commons.beanutils.converters.ConverterFacade;
+040    import org.apache.commons.beanutils.converters.DateConverter;
+041    import org.apache.commons.beanutils.converters.DoubleConverter;
+042    import org.apache.commons.beanutils.converters.FileConverter;
+043    import org.apache.commons.beanutils.converters.FloatConverter;
+044    import org.apache.commons.beanutils.converters.IntegerConverter;
+045    import org.apache.commons.beanutils.converters.LongConverter;
+046    import org.apache.commons.beanutils.converters.ShortConverter;
+047    import org.apache.commons.beanutils.converters.SqlDateConverter;
+048    import org.apache.commons.beanutils.converters.SqlTimeConverter;
+049    import org.apache.commons.beanutils.converters.SqlTimestampConverter;
+050    import org.apache.commons.beanutils.converters.StringConverter;
+051    import org.apache.commons.beanutils.converters.URLConverter;
+052    import org.apache.commons.logging.Log;
+053    import org.apache.commons.logging.LogFactory;
+054    
+055    
+056    /**
+057     * <p>Utility methods for converting String scalar values to objects of the
+058     * specified Class, String arrays to arrays of the specified Class.  The
+059     * actual {@link Converter} instance to be used can be registered for each
+060     * possible destination Class.  Unless you override them, standard
+061     * {@link Converter} instances are provided for all of the following
+062     * destination Classes:</p>
+063     * <ul>
+064     * <li>java.lang.BigDecimal (no default value)</li>
+065     * <li>java.lang.BigInteger (no default value)</li>
+066     * <li>boolean and java.lang.Boolean (default to false)</li>
+067     * <li>byte and java.lang.Byte (default to zero)</li>
+068     * <li>char and java.lang.Character (default to a space)</li>
+069     * <li>java.lang.Class (no default value)</li>
+070     * <li>double and java.lang.Double (default to zero)</li>
+071     * <li>float and java.lang.Float (default to zero)</li>
+072     * <li>int and java.lang.Integer (default to zero)</li>
+073     * <li>long and java.lang.Long (default to zero)</li>
+074     * <li>short and java.lang.Short (default to zero)</li>
+075     * <li>java.lang.String (default to null)</li>
+076     * <li>java.io.File (no default value)</li>
+077     * <li>java.net.URL (no default value)</li>
+078     * <li>java.sql.Date (no default value)</li>
+079     * <li>java.sql.Time (no default value)</li>
+080     * <li>java.sql.Timestamp (no default value)</li>
+081     * </ul>
+082     *
+083     * <p>For backwards compatibility, the standard Converters for primitive
+084     * types (and the corresponding wrapper classes) return a defined
+085     * default value when a conversion error occurs.  If you prefer to have a
+086     * {@link ConversionException} thrown instead, replace the standard Converter
+087     * instances with instances created with the zero-arguments constructor.  For
+088     * example, to cause the Converters for integers to throw an exception on
+089     * conversion errors, you could do this:</p>
+090     * <pre>
+091     *   // No-args constructor gets the version that throws exceptions
+092     *   Converter myConverter =
+093     *    new org.apache.commons.beanutils.converter.IntegerConverter();
+094     *   ConvertUtils.register(myConverter, Integer.TYPE);    // Native type
+095     *   ConvertUtils.register(myConverter, Integer.class);   // Wrapper class
+096     * </pre>
+097     * 
+098     * <p>
+099     * Converters generally treat null input as if it were invalid
+100     * input, ie they return their default value if one was specified when the
+101     * converter was constructed, and throw an exception otherwise. If you prefer
+102     * nulls to be preserved for converters that are converting to objects (not
+103     * primitives) then register a converter as above, passing a default value of
+104     * null to the converter constructor (and of course registering that converter
+105     * only for the .class target).
+106     * </p>
+107     *
+108     * <p>
+109     * When a converter is listed above as having no default value, then that
+110     * converter will throw an exception when passed null or an invalid value
+111     * as its input. In particular, by default the BigInteger and BigDecimal
+112     * converters have no default (and are therefore somewhat inconsistent
+113     * with the other numerical converters which all have zero as their default).
+114     * </p>
+115     * 
+116     * <p>
+117     * Converters that generate <i>arrays</i> of each of the primitive types are
+118     * also automatically configured (including String[]). When passed null
+119     * or invalid input, these return an empty array (not null). See class
+120     * AbstractArrayConverter for the supported input formats for these converters.
+121     * </p>
+122     * 
+123     * @author Craig R. McClanahan
+124     * @author Ralph Schaer
+125     * @author Chris Audley
+126     * @author James Strachan
+127     * @version $Revision: 745079 $ $Date: 2009-02-17 14:04:10 +0000 (Tue, 17 Feb 2009) $
+128     * @since 1.7
+129     */
+130    
+131    public class ConvertUtilsBean {
+132        
+133        private static final Integer ZERO = new Integer(0);
+134        private static final Character SPACE = new Character(' ');
+135    
+136        // ------------------------------------------------------- Class Methods
+137        /**
+138         * Get singleton instance
+139         * @return The singleton instance
+140         */
+141        protected static ConvertUtilsBean getInstance() {
+142            return BeanUtilsBean.getInstance().getConvertUtils();
+143        }
+144    
+145        // ------------------------------------------------------- Variables
+146    
+147    
+148        /**
+149         * The set of {@link Converter}s that can be used to convert Strings
+150         * into objects of a specified Class, keyed by the destination Class.
+151         */
+152        private WeakFastHashMap converters = new WeakFastHashMap();
+153    
+154        /**
+155         * The <code>Log</code> instance for this class.
+156         */
+157        private Log log = LogFactory.getLog(ConvertUtils.class);
+158    
+159        // ------------------------------------------------------- Constructors
+160    
+161        /** Construct a bean with standard converters registered */
+162        public ConvertUtilsBean() {
+163            converters.setFast(false);   
+164            deregister();
+165            converters.setFast(true);
+166        }
+167    
+168        // --------------------------------------------------------- Public Methods
+169        
+170        /**
+171         * The default value for Boolean conversions.
+172         * @deprecated Register replacement converters for Boolean.TYPE and
+173         *  Boolean.class instead
+174         */
+175        private Boolean defaultBoolean = Boolean.FALSE;
+176    
+177        /**
+178         * Gets the default value for Boolean conversions.
+179         * @return The default Boolean value
+180         * @deprecated Register replacement converters for Boolean.TYPE and
+181         *  Boolean.class instead
+182         */
+183        public boolean getDefaultBoolean() {
+184            return (defaultBoolean.booleanValue());
+185        }
+186    
+187        /**
+188         * Sets the default value for Boolean conversions.
+189         * @param newDefaultBoolean The default Boolean value
+190         * @deprecated Register replacement converters for Boolean.TYPE and
+191         *  Boolean.class instead
+192         */
+193        public void setDefaultBoolean(boolean newDefaultBoolean) {
+194            defaultBoolean = (newDefaultBoolean ? Boolean.TRUE : Boolean.FALSE);
+195            register(new BooleanConverter(defaultBoolean), Boolean.TYPE);
+196            register(new BooleanConverter(defaultBoolean), Boolean.class);
+197        }
+198    
+199    
+200        /**
+201         * The default value for Byte conversions.
+202         * @deprecated Register replacement converters for Byte.TYPE and
+203         *  Byte.class instead
+204         */
+205        private Byte defaultByte = new Byte((byte) 0);
+206    
+207        /**
+208         * Gets the default value for Byte conversions.
+209         * @return The default Byte value
+210         * @deprecated Register replacement converters for Byte.TYPE and
+211         *  Byte.class instead
+212         */
+213        public byte getDefaultByte() {
+214            return (defaultByte.byteValue());
+215        }
+216    
+217        /**
+218         * Sets the default value for Byte conversions.
+219         * @param newDefaultByte The default Byte value
+220         * @deprecated Register replacement converters for Byte.TYPE and
+221         *  Byte.class instead
+222         */
+223        public void setDefaultByte(byte newDefaultByte) {
+224            defaultByte = new Byte(newDefaultByte);
+225            register(new ByteConverter(defaultByte), Byte.TYPE);
+226            register(new ByteConverter(defaultByte), Byte.class);
+227        }
+228    
+229    
+230        /**
+231         * The default value for Character conversions.
+232         * @deprecated Register replacement converters for Character.TYPE and
+233         *  Character.class instead
+234         */
+235        private Character defaultCharacter = new Character(' ');
+236    
+237        /**
+238         * Gets the default value for Character conversions.
+239         * @return The default Character value
+240         * @deprecated Register replacement converters for Character.TYPE and
+241         *  Character.class instead
+242         */
+243        public char getDefaultCharacter() {
+244            return (defaultCharacter.charValue());
+245        }
+246    
+247        /**
+248         * Sets the default value for Character conversions.
+249         * @param newDefaultCharacter The default Character value
+250         * @deprecated Register replacement converters for Character.TYPE and
+251         *  Character.class instead
+252         */
+253        public void setDefaultCharacter(char newDefaultCharacter) {
+254            defaultCharacter = new Character(newDefaultCharacter);
+255            register(new CharacterConverter(defaultCharacter),
+256                        Character.TYPE);
+257            register(new CharacterConverter(defaultCharacter),
+258                        Character.class);
+259        }
+260    
+261    
+262        /**
+263         * The default value for Double conversions.
+264         * @deprecated Register replacement converters for Double.TYPE and
+265         *  Double.class instead
+266         */
+267        private Double defaultDouble = new Double(0.0);
+268    
+269        /**
+270         * Gets the default value for Double conversions.
+271         * @return The default Double value
+272         * @deprecated Register replacement converters for Double.TYPE and
+273         *  Double.class instead
+274         */
+275        public double getDefaultDouble() {
+276            return (defaultDouble.doubleValue());
+277        }
+278    
+279        /**
+280         * Sets the default value for Double conversions.
+281         * @param newDefaultDouble The default Double value
+282         * @deprecated Register replacement converters for Double.TYPE and
+283         *  Double.class instead
+284         */
+285        public void setDefaultDouble(double newDefaultDouble) {
+286            defaultDouble = new Double(newDefaultDouble);
+287            register(new DoubleConverter(defaultDouble), Double.TYPE);
+288            register(new DoubleConverter(defaultDouble), Double.class);
+289        }
+290    
+291    
+292        /**
+293         * The default value for Float conversions.
+294         * @deprecated Register replacement converters for Float.TYPE and
+295         *  Float.class instead
+296         */
+297        private Float defaultFloat = new Float((float) 0.0);
+298    
+299        /**
+300         * Gets the default value for Float conversions.
+301         * @return The default Float value
+302         * @deprecated Register replacement converters for Float.TYPE and
+303         *  Float.class instead
+304         */
+305        public float getDefaultFloat() {
+306            return (defaultFloat.floatValue());
+307        }
+308    
+309        /**
+310         * Sets the default value for Float conversions.
+311         * @param newDefaultFloat The default Float value
+312         * @deprecated Register replacement converters for Float.TYPE and
+313         *  Float.class instead
+314         */
+315        public void setDefaultFloat(float newDefaultFloat) {
+316            defaultFloat = new Float(newDefaultFloat);
+317            register(new FloatConverter(defaultFloat), Float.TYPE);
+318            register(new FloatConverter(defaultFloat), Float.class);
+319        }
+320    
+321    
+322        /**
+323         * The default value for Integer conversions.
+324         * @deprecated Register replacement converters for Integer.TYPE and
+325         *  Integer.class instead
+326         */
+327        private Integer defaultInteger = new Integer(0);
+328    
+329        /**
+330         * Gets the default value for Integer conversions.
+331         * @return The default Integer value
+332         * @deprecated Register replacement converters for Integer.TYPE and
+333         *  Integer.class instead
+334         */
+335        public int getDefaultInteger() {
+336            return (defaultInteger.intValue());
+337        }
+338        
+339        /**
+340         * Sets the default value for Integer conversions.
+341         * @param newDefaultInteger The default Integer value
+342         * @deprecated Register replacement converters for Integer.TYPE and
+343         *  Integer.class instead
+344         */
+345        public void setDefaultInteger(int newDefaultInteger) {
+346            defaultInteger = new Integer(newDefaultInteger);
+347            register(new IntegerConverter(defaultInteger), Integer.TYPE);
+348            register(new IntegerConverter(defaultInteger), Integer.class);
+349        }
+350    
+351    
+352        /**
+353         * The default value for Long conversions.
+354         * @deprecated Register replacement converters for Long.TYPE and
+355         *  Long.class instead
+356         */
+357        private Long defaultLong = new Long(0);
+358    
+359        /**
+360         * Gets the default value for Long conversions.
+361         * @return The default Long value
+362         * @deprecated Register replacement converters for Long.TYPE and
+363         *  Long.class instead
+364         */
+365        public long getDefaultLong() {
+366            return (defaultLong.longValue());
+367        }
+368    
+369        /**
+370         * Sets the default value for Long conversions.
+371         * @param newDefaultLong The default Long value
+372         * @deprecated Register replacement converters for Long.TYPE and
+373         *  Long.class instead
+374         */
+375        public void setDefaultLong(long newDefaultLong) {
+376            defaultLong = new Long(newDefaultLong);
+377            register(new LongConverter(defaultLong), Long.TYPE);
+378            register(new LongConverter(defaultLong), Long.class);
+379        }
+380    
+381    
+382        /**
+383         * The default value for Short conversions.
+384         * @deprecated Register replacement converters for Short.TYPE and
+385         *  Short.class instead
+386         */
+387        private static Short defaultShort = new Short((short) 0);
+388    
+389        /**
+390         * Gets the default value for Short conversions.
+391         * @return The default Short value
+392         * @deprecated Register replacement converters for Short.TYPE and
+393         *  Short.class instead
+394         */
+395        public short getDefaultShort() {
+396            return (defaultShort.shortValue());
+397        }
+398    
+399        /**
+400         * Sets the default value for Short conversions.
+401         * @param newDefaultShort The default Short value
+402         * @deprecated Register replacement converters for Short.TYPE and
+403         *  Short.class instead
+404         */
+405        public void setDefaultShort(short newDefaultShort) {
+406            defaultShort = new Short(newDefaultShort);
+407            register(new ShortConverter(defaultShort), Short.TYPE);
+408            register(new ShortConverter(defaultShort), Short.class);
+409        }
+410    
+411    
+412    
+413        /**
+414         * Convert the specified value into a String.  If the specified value
+415         * is an array, the first element (converted to a String) will be
+416         * returned.  The registered {@link Converter} for the
+417         * <code>java.lang.String</code> class will be used, which allows
+418         * applications to customize Object->String conversions (the default
+419         * implementation simply uses toString()).
+420         *
+421         * @param value Value to be converted (may be null)
+422         * @return The converted String value
+423         */
+424        public String convert(Object value) {
+425    
+426            if (value == null) {
+427                return null;
+428            } else if (value.getClass().isArray()) {
+429                if (Array.getLength(value) < 1) {
+430                    return (null);
+431                }
+432                value = Array.get(value, 0);
+433                if (value == null) {
+434                    return null;
+435                } else {
+436                    Converter converter = lookup(String.class);
+437                    return ((String) converter.convert(String.class, value));
+438                }
+439            } else {
+440                Converter converter = lookup(String.class);
+441                return ((String) converter.convert(String.class, value));
+442            }
+443    
+444        }
+445    
+446    
+447        /**
+448         * Convert the specified value to an object of the specified class (if
+449         * possible).  Otherwise, return a String representation of the value.
+450         *
+451         * @param value Value to be converted (may be null)
+452         * @param clazz Java class to be converted to
+453         * @return The converted value
+454         *
+455         * @exception ConversionException if thrown by an underlying Converter
+456         */
+457        public Object convert(String value, Class clazz) {
+458    
+459            if (log.isDebugEnabled()) {
+460                log.debug("Convert string '" + value + "' to class '" +
+461                          clazz.getName() + "'");
+462            }
+463            Converter converter = lookup(clazz);
+464            if (converter == null) {
+465                converter = lookup(String.class);
+466            }
+467            if (log.isTraceEnabled()) {
+468                log.trace("  Using converter " + converter);
+469            }
+470            return (converter.convert(clazz, value));
+471    
+472        }
+473    
+474    
+475        /**
+476         * Convert an array of specified values to an array of objects of the
+477         * specified class (if possible).  If the specified Java class is itself
+478         * an array class, this class will be the type of the returned value.
+479         * Otherwise, an array will be constructed whose component type is the
+480         * specified class.
+481         *
+482         * @param values Array of values to be converted
+483         * @param clazz Java array or element class to be converted to
+484         * @return The converted value
+485         *
+486         * @exception ConversionException if thrown by an underlying Converter
+487         */
+488        public Object convert(String[] values, Class clazz) {
+489    
+490            Class type = clazz;
+491            if (clazz.isArray()) {
+492                type = clazz.getComponentType();
+493            }
+494            if (log.isDebugEnabled()) {
+495                log.debug("Convert String[" + values.length + "] to class '" +
+496                          type.getName() + "[]'");
+497            }
+498            Converter converter = lookup(type);
+499            if (converter == null) {
+500                converter = lookup(String.class);
+501            }
+502            if (log.isTraceEnabled()) {
+503                log.trace("  Using converter " + converter);
+504            }
+505            Object array = Array.newInstance(type, values.length);
+506            for (int i = 0; i < values.length; i++) {
+507                Array.set(array, i, converter.convert(type, values[i]));
+508            }
+509            return (array);
+510    
+511        }
+512    
+513    
+514        /**
+515         * <p>Convert the value to an object of the specified class (if
+516         * possible).</p>
+517         *
+518         * @param value Value to be converted (may be null)
+519         * @param targetType Class of the value to be converted to
+520         * @return The converted value
+521         *
+522         * @exception ConversionException if thrown by an underlying Converter
+523         */
+524        public Object convert(Object value, Class targetType) {
+525    
+526            Class sourceType = value == null ? null : value.getClass();
+527    
+528            if (log.isDebugEnabled()) {
+529                if (value == null) {
+530                    log.debug("Convert null value to type '" +
+531                            targetType.getName() + "'");
+532                } else {
+533                    log.debug("Convert type '" + sourceType.getName() + "' value '" + value +
+534                          "' to type '" + targetType.getName() + "'");
+535                }
+536            }
+537    
+538            Object converted = value;
+539            Converter converter = lookup(sourceType, targetType);
+540            if (converter != null) {
+541                if (log.isTraceEnabled()) {
+542                    log.trace("  Using converter " + converter);
+543                }
+544                converted = converter.convert(targetType, value);
+545            }
+546            if (targetType == String.class && converted != null && 
+547                    !(converted instanceof String)) {
+548    
+549                // NOTE: For backwards compatibility, if the Converter
+550                //       doesn't handle  conversion-->String then
+551                //       use the registered String Converter
+552                converter = lookup(String.class);
+553                if (converter != null) {
+554                    if (log.isTraceEnabled()) {
+555                        log.trace("  Using converter " + converter);
+556                    }
+557                    converted = converter.convert(String.class, converted);
+558                }
+559    
+560                // If the object still isn't a String, use toString() method
+561                if (converted != null && !(converted instanceof String)) {
+562                    converted = converted.toString();
+563                }
+564    
+565            }
+566            return converted;
+567    
+568        }
+569    
+570        /**
+571         * Remove all registered {@link Converter}s, and re-establish the
+572         * standard Converters.
+573         */
+574        public void deregister() {
+575    
+576            converters.clear();
+577            
+578            registerPrimitives(false);
+579            registerStandard(false, false);
+580            registerOther(true);
+581            registerArrays(false, 0);
+582            register(BigDecimal.class, new BigDecimalConverter());
+583            register(BigInteger.class, new BigIntegerConverter());
+584        }
+585    
+586        /**
+587         * Register the provided converters with the specified defaults.
+588         *
+589         * @param throwException <code>true</code> if the converters should
+590         * throw an exception when a conversion error occurs, otherwise <code>
+591         * <code>false</code> if a default value should be used.
+592         * @param defaultNull <code>true</code>if the <i>standard</i> converters
+593         * (see {@link ConvertUtilsBean#registerStandard(boolean, boolean)})
+594         * should use a default value of <code>null</code>, otherwise <code>false</code>.
+595         * N.B. This values is ignored if <code>throwException</code> is <code>true</code>
+596         * @param defaultArraySize The size of the default array value for array converters
+597         * (N.B. This values is ignored if <code>throwException</code> is <code>true</code>).
+598         * Specifying a value less than zero causes a <code>null<code> value to be used for
+599         * the default.
+600         */
+601        public void register(boolean throwException, boolean defaultNull, int defaultArraySize) {
+602            registerPrimitives(throwException);
+603            registerStandard(throwException, defaultNull);
+604            registerOther(throwException);
+605            registerArrays(throwException, defaultArraySize);
+606        }
+607    
+608        /**
+609         * Register the converters for primitive types.
+610         * </p>
+611         * This method registers the following converters:
+612         * <ul>
+613         *     <li><code>Boolean.TYPE</code> - {@link BooleanConverter}</li>
+614         *     <li><code>Byte.TYPE</code> - {@link ByteConverter}</li>
+615         *     <li><code>Character.TYPE</code> - {@link CharacterConverter}</li>
+616         *     <li><code>Double.TYPE</code> - {@link DoubleConverter}</li>
+617         *     <li><code>Float.TYPE</code> - {@link FloatConverter}</li>
+618         *     <li><code>Integer.TYPE</code> - {@link IntegerConverter}</li>
+619         *     <li><code>Long.TYPE</code> - {@link LongConverter}</li>
+620         *     <li><code>Short.TYPE</code> - {@link ShortConverter}</li>
+621         * </ul>
+622         * @param throwException <code>true</code> if the converters should
+623         * throw an exception when a conversion error occurs, otherwise <code>
+624         * <code>false</code> if a default value should be used.
+625         */
+626        private void registerPrimitives(boolean throwException) {
+627            register(Boolean.TYPE,   throwException ? new BooleanConverter()    : new BooleanConverter(Boolean.FALSE));
+628            register(Byte.TYPE,      throwException ? new ByteConverter()       : new ByteConverter(ZERO));
+629            register(Character.TYPE, throwException ? new CharacterConverter()  : new CharacterConverter(SPACE));
+630            register(Double.TYPE,    throwException ? new DoubleConverter()     : new DoubleConverter(ZERO));
+631            register(Float.TYPE,     throwException ? new FloatConverter()      : new FloatConverter(ZERO));
+632            register(Integer.TYPE,   throwException ? new IntegerConverter()    : new IntegerConverter(ZERO));
+633            register(Long.TYPE,      throwException ? new LongConverter()       : new LongConverter(ZERO));
+634            register(Short.TYPE,     throwException ? new ShortConverter()      : new ShortConverter(ZERO));
+635        }
+636    
+637        /**
+638         * Register the converters for standard types.
+639         * </p>
+640         * This method registers the following converters:
+641         * <ul>
+642         *     <li><code>BigDecimal.class</code> - {@link BigDecimalConverter}</li>
+643         *     <li><code>BigInteger.class</code> - {@link BigIntegerConverter}</li>
+644         *     <li><code>Boolean.class</code> - {@link BooleanConverter}</li>
+645         *     <li><code>Byte.class</code> - {@link ByteConverter}</li>
+646         *     <li><code>Character.class</code> - {@link CharacterConverter}</li>
+647         *     <li><code>Double.class</code> - {@link DoubleConverter}</li>
+648         *     <li><code>Float.class</code> - {@link FloatConverter}</li>
+649         *     <li><code>Integer.class</code> - {@link IntegerConverter}</li>
+650         *     <li><code>Long.class</code> - {@link LongConverter}</li>
+651         *     <li><code>Short.class</code> - {@link ShortConverter}</li>
+652         *     <li><code>String.class</code> - {@link StringConverter}</li>
+653         * </ul>
+654         * @param throwException <code>true</code> if the converters should
+655         * throw an exception when a conversion error occurs, otherwise <code>
+656         * <code>false</code> if a default value should be used.
+657         * @param defaultNull <code>true</code>if the <i>standard</i> converters
+658         * (see {@link ConvertUtilsBean#registerStandard(boolean, boolean)})
+659         * should use a default value of <code>null</code>, otherwise <code>false</code>.
+660         * N.B. This values is ignored if <code>throwException</code> is <code>true</code>
+661         */
+662        private void registerStandard(boolean throwException, boolean defaultNull) {
+663    
+664            Number     defaultNumber     = defaultNull ? null : ZERO;
+665            BigDecimal bigDecDeflt       = defaultNull ? null : new BigDecimal("0.0");
+666            BigInteger bigIntDeflt       = defaultNull ? null : new BigInteger("0");
+667            Boolean    booleanDefault    = defaultNull ? null : Boolean.FALSE;
+668            Character  charDefault       = defaultNull ? null : SPACE;
+669            String     stringDefault     = defaultNull ? null : "";
+670    
+671            register(BigDecimal.class, throwException ? new BigDecimalConverter() : new BigDecimalConverter(bigDecDeflt));
+672            register(BigInteger.class, throwException ? new BigIntegerConverter() : new BigIntegerConverter(bigIntDeflt));
+673            register(Boolean.class,    throwException ? new BooleanConverter()    : new BooleanConverter(booleanDefault));
+674            register(Byte.class,       throwException ? new ByteConverter()       : new ByteConverter(defaultNumber));
+675            register(Character.class,  throwException ? new CharacterConverter()  : new CharacterConverter(charDefault));
+676            register(Double.class,     throwException ? new DoubleConverter()     : new DoubleConverter(defaultNumber));
+677            register(Float.class,      throwException ? new FloatConverter()      : new FloatConverter(defaultNumber));
+678            register(Integer.class,    throwException ? new IntegerConverter()    : new IntegerConverter(defaultNumber));
+679            register(Long.class,       throwException ? new LongConverter()       : new LongConverter(defaultNumber));
+680            register(Short.class,      throwException ? new ShortConverter()      : new ShortConverter(defaultNumber));
+681            register(String.class,     throwException ? new StringConverter()     : new StringConverter(stringDefault));
+682            
+683        }
+684    
+685        /**
+686         * Register the converters for other types.
+687         * </p>
+688         * This method registers the following converters:
+689         * <ul>
+690         *     <li><code>Class.class</code> - {@link ClassConverter}</li>
+691         *     <li><code>java.util.Date.class</code> - {@link DateConverter}</li>
+692         *     <li><code>java.util.Calendar.class</code> - {@link CalendarConverter}</li>
+693         *     <li><code>File.class</code> - {@link FileConverter}</li>
+694         *     <li><code>java.sql.Date.class</code> - {@link SqlDateConverter}</li>
+695         *     <li><code>java.sql.Time.class</code> - {@link SqlTimeConverter}</li>
+696         *     <li><code>java.sql.Timestamp.class</code> - {@link SqlTimestampConverter}</li>
+697         *     <li><code>URL.class</code> - {@link URLConverter}</li>
+698         * </ul>
+699         * @param throwException <code>true</code> if the converters should
+700         * throw an exception when a conversion error occurs, otherwise <code>
+701         * <code>false</code> if a default value should be used.
+702         */
+703        private void registerOther(boolean throwException) {
+704            register(Class.class,         throwException ? new ClassConverter()        : new ClassConverter(null));
+705            register(java.util.Date.class, throwException ? new DateConverter()        : new DateConverter(null));
+706            register(Calendar.class,      throwException ? new CalendarConverter()     : new CalendarConverter(null));
+707            register(File.class,          throwException ? new FileConverter()         : new FileConverter(null));
+708            register(java.sql.Date.class, throwException ? new SqlDateConverter()      : new SqlDateConverter(null));
+709            register(java.sql.Time.class, throwException ? new SqlTimeConverter()      : new SqlTimeConverter(null));
+710            register(Timestamp.class,     throwException ? new SqlTimestampConverter() : new SqlTimestampConverter(null));
+711            register(URL.class,           throwException ? new URLConverter()          : new URLConverter(null));
+712        }
+713    
+714        /**
+715         * Register array converters.
+716         *
+717         * @param throwException <code>true</code> if the converters should
+718         * throw an exception when a conversion error occurs, otherwise <code>
+719         * <code>false</code> if a default value should be used.
+720         * @param defaultArraySize The size of the default array value for array converters
+721         * (N.B. This values is ignored if <code>throwException</code> is <code>true</code>).
+722         * Specifying a value less than zero causes a <code>null<code> value to be used for
+723         * the default.
+724         */
+725        private void registerArrays(boolean throwException, int defaultArraySize) {
+726    
+727            // Primitives
+728            registerArrayConverter(Boolean.TYPE,   new BooleanConverter(),   throwException, defaultArraySize);
+729            registerArrayConverter(Byte.TYPE,      new ByteConverter(),      throwException, defaultArraySize);
+730            registerArrayConverter(Character.TYPE, new CharacterConverter(), throwException, defaultArraySize);
+731            registerArrayConverter(Double.TYPE,    new DoubleConverter(),    throwException, defaultArraySize);
+732            registerArrayConverter(Float.TYPE,     new FloatConverter(),     throwException, defaultArraySize);
+733            registerArrayConverter(Integer.TYPE,   new IntegerConverter(),   throwException, defaultArraySize);
+734            registerArrayConverter(Long.TYPE,      new LongConverter(),      throwException, defaultArraySize);
+735            registerArrayConverter(Short.TYPE,     new ShortConverter(),     throwException, defaultArraySize);
+736    
+737            // Standard
+738            registerArrayConverter(BigDecimal.class, new BigDecimalConverter(), throwException, defaultArraySize);
+739            registerArrayConverter(BigInteger.class, new BigIntegerConverter(), throwException, defaultArraySize);
+740            registerArrayConverter(Boolean.class,    new BooleanConverter(),    throwException, defaultArraySize);
+741            registerArrayConverter(Byte.class,       new ByteConverter(),       throwException, defaultArraySize);
+742            registerArrayConverter(Character.class,  new CharacterConverter(),  throwException, defaultArraySize);
+743            registerArrayConverter(Double.class,     new DoubleConverter(),     throwException, defaultArraySize);
+744            registerArrayConverter(Float.class,      new FloatConverter(),      throwException, defaultArraySize);
+745            registerArrayConverter(Integer.class,    new IntegerConverter(),    throwException, defaultArraySize);
+746            registerArrayConverter(Long.class,       new LongConverter(),       throwException, defaultArraySize);
+747            registerArrayConverter(Short.class,      new ShortConverter(),      throwException, defaultArraySize);
+748            registerArrayConverter(String.class,     new StringConverter(),     throwException, defaultArraySize);
+749    
+750            // Other
+751            registerArrayConverter(Class.class,          new ClassConverter(),        throwException, defaultArraySize);
+752            registerArrayConverter(java.util.Date.class, new DateConverter(),         throwException, defaultArraySize);
+753            registerArrayConverter(Calendar.class,       new DateConverter(),         throwException, defaultArraySize);
+754            registerArrayConverter(File.class,           new FileConverter(),         throwException, defaultArraySize);
+755            registerArrayConverter(java.sql.Date.class,  new SqlDateConverter(),      throwException, defaultArraySize);
+756            registerArrayConverter(java.sql.Time.class,  new SqlTimeConverter(),      throwException, defaultArraySize);
+757            registerArrayConverter(Timestamp.class,      new SqlTimestampConverter(), throwException, defaultArraySize);
+758            registerArrayConverter(URL.class,            new URLConverter(),          throwException, defaultArraySize);
+759    
+760        }
+761    
+762        /**
+763         * Register a new ArrayConverter with the specified element delegate converter
+764         * that returns a default array of the specified size in the event of conversion errors.
+765         *
+766         * @param componentType The component type of the array
+767         * @param componentConverter The converter to delegate to for the array elements
+768         * @param throwException Whether a conversion exception should be thrown or a default
+769         * value used in the event of a conversion error
+770         * @param defaultArraySize The size of the default array
+771         */
+772        private void registerArrayConverter(Class componentType, Converter componentConverter,
+773                boolean throwException, int defaultArraySize) {
+774            Class arrayType = Array.newInstance(componentType, 0).getClass();
+775            Converter arrayConverter = null;
+776            if (throwException) {
+777                arrayConverter = new ArrayConverter(arrayType, componentConverter);
+778            } else {
+779                arrayConverter = new ArrayConverter(arrayType, componentConverter, defaultArraySize);
+780            }
+781            register(arrayType, arrayConverter);
+782        }
+783    
+784        /** strictly for convenience since it has same parameter order as Map.put */
+785        private void register(Class clazz, Converter converter) {
+786            register(new ConverterFacade(converter), clazz);
+787        }
+788    
+789        /**
+790         * Remove any registered {@link Converter} for the specified destination
+791         * <code>Class</code>.
+792         *
+793         * @param clazz Class for which to remove a registered Converter
+794         */
+795        public void deregister(Class clazz) {
+796    
+797            converters.remove(clazz);
+798    
+799        }
+800    
+801    
+802        /**
+803         * Look up and return any registered {@link Converter} for the specified
+804         * destination class; if there is no registered Converter, return
+805         * <code>null</code>.
+806         *
+807         * @param clazz Class for which to return a registered Converter
+808         * @return The registered {@link Converter} or <code>null</code> if not found
+809         */
+810        public Converter lookup(Class clazz) {
+811    
+812            return ((Converter) converters.get(clazz));
+813    
+814        }
+815    
+816        /**
+817         * Look up and return any registered {@link Converter} for the specified
+818         * source and destination class; if there is no registered Converter,
+819         * return <code>null</code>.
+820         *
+821         * @param sourceType Class of the value being converted
+822         * @param targetType Class of the value to be converted to
+823         * @return The registered {@link Converter} or <code>null</code> if not found
+824         */
+825        public Converter lookup(Class sourceType, Class targetType) {
+826    
+827            if (targetType == null) {
+828                throw new IllegalArgumentException("Target type is missing");
+829            }
+830            if (sourceType == null) {
+831                return lookup(targetType);
+832            }
+833    
+834            Converter converter = null;
+835            // Convert --> String 
+836            if (targetType == String.class) {
+837                converter = lookup(sourceType);
+838                if (converter == null && (sourceType.isArray() ||
+839                            Collection.class.isAssignableFrom(sourceType))) {
+840                    converter = lookup(String[].class);
+841                }
+842                if (converter == null) {
+843                    converter = lookup(String.class);
+844                }
+845                return converter;
+846            }
+847    
+848            // Convert --> String array 
+849            if (targetType == String[].class) {
+850                if (sourceType.isArray() || Collection.class.isAssignableFrom(sourceType)) {
+851                    converter = lookup(sourceType);
+852                }
+853                if (converter == null) {
+854                    converter = lookup(String[].class);
+855                }
+856                return converter;
+857            }
+858    
+859            return lookup(targetType);
+860    
+861        }
+862    
+863        /**
+864         * Register a custom {@link Converter} for the specified destination
+865         * <code>Class</code>, replacing any previously registered Converter.
+866         *
+867         * @param converter Converter to be registered
+868         * @param clazz Destination class for conversions performed by this
+869         *  Converter
+870         */
+871        public void register(Converter converter, Class clazz) {
+872    
+873            converters.put(clazz, converter);
+874    
+875        }
+876    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean2.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean2.html new file mode 100644 index 0000000..e6302d3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertUtilsBean2.html @@ -0,0 +1,141 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    /**
+020     * {@link ConvertUtilsBean} implementation that delegates <code>convert()</code>
+021     * methods to the new {@link ConvertUtilsBean#convert(Object, Class)} method.
+022     *
+023     * <p>
+024     * To configure this implementation for the current context ClassLoader invoke
+025     * <code>BeanUtilsBean.setInstance(new BeanUtilsBean2());</code>
+026     * </p>
+027     *
+028     * @see BeanUtilsBean2
+029     * @version $Revision: 552381 $ $Date: 2007-07-02 03:00:17 +0100 (Mon, 02 Jul 2007) $
+030     * @since 1.8.0
+031     */
+032    public class ConvertUtilsBean2 extends ConvertUtilsBean {
+033    
+034        /**
+035         * Delegates to the new {@link ConvertUtilsBean#convert(Object, Class)}
+036         * method.
+037         *
+038         * @param value Value to be converted (may be null)
+039         * @return The converted String value
+040         *
+041         * @see ConvertUtilsBean#convert(String[], Class)
+042         */
+043        public String convert(Object value) {
+044            return (String)convert(value, String.class);
+045        }
+046    
+047        /**
+048         * Delegates to the new {@link ConvertUtilsBean#convert(Object, Class)}
+049         * method.
+050         *
+051         * @param value Value to be converted (may be null)
+052         * @param clazz Java class to be converted to
+053         * @return The converted value
+054         *
+055         * @see ConvertUtilsBean#convert(String[], Class)
+056         */
+057        public Object convert(String value, Class clazz) {
+058            return convert((Object)value, clazz);
+059        }
+060    
+061        /**
+062         * Delegates to the new {@link ConvertUtilsBean#convert(Object, Class)}
+063         * method.
+064         *
+065         * @param value Array of values to be converted
+066         * @param clazz Java array or element class to be converted to
+067         * @return The converted value
+068         *
+069         * @see ConvertUtilsBean#convert(String[], Class)
+070         */
+071        public Object convert(String[] value, Class clazz) {
+072            return convert((Object)value, clazz);
+073        }
+074    
+075    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/Converter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/Converter.html new file mode 100644 index 0000000..ba634aa --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/Converter.html @@ -0,0 +1,124 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    /**
+023     * <p>General purpose data type converter that can be registered and used
+024     * within the BeanUtils package to manage the conversion of objects from
+025     * one type to another.</p>
+026     *
+027     * <p>Converter subclasses bundled with the BeanUtils library are required
+028     * to be thread-safe, as users of the library may call conversion methods
+029     * from more than one thread simultaneously.</p>
+030     *
+031     * <p>Custom converter subclasses created by users of the library can be
+032     * non-thread-safe if the application using them is single-threaded. However
+033     * it is recommended that they be written in a thread-safe manner anyway.</p> 
+034     *
+035     * @author Craig McClanahan
+036     * @author Paulo Gaspar
+037     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+038     * @since 1.3
+039     */
+040    
+041    public interface Converter {
+042    
+043    
+044        /**
+045         * Convert the specified input object into an output object of the
+046         * specified type.
+047         *
+048         * @param type Data type to which this value should be converted
+049         * @param value The input value to be converted
+050         * @return The converted value
+051         *
+052         * @exception ConversionException if conversion cannot be performed
+053         *  successfully
+054         */
+055        public Object convert(Class type, Object value);
+056    
+057    
+058    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertingWrapDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertingWrapDynaBean.html new file mode 100644 index 0000000..f7eb57b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ConvertingWrapDynaBean.html @@ -0,0 +1,148 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    import java.lang.reflect.InvocationTargetException;
+021    
+022    /**
+023     * <p>Implementation of <code>DynaBean</code> that wraps a standard JavaBean
+024     * instance, so that DynaBean APIs can be used to access its properties,
+025     * though this implementation allows type conversion to occur when properties are set.
+026     * This means that (say) Strings can be passed in as values in setter methods and
+027     * this DynaBean will convert them to the correct primitive data types.</p>
+028     *
+029     * <p><strong>IMPLEMENTATION NOTE</strong> - This implementation does not
+030     * support the <code>contains()</code> and <code>remove()</code> methods.</p>
+031     *
+032     * @author James Strachan
+033     * @version $Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+034     */
+035    
+036    public class ConvertingWrapDynaBean extends WrapDynaBean {
+037    
+038    
+039    
+040        /**
+041         * Construct a new <code>DynaBean</code> associated with the specified
+042         * JavaBean instance.
+043         *
+044         * @param instance JavaBean instance to be wrapped
+045         */
+046        public ConvertingWrapDynaBean(Object instance) {
+047    
+048            super(instance);
+049    
+050        }
+051    
+052    
+053        /**
+054         * Set the value of the property with the specified name
+055         * performing any type conversions if necessary. So this method
+056         * can accept String values for primitive numeric data types for example.
+057         *
+058         * @param name Name of the property whose value is to be set
+059         * @param value Value to which this property is to be set
+060         *
+061         * @exception IllegalArgumentException if there are any problems
+062         *            copying the property.
+063         */
+064        public void set(String name, Object value) {
+065    
+066            try {
+067                BeanUtils.copyProperty(instance, name, value);
+068            } catch (InvocationTargetException ite) {
+069                Throwable cause = ite.getTargetException();
+070                throw new IllegalArgumentException
+071                        ("Error setting property '" + name +
+072                                  "' nested exception - " + cause);
+073            } catch (Throwable t) {
+074                IllegalArgumentException iae = new IllegalArgumentException
+075                        ("Error setting property '" + name +
+076                                  "', exception - " + t);
+077                BeanUtils.initCause(iae, t);
+078                throw iae;
+079            }
+080    
+081        }
+082    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBean.html new file mode 100644 index 0000000..ee190ef --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBean.html @@ -0,0 +1,240 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    /**
+023     * <p>A <strong>DynaBean</strong> is a Java object that supports properties
+024     * whose names and data types, as well as values, may be dynamically modified.
+025     * To the maximum degree feasible, other components of the BeanUtils package
+026     * will recognize such beans and treat them as standard JavaBeans for the
+027     * purpose of retrieving and setting property values.</p>
+028     *
+029     * @author Craig McClanahan
+030     * @author Paulo Gaspar
+031     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+032     */
+033    
+034    public interface DynaBean {
+035    
+036    
+037        /**
+038         * Does the specified mapped property contain a value for the specified
+039         * key value?
+040         *
+041         * @param name Name of the property to check
+042         * @param key Name of the key to check
+043         * @return <code>true<code> if the mapped property contains a value for
+044         * the specified key, otherwise <code>false</code>
+045         *
+046         * @exception IllegalArgumentException if there is no property
+047         *  of the specified name
+048         */
+049        public boolean contains(String name, String key);
+050    
+051    
+052        /**
+053         * Return the value of a simple property with the specified name.
+054         *
+055         * @param name Name of the property whose value is to be retrieved
+056         * @return The property's value
+057         *
+058         * @exception IllegalArgumentException if there is no property
+059         *  of the specified name
+060         */
+061        public Object get(String name);
+062    
+063    
+064        /**
+065         * Return the value of an indexed property with the specified name.
+066         *
+067         * @param name Name of the property whose value is to be retrieved
+068         * @param index Index of the value to be retrieved
+069         * @return The indexed property's value
+070         *
+071         * @exception IllegalArgumentException if there is no property
+072         *  of the specified name
+073         * @exception IllegalArgumentException if the specified property
+074         *  exists, but is not indexed
+075         * @exception IndexOutOfBoundsException if the specified index
+076         *  is outside the range of the underlying property
+077         * @exception NullPointerException if no array or List has been
+078         *  initialized for this property
+079         */
+080        public Object get(String name, int index);
+081    
+082    
+083        /**
+084         * Return the value of a mapped property with the specified name,
+085         * or <code>null</code> if there is no value for the specified key.
+086         *
+087         * @param name Name of the property whose value is to be retrieved
+088         * @param key Key of the value to be retrieved
+089         * @return The mapped property's value
+090         *
+091         * @exception IllegalArgumentException if there is no property
+092         *  of the specified name
+093         * @exception IllegalArgumentException if the specified property
+094         *  exists, but is not mapped
+095         */
+096        public Object get(String name, String key);
+097    
+098    
+099        /**
+100         * Return the <code>DynaClass</code> instance that describes the set of
+101         * properties available for this DynaBean.
+102         *
+103         * @return The associated DynaClass
+104         */
+105        public DynaClass getDynaClass();
+106    
+107    
+108        /**
+109         * Remove any existing value for the specified key on the
+110         * specified mapped property.
+111         *
+112         * @param name Name of the property for which a value is to
+113         *  be removed
+114         * @param key Key of the value to be removed
+115         *
+116         * @exception IllegalArgumentException if there is no property
+117         *  of the specified name
+118         */
+119        public void remove(String name, String key);
+120    
+121    
+122        /**
+123         * Set the value of a simple property with the specified name.
+124         *
+125         * @param name Name of the property whose value is to be set
+126         * @param value Value to which this property is to be set
+127         *
+128         * @exception ConversionException if the specified value cannot be
+129         *  converted to the type required for this property
+130         * @exception IllegalArgumentException if there is no property
+131         *  of the specified name
+132         * @exception NullPointerException if an attempt is made to set a
+133         *  primitive property to null
+134         */
+135        public void set(String name, Object value);
+136    
+137    
+138        /**
+139         * Set the value of an indexed property with the specified name.
+140         *
+141         * @param name Name of the property whose value is to be set
+142         * @param index Index of the property to be set
+143         * @param value Value to which this property is to be set
+144         *
+145         * @exception ConversionException if the specified value cannot be
+146         *  converted to the type required for this property
+147         * @exception IllegalArgumentException if there is no property
+148         *  of the specified name
+149         * @exception IllegalArgumentException if the specified property
+150         *  exists, but is not indexed
+151         * @exception IndexOutOfBoundsException if the specified index
+152         *  is outside the range of the underlying property
+153         */
+154        public void set(String name, int index, Object value);
+155    
+156    
+157        /**
+158         * Set the value of a mapped property with the specified name.
+159         *
+160         * @param name Name of the property whose value is to be set
+161         * @param key Key of the property to be set
+162         * @param value Value to which this property is to be set
+163         *
+164         * @exception ConversionException if the specified value cannot be
+165         *  converted to the type required for this property
+166         * @exception IllegalArgumentException if there is no property
+167         *  of the specified name
+168         * @exception IllegalArgumentException if the specified property
+169         *  exists, but is not mapped
+170         */
+171        public void set(String name, String key, Object value);
+172    
+173    
+174    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBeanMapDecorator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBeanMapDecorator.html new file mode 100644 index 0000000..bee54c1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaBeanMapDecorator.html @@ -0,0 +1,460 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    import java.util.Map;
+020    import java.util.List;
+021    import java.util.ArrayList;
+022    import java.util.Set;
+023    import java.util.HashSet;
+024    import java.util.Iterator;
+025    import java.util.Collection;
+026    import java.util.Collections;
+027    
+028    /**
+029     * <p>Decorates a {@link DynaBean} to provide <code>Map</code> behaviour.</p>
+030     *
+031     * <p>The motivation for this implementation is to provide access to {@link DynaBean}
+032     *    properties in technologies that are unaware of BeanUtils and {@link DynaBean}s -
+033     *    such as the expression languages of JSTL and JSF.</p>
+034     *
+035     * <p>This can be achieved either by wrapping the {@link DynaBean} prior to
+036     *    providing it to the technolody to process or by providing a <code>Map</code>
+037     *    accessor method on the DynaBean implementation:
+038     *    <pre><code>
+039     *         public Map getMap() {
+040     *             return new DynaBeanMapDecorator(this);
+041     *         }</code></pre>
+042     *   </ul>
+043     * </p>
+044     *
+045     * <p>This, for example, could be used in JSTL in the following way to access
+046     *    a DynaBean's <code>fooProperty</code>:
+047     *    <ul><li><code>${myDynaBean.<b>map</b>.fooProperty}</code></li></ul>
+048     * </p>
+049     *
+050     * <h3>Usage</h3>
+051     *
+052     * <p>To decorate a {@link DynaBean} simply instantiate this class with the
+053     *    target {@link DynaBean}:</p>
+054     *
+055     * <ul><li><code>Map fooMap = new DynaBeanMapDecorator(fooDynaBean);</code></li></ul>
+056     *
+057     * <p>The above example creates a <b><i>read only</i></b> <code>Map</code>.
+058     *    To create  a <code>Map</code> which can be modified, construct a
+059     *    <code>DynaBeanMapDecorator</code> with the <b><i>read only</i></b>
+060     *    attribute set to <code>false</code>:</p>
+061     *
+062     * <ul><li><code>Map fooMap = new DynaBeanMapDecorator(fooDynaBean, false);</code></li></ul>
+063     *
+064     * <h3>Limitations</h3>
+065     * <p>In this implementation the <code>entrySet()</code>, <code>keySet()</code>
+066     *    and <code>values()</code> methods create an <b><i>unmodifiable</i></b>
+067     *    <code>Set</code> and it does not support the Map's <code>clear()</code>
+068     *    and <code>remove()</code> operations.</p>
+069     *
+070     * @since BeanUtils 1.8.0
+071     * @version $Revision: 546471 $ $Date: 2007-06-12 13:57:20 +0100 (Tue, 12 Jun 2007) $
+072     */
+073    public class DynaBeanMapDecorator implements Map {
+074    
+075        private DynaBean dynaBean;
+076        private boolean readOnly;
+077        private transient Set keySet;
+078    
+079        // ------------------- Constructors ----------------------------------
+080    
+081        /**
+082         * Constructs a  read only Map for the specified
+083         * {@link DynaBean}.
+084         *
+085         * @param dynaBean The dyna bean being decorated
+086         * @throws IllegalArgumentException if the {@link DynaBean} is null.
+087         */
+088        public DynaBeanMapDecorator(DynaBean dynaBean) {
+089            this(dynaBean, true);
+090        }
+091    
+092        /**
+093         * Construct a Map for the specified {@link DynaBean}.
+094         *
+095         * @param dynaBean The dyna bean being decorated
+096         * @param readOnly <code>true</code> if the Mpa is read only
+097         * otherwise <code>false</code>
+098         * @throws IllegalArgumentException if the {@link DynaBean} is null.
+099         */
+100        public DynaBeanMapDecorator(DynaBean dynaBean, boolean readOnly) {
+101            if (dynaBean == null) {
+102                throw new IllegalArgumentException("DynaBean is null");
+103            }
+104            this.dynaBean = dynaBean;
+105            this.readOnly = readOnly;
+106        }
+107    
+108    
+109        // ------------------- public Methods --------------------------------
+110    
+111    
+112        /**
+113         * Indicate whether the Map is read only.
+114         *
+115         * @return <code>true</code> if the Map is read only,
+116         * otherwise <code>false</code>.
+117         */
+118        public boolean isReadOnly() {
+119            return readOnly;
+120        }
+121    
+122        // ------------------- java.util.Map Methods -------------------------
+123    
+124        /**
+125         * clear() operation is not supported.
+126         *
+127         * @throws UnsupportedOperationException
+128         */
+129        public void clear() {
+130            throw new UnsupportedOperationException();
+131        }
+132    
+133        /**
+134         * Indicate whether the {@link DynaBean} contains a specified
+135         * value for one (or more) of its properties.
+136         *
+137         * @param key The {@link DynaBean}'s property name
+138         * @return <code>true</code> if one of the {@link DynaBean}'s
+139         * properties contains a specified value.
+140         */
+141        public boolean containsKey(Object key) {
+142            DynaClass dynaClass = getDynaBean().getDynaClass();
+143            DynaProperty dynaProperty = dynaClass.getDynaProperty(toString(key));
+144            return (dynaProperty == null ? false : true);
+145        }
+146    
+147        /**
+148         * Indicates whether the decorated {@link DynaBean} contains
+149         * a specified value.
+150         *
+151         * @param value The value to check for.
+152         * @return <code>true</code> if one of the the {@link DynaBean}'s
+153         * properties contains the specified value, otherwise
+154         * <code>false</code>.
+155         */
+156        public boolean containsValue(Object value) {
+157            DynaProperty[] properties = getDynaProperties();
+158            for (int i = 0; i < properties.length; i++) {
+159                String key = properties[i].getName();
+160                Object prop = getDynaBean().get(key);
+161                if (value == null) {
+162                    if (prop == null) {
+163                        return true;
+164                    }
+165                } else {
+166                    if (value.equals(prop)) {
+167                        return true;
+168                    }
+169                }
+170            }
+171            return false;
+172        }
+173    
+174        /**
+175         * <p>Returns the Set of the property/value mappings
+176         * in the decorated {@link DynaBean}.</p>
+177         *
+178         * <p>Each element in the Set is a <code>Map.Entry</code>
+179         * type.</p>
+180         *
+181         * @return An unmodifiable set of the DynaBean
+182         * property name/value pairs
+183         */
+184        public Set entrySet() {
+185            DynaProperty[] properties = getDynaProperties();
+186            Set set = new HashSet(properties.length);
+187            for (int i = 0; i < properties.length; i++) {
+188                String key = properties[i].getName();
+189                Object value = getDynaBean().get(key);
+190                set.add(new MapEntry(key, value));
+191            }
+192            return Collections.unmodifiableSet(set);
+193        }
+194    
+195        /**
+196         * Return the value for the specified key from
+197         * the decorated {@link DynaBean}.
+198         *
+199         * @param key The {@link DynaBean}'s property name
+200         * @return The value for the specified property.
+201         */
+202        public Object get(Object key) {
+203            return getDynaBean().get(toString(key));
+204        }
+205    
+206        /**
+207         * Indicate whether the decorated {@link DynaBean} has
+208         * any properties.
+209         *
+210         * @return <code>true</code> if the {@link DynaBean} has
+211         * no properties, otherwise <code>false</code>.
+212         */
+213        public boolean isEmpty() {
+214            return (getDynaProperties().length == 0);
+215        }
+216    
+217        /**
+218         * <p>Returns the Set of the property
+219         * names in the decorated {@link DynaBean}.</p>
+220         *
+221         * <p><b>N.B.</b>For {@link DynaBean}s whose associated {@link DynaClass}
+222         * is a {@link MutableDynaClass} a new Set is created every
+223         * time, otherwise the Set is created only once and cached.</p>
+224         *
+225         * @return An unmodifiable set of the {@link DynaBean}s
+226         * property names.
+227         */
+228        public Set keySet() {
+229            if (keySet != null) {
+230                return keySet;
+231            }
+232    
+233            // Create a Set of the keys
+234            DynaProperty[] properties = getDynaProperties();
+235            Set set = new HashSet(properties.length);
+236            for (int i = 0; i < properties.length; i++) {
+237                set.add(properties[i].getName());
+238            }
+239            set = Collections.unmodifiableSet(set);
+240    
+241            // Cache the keySet if Not a MutableDynaClass
+242            DynaClass dynaClass = getDynaBean().getDynaClass();
+243            if (!(dynaClass instanceof MutableDynaClass)) {
+244                keySet = set;
+245            }
+246    
+247            return set;
+248    
+249        }
+250    
+251        /**
+252         * Set the value for the specified property in
+253         * the decorated {@link DynaBean}.
+254         *
+255         * @param key The {@link DynaBean}'s property name
+256         * @param value The value for the specified property.
+257         * @return The previous property's value.
+258         * @throws UnsupportedOperationException if
+259         * <code>isReadOnly()</code> is true.
+260         */
+261        public Object put(Object key, Object value) {
+262            if (isReadOnly()) {
+263                throw new UnsupportedOperationException("Map is read only");
+264            }
+265            String property = toString(key);
+266            Object previous = getDynaBean().get(property);
+267            getDynaBean().set(property, value);
+268            return previous;
+269        }
+270    
+271        /**
+272         * Copy the contents of a Map to the decorated {@link DynaBean}.
+273         *
+274         * @param map The Map of values to copy.
+275         * @throws UnsupportedOperationException if
+276         * <code>isReadOnly()</code> is true.
+277         */
+278        public void putAll(Map map) {
+279            if (isReadOnly()) {
+280                throw new UnsupportedOperationException("Map is read only");
+281            }
+282            Iterator keys = map.keySet().iterator();
+283            while (keys.hasNext()) {
+284                Object key = keys.next();
+285                put(key, map.get(key));
+286            }
+287        }
+288    
+289        /**
+290         * remove() operation is not supported.
+291         *
+292         * @param key The {@link DynaBean}'s property name
+293         * @return the value removed
+294         * @throws UnsupportedOperationException
+295         */
+296        public Object remove(Object key) {
+297            throw new UnsupportedOperationException();
+298        }
+299    
+300        /**
+301         * Returns the number properties in the decorated
+302         * {@link DynaBean}.
+303         * @return The number of properties.
+304         */
+305        public int size() {
+306            return getDynaProperties().length;
+307        }
+308    
+309        /**
+310         * Returns the set of property values in the
+311         * decorated {@link DynaBean}.
+312         *
+313         * @return Unmodifiable collection of values.
+314         */
+315        public Collection values() {
+316            DynaProperty[] properties = getDynaProperties();
+317            List values = new ArrayList(properties.length);
+318            for (int i = 0; i < properties.length; i++) {
+319                String key = properties[i].getName();
+320                Object value = getDynaBean().get(key);
+321                values.add(value);
+322            }
+323            return Collections.unmodifiableList(values);
+324        }
+325    
+326        // ------------------- protected Methods -----------------------------
+327    
+328        /**
+329         * Provide access to the underlying {@link DynaBean}
+330         * this Map decorates.
+331         *
+332         * @return the decorated {@link DynaBean}.
+333         */
+334        public DynaBean getDynaBean() {
+335            return dynaBean;
+336        }
+337    
+338        // ------------------- private Methods -------------------------------
+339    
+340        /**
+341         * Convenience method to retrieve the {@link DynaProperty}s
+342         * for this {@link DynaClass}.
+343         *
+344         * @return The an array of the {@link DynaProperty}s.
+345         */
+346        private DynaProperty[] getDynaProperties() {
+347            return getDynaBean().getDynaClass().getDynaProperties();
+348        }
+349    
+350        /**
+351         * Convenience method to convert an Object
+352         * to a String.
+353         *
+354         * @param obj The Object to convert
+355         * @return String representation of the object
+356         */
+357        private String toString(Object obj) {
+358            return (obj == null ? null : obj.toString());
+359        }
+360    
+361        /**
+362         * Map.Entry implementation.
+363         */
+364        private static class MapEntry implements Map.Entry {
+365            private Object key;
+366            private Object value;
+367            MapEntry(Object key, Object value) {
+368                this.key = key;
+369                this.value = value;
+370            }
+371            public boolean equals(Object o) {
+372                if (!(o instanceof Map.Entry)) {
+373                    return false;
+374                }
+375                Map.Entry e = (Map.Entry)o;
+376                return ((key.equals(e.getKey())) &&
+377                        (value == null ? e.getValue() == null
+378                                       : value.equals(e.getValue())));
+379            }
+380            public int hashCode() {
+381                return key.hashCode() + (value == null ? 0 : value.hashCode());
+382            }
+383            public Object getKey() {
+384                return key;
+385            }
+386            public Object getValue() {
+387                return value;
+388            }
+389            public Object setValue(Object value) {
+390                throw new UnsupportedOperationException();
+391            }
+392        }
+393    
+394    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaClass.html new file mode 100644 index 0000000..912aa2c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaClass.html @@ -0,0 +1,161 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    
+023    
+024    
+025    /**
+026     * <p>A <strong>DynaClass</strong> is a simulation of the functionality of
+027     * <code>java.lang.Class</code> for classes implementing the
+028     * <code>DynaBean</code> interface.  DynaBean instances that share the same
+029     * DynaClass all have the same set of available properties, along with any
+030     * associated data types, read-only states, and write-only states.</p>
+031     *
+032     * @author Craig McClanahan
+033     * @author Michael Smith
+034     * @author Paulo Gaspar
+035     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+036     */
+037    
+038    public interface DynaClass {
+039    
+040    
+041        /**
+042         * Return the name of this DynaClass (analogous to the
+043         * <code>getName()</code> method of <code>java.lang.Class</code), which
+044         * allows the same <code>DynaClass</code> implementation class to support
+045         * different dynamic classes, with different sets of properties.
+046         *
+047         * @return the name of the DynaClass
+048         */
+049        public String getName();
+050    
+051    
+052        /**
+053         * Return a property descriptor for the specified property, if it exists;
+054         * otherwise, return <code>null</code>.
+055         *
+056         * @param name Name of the dynamic property for which a descriptor
+057         *  is requested
+058         * @return The descriptor for the specified property
+059         *
+060         * @exception IllegalArgumentException if no property name is specified
+061         */
+062        public DynaProperty getDynaProperty(String name);
+063    
+064    
+065        /**
+066         * <p>Return an array of <code>ProperyDescriptors</code> for the properties
+067         * currently defined in this DynaClass.  If no properties are defined, a
+068         * zero-length array will be returned.</p>
+069         *
+070         * <p><strong>FIXME</strong> - Should we really be implementing
+071         * <code>getBeanInfo()</code> instead, which returns property descriptors
+072         * and a bunch of other stuff?</p>
+073         *
+074         * @return the set of properties for this DynaClass
+075         */
+076        public DynaProperty[] getDynaProperties();
+077    
+078    
+079        /**
+080         * Instantiate and return a new DynaBean instance, associated
+081         * with this DynaClass.
+082         *
+083         * @return A new <code>DynaBean</code> instance
+084         *
+085         * @exception IllegalAccessException if the Class or the appropriate
+086         *  constructor is not accessible
+087         * @exception InstantiationException if this Class represents an abstract
+088         *  class, an array class, a primitive type, or void; or if instantiation
+089         *  fails for some other reason
+090         */
+091        public DynaBean newInstance()
+092                throws IllegalAccessException, InstantiationException;
+093    
+094    
+095    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaProperty.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaProperty.html new file mode 100644 index 0000000..76fa690 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/DynaProperty.html @@ -0,0 +1,435 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.io.IOException;
+023    import java.io.Serializable;
+024    import java.io.ObjectOutputStream;
+025    import java.io.ObjectInputStream;
+026    import java.io.StreamCorruptedException;
+027    import java.util.List;
+028    import java.util.Map;
+029    
+030    
+031    /**
+032     * <p>The metadata describing an individual property of a DynaBean.</p>
+033     *
+034     * <p>The meta contains an <em>optional</em> content type property ({@link #getContentType})
+035     * for use by mapped and iterated properties. 
+036     * A mapped or iterated property may choose to indicate the type it expects.
+037     * The DynaBean implementation may choose to enforce this type on its entries.
+038     * Alternatively, an implementatin may choose to ignore this property.
+039     * All keys for maps must be of type String so no meta data is needed for map keys.</p>
+040     *
+041     * @author Craig R. McClanahan
+042     * @version $Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+043     */
+044    
+045    public class DynaProperty implements Serializable {
+046    
+047        // ----------------------------------------------------------- Constants
+048        
+049        /*
+050         * There are issues with serializing primitive class types on certain JVM versions
+051         * (including java 1.3).
+052         * This class uses a custom serialization implementation that writes an integer
+053         * for these primitive class.
+054         * This list of constants are the ones used in serialization.
+055         * If these values are changed, then older versions will no longer be read correctly
+056         */
+057        private static final int BOOLEAN_TYPE = 1;
+058        private static final int BYTE_TYPE = 2;
+059        private static final int CHAR_TYPE = 3;
+060        private static final int DOUBLE_TYPE = 4;
+061        private static final int FLOAT_TYPE = 5;
+062        private static final int INT_TYPE = 6;
+063        private static final int LONG_TYPE = 7;
+064        private static final int SHORT_TYPE = 8;
+065        
+066    
+067        // ----------------------------------------------------------- Constructors
+068    
+069    
+070        /**
+071         * Construct a property that accepts any data type.
+072         *
+073         * @param name Name of the property being described
+074         */
+075        public DynaProperty(String name) {
+076    
+077            this(name, Object.class);
+078    
+079        }
+080    
+081    
+082        /**
+083         * Construct a property of the specified data type.
+084         *
+085         * @param name Name of the property being described
+086         * @param type Java class representing the property data type
+087         */
+088        public DynaProperty(String name, Class type) {
+089    
+090            super();
+091            this.name = name;
+092            this.type = type;
+093            if (type != null && type.isArray()) {
+094                this.contentType = type.getComponentType();
+095            }
+096    
+097        }
+098        
+099        /**
+100         * Construct an indexed or mapped <code>DynaProperty</code> that supports (pseudo)-introspection
+101         * of the content type.
+102         *
+103         * @param name Name of the property being described
+104         * @param type Java class representing the property data type
+105         * @param contentType Class that all indexed or mapped elements are instances of
+106         */
+107        public DynaProperty(String name, Class type, Class contentType) {
+108    
+109            super();
+110            this.name = name;
+111            this.type = type;
+112            this.contentType = contentType;
+113            
+114        }
+115    
+116        // ------------------------------------------------------------- Properties
+117    
+118        /** Property name */
+119        protected String name = null;
+120        /**
+121         * Get the name of this property.
+122         * @return the name of the property
+123         */
+124        public String getName() {
+125            return (this.name);
+126        }
+127        
+128        /** Property type */
+129        protected transient Class type = null;
+130        /**
+131         * <p>Gets the Java class representing the data type of the underlying property
+132         * values.</p>
+133         * 
+134         * <p>There are issues with serializing primitive class types on certain JVM versions
+135         * (including java 1.3).
+136         * Therefore, this field <strong>must not be serialized using the standard methods</strong>.</p>
+137         * 
+138         * <p><strong>Please leave this field as <code>transient</code></strong></p>
+139         *
+140         * @return the property type
+141         */
+142        public Class getType() {
+143            return (this.type);
+144        }
+145        
+146        
+147        /** The <em>(optional)</em> type of content elements for indexed <code>DynaProperty</code> */
+148        protected transient Class contentType;
+149        /**
+150         * Gets the <em>(optional)</em> type of the indexed content for <code>DynaProperty</code>'s
+151         * that support this feature.
+152         *
+153         * <p>There are issues with serializing primitive class types on certain JVM versions
+154         * (including java 1.3).
+155         * Therefore, this field <strong>must not be serialized using the standard methods</strong>.</p>
+156         *
+157         * @return the Class for the content type if this is an indexed <code>DynaProperty</code> 
+158         * and this feature is supported. Otherwise null.
+159         */
+160        public Class getContentType() {
+161            return contentType;
+162        }
+163        
+164        // --------------------------------------------------------- Public Methods
+165    
+166    
+167        /**
+168         * Does this property represent an indexed value (ie an array or List)?
+169         *
+170         * @return <code>true</code> if the property is indexed (i.e. is a List or
+171         * array), otherwise <code>false</code>
+172         */
+173        public boolean isIndexed() {
+174    
+175            if (type == null) {
+176                return (false);
+177            } else if (type.isArray()) {
+178                return (true);
+179            } else if (List.class.isAssignableFrom(type)) {
+180                return (true);
+181            } else {
+182                return (false);
+183            }
+184    
+185        }
+186    
+187    
+188        /**
+189         * Does this property represent a mapped value (ie a Map)?
+190         *
+191         * @return <code>true</code> if the property is a Map
+192         * otherwise <code>false</code>
+193         */
+194        public boolean isMapped() {
+195    
+196            if (type == null) {
+197                return (false);
+198            } else {
+199                return (Map.class.isAssignableFrom(type));
+200            }
+201    
+202        }
+203    
+204        /**
+205         * Checks this instance against the specified Object for equality. Overrides the
+206         * default refererence test for equality provided by {@link java.lang.Object#equals(Object)}  
+207         * @param obj The object to compare to
+208         * @return <code>true</code> if object is a dyna property with the same name
+209         * type and content type, otherwise <code>false</code>
+210         * @since 1.8.0
+211         */
+212        public boolean equals(final Object obj) {
+213    
+214            boolean result = false;
+215    
+216            result = (obj == this);
+217    
+218            if ((!result) && obj instanceof DynaProperty) {
+219                final DynaProperty that = (DynaProperty) obj;
+220                result = 
+221                   ((this.name == null) ? (that.name == null) : (this.name.equals(that.name))) &&
+222                   ((this.type == null) ? (that.type == null) : (this.type.equals(that.type))) &&
+223                   ((this.contentType == null) ? (that.contentType == null) : (this.contentType.equals(that.contentType)));
+224            }
+225    
+226            return result;
+227        }
+228    
+229        /**
+230         * @return the hashcode for this dyna property
+231         * @see java.lang.Object#hashCode
+232         * @since 1.8.0
+233         */
+234        public int hashCode() {
+235    
+236           int result = 1;
+237           
+238           result = result * 31 + ((name == null) ? 0 : name.hashCode());
+239           result = result * 31 + ((type == null) ? 0 : type.hashCode());
+240           result = result * 31 + ((contentType == null) ? 0 : contentType.hashCode());
+241    
+242           return result;
+243        }
+244    
+245        /**
+246         * Return a String representation of this Object.
+247         * @return a String representation of the dyna property
+248         */
+249        public String toString() {
+250    
+251            StringBuffer sb = new StringBuffer("DynaProperty[name=");
+252            sb.append(this.name);
+253            sb.append(",type=");
+254            sb.append(this.type);
+255            if (isMapped() || isIndexed()) {
+256                sb.append(" <").append(this.contentType).append(">");
+257            }
+258            sb.append("]");
+259            return (sb.toString());
+260    
+261        }
+262    
+263        // --------------------------------------------------------- Serialization helper methods
+264        
+265        /**
+266         * Writes this object safely.
+267         * There are issues with serializing primitive class types on certain JVM versions
+268         * (including java 1.3).
+269         * This method provides a workaround.
+270         */
+271        private void writeObject(ObjectOutputStream out) throws IOException {
+272            
+273            writeAnyClass(this.type,out);
+274            
+275            if (isMapped() || isIndexed()) {
+276                writeAnyClass(this.contentType,out);
+277            }
+278            
+279            // write out other values
+280            out.defaultWriteObject();
+281        }
+282    
+283        /**
+284         * Write a class using safe encoding to workaround java 1.3 serialization bug.
+285         */
+286        private void writeAnyClass(Class clazz, ObjectOutputStream out) throws IOException {
+287            // safely write out any class
+288            int primitiveType = 0;
+289            if (Boolean.TYPE.equals(clazz)) {
+290                primitiveType = BOOLEAN_TYPE;
+291            } else if (Byte.TYPE.equals(clazz)) {
+292                primitiveType = BYTE_TYPE;
+293            } else if (Character.TYPE.equals(clazz)) {
+294                primitiveType = CHAR_TYPE;
+295            } else if (Double.TYPE.equals(clazz)) {
+296                primitiveType = DOUBLE_TYPE;
+297            } else if (Float.TYPE.equals(clazz)) {
+298                primitiveType = FLOAT_TYPE;
+299            } else if (Integer.TYPE.equals(clazz)) {
+300                primitiveType = INT_TYPE;
+301            } else if (Long.TYPE.equals(clazz)) {
+302                primitiveType = LONG_TYPE;
+303            } else if (Short.TYPE.equals(clazz)) {
+304                primitiveType = SHORT_TYPE;
+305            }
+306            
+307            if (primitiveType == 0) {
+308                // then it's not a primitive type
+309                out.writeBoolean(false);
+310                out.writeObject(clazz);
+311            } else {
+312                // we'll write out a constant instead
+313                out.writeBoolean(true);
+314                out.writeInt(primitiveType);
+315            }
+316        }
+317        
+318        /**
+319         * Reads field values for this object safely.
+320         * There are issues with serializing primitive class types on certain JVM versions
+321         * (including java 1.3).
+322         * This method provides a workaround.
+323         *
+324         * @throws StreamCorruptedException when the stream data values are outside expected range 
+325         */
+326        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+327            
+328            this.type = readAnyClass(in);
+329            
+330            if (isMapped() || isIndexed()) {
+331                this.contentType = readAnyClass(in);
+332            }
+333            
+334            // read other values
+335            in.defaultReadObject();
+336        }
+337        
+338    
+339        /**
+340         * Reads a class using safe encoding to workaround java 1.3 serialization bug.
+341         */
+342        private Class readAnyClass(ObjectInputStream in) throws IOException, ClassNotFoundException {
+343            // read back type class safely 
+344            if (in.readBoolean()) {
+345                // it's a type constant
+346                switch (in.readInt()) {
+347                
+348                    case BOOLEAN_TYPE: return   Boolean.TYPE;
+349                    case BYTE_TYPE:    return      Byte.TYPE;
+350                    case CHAR_TYPE:    return Character.TYPE;
+351                    case DOUBLE_TYPE:  return    Double.TYPE;
+352                    case FLOAT_TYPE:   return     Float.TYPE;
+353                    case INT_TYPE:     return   Integer.TYPE;
+354                    case LONG_TYPE:    return      Long.TYPE;
+355                    case SHORT_TYPE:   return     Short.TYPE;
+356                    default:
+357                        // something's gone wrong
+358                        throw new StreamCorruptedException(
+359                            "Invalid primitive type. "
+360                            + "Check version of beanutils used to serialize is compatible.");
+361    
+362                }
+363                  
+364            } else {
+365                // it's another class
+366                return ((Class) in.readObject());
+367            }
+368        }
+369    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaBean.html new file mode 100644 index 0000000..93107f8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaBean.html @@ -0,0 +1,998 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    import java.util.List;
+020    import java.util.ArrayList;
+021    import java.util.Map;
+022    import java.util.HashMap;
+023    import java.util.Date;
+024    import java.lang.reflect.Array;
+025    import java.math.BigDecimal;
+026    import java.math.BigInteger;
+027    import java.io.Serializable;
+028    import org.apache.commons.logging.Log;
+029    import org.apache.commons.logging.LogFactory;
+030    
+031    /**
+032     * <p>DynaBean which automatically adds properties to the <code>DynaClass</code>
+033     *   and provides <i>Lazy List</i> and <i>Lazy Map</i> features.</p>
+034     *
+035     * <p>DynaBeans deal with three types of properties - <i>simple</i>, <i>indexed</i> and <i>mapped</i> and
+036     *    have the following <code>get()</code> and <code>set()</code> methods for
+037     *    each of these types:</p>
+038     *    <ul>
+039     *        <li><i>Simple</i> property methods - <code>get(name)</code> and
+040     *                          <code>set(name, value)</code></li>
+041     *        <li><i>Indexed</i> property methods - <code>get(name, index)</code> and
+042     *                          <code>set(name, index, value)</code></li>
+043     *        <li><i>Mapped</i> property methods - <code>get(name, key)</code> and
+044     *                          <code>set(name, key, value)</code></li>
+045     *    </ul>
+046     *
+047     * <p><b><u>Getting Property Values</u></b></p>
+048     * <p>Calling any of the <code>get()</code> methods, for a property which
+049     *    doesn't exist, returns <code>null</code> in this implementation.</p>
+050     *
+051     * <p><b><u>Setting Simple Properties</u></b></p>
+052     *    <p>The <code>LazyDynaBean</code> will automatically add a property to the <code>DynaClass</code>
+053     *       if it doesn't exist when the <code>set(name, value)</code> method is called.</p>
+054     *
+055     *     <code>DynaBean myBean = new LazyDynaBean();</code></br>
+056     *     <code>myBean.set("myProperty", "myValue");</code></br>
+057     *
+058     * <p><b><u>Setting Indexed Properties</u></b></p>
+059     *    <p>If the property <b>doesn't</b> exist, the <code>LazyDynaBean</code> will automatically add
+060     *       a property with an <code>ArrayList</code> type to the <code>DynaClass</code> when
+061     *       the <code>set(name, index, value)</code> method is called.
+062     *       It will also instantiate a new <code>ArrayList</code> and automatically <i>grow</i>
+063     *       the <code>List</code> so that it is big enough to accomodate the index being set.
+064     *       <code>ArrayList</code> is the default indexed property that LazyDynaBean uses but
+065     *       this can be easily changed by overriding the <code>defaultIndexedProperty(name)</code>
+066     *       method.</p>
+067     *
+068     *     <code>DynaBean myBean = new LazyDynaBean();</code></br>
+069     *     <code>myBean.set("myIndexedProperty", 0, "myValue1");</code></br>
+070     *     <code>myBean.set("myIndexedProperty", 1, "myValue2");</code></br>
+071     *
+072     *    <p>If the indexed property <b>does</b> exist in the <code>DynaClass</code> but is set to
+073     *      <code>null</code> in the <code>LazyDynaBean</code>, then it will instantiate a
+074     *      new <code>List</code> or <code>Array</code> as specified by the property's type
+075     *      in the <code>DynaClass</code> and automatically <i>grow</i> the <code>List</code>
+076     *      or <code>Array</code> so that it is big enough to accomodate the index being set.</p>
+077     *
+078     *     <code>DynaBean myBean = new LazyDynaBean();</code></br>
+079     *     <code>MutableDynaClass myClass = (MutableDynaClass)myBean.getDynaClass();</code></br>
+080     *     <code>myClass.add("myIndexedProperty", int[].class);</code></br>
+081     *     <code>myBean.set("myIndexedProperty", 0, new Integer(10));</code></br>
+082     *     <code>myBean.set("myIndexedProperty", 1, new Integer(20));</code></br>
+083     *
+084     * <p><b><u>Setting Mapped Properties</u></b></p>
+085     *    <p>If the property <b>doesn't</b> exist, the <code>LazyDynaBean</code> will automatically add
+086     *       a property with a <code>HashMap</code> type to the <code>DynaClass</code> and
+087     *       instantiate a new <code>HashMap</code> in the DynaBean when the
+088     *       <code>set(name, key, value)</code> method is called. <code>HashMap</code> is the default
+089     *       mapped property that LazyDynaBean uses but this can be easily changed by overriding
+090     *       the <code>defaultMappedProperty(name)</code> method.</p>
+091     *
+092     *     <code>DynaBean myBean = new LazyDynaBean();</code></br>
+093     *     <code>myBean.set("myMappedProperty", "myKey", "myValue");</code></br>
+094     *
+095     *    <p>If the mapped property <b>does</b> exist in the <code>DynaClass</code> but is set to
+096     *      <code>null</code> in the <code>LazyDynaBean</code>, then it will instantiate a
+097     *      new <code>Map</code> as specified by the property's type in the <code>DynaClass</code>.</p>
+098     *
+099     *     <code>DynaBean myBean = new LazyDynaBean();</code></br>
+100     *     <code>MutableDynaClass myClass = (MutableDynaClass)myBean.getDynaClass();</code></br>
+101     *     <code>myClass.add("myMappedProperty", TreeMap.class);</code></br>
+102     *     <code>myBean.set("myMappedProperty", "myKey", "myValue");</code></br>
+103     *
+104     * <p><b><u><i>Restricted</i> DynaClass</u></b></p>
+105     *    <p><code>MutableDynaClass</code> have a facility to <i>restrict</i> the <code>DynaClass</code>
+106     *       so that its properties cannot be modified. If the <code>MutableDynaClass</code> is
+107     *       restricted then calling any of the <code>set()</code> methods for a property which
+108     *       doesn't exist will result in a <code>IllegalArgumentException</code> being thrown.</p>
+109     *
+110     * @see LazyDynaClass
+111     * @author Niall Pemberton
+112     */
+113    public class LazyDynaBean implements DynaBean, Serializable {
+114    
+115    
+116       /**
+117        * Commons Logging
+118        */
+119        private transient Log logger = LogFactory.getLog(LazyDynaBean.class);
+120    
+121        /** BigInteger Zero */
+122        protected static final BigInteger BigInteger_ZERO = new BigInteger("0");
+123        /** BigDecimal Zero */
+124        protected static final BigDecimal BigDecimal_ZERO = new BigDecimal("0");
+125        /** Character Space */
+126        protected static final Character  Character_SPACE = new Character(' ');
+127        /** Byte Zero */
+128        protected static final Byte       Byte_ZERO       = new Byte((byte)0);
+129        /** Short Zero */
+130        protected static final Short      Short_ZERO      = new Short((short)0);
+131        /** Integer Zero */
+132        protected static final Integer    Integer_ZERO    = new Integer(0);
+133        /** Long Zero */
+134        protected static final Long       Long_ZERO       = new Long(0);
+135        /** Float Zero */
+136        protected static final Float      Float_ZERO      = new Float((byte)0);
+137        /** Double Zero */
+138        protected static final Double     Double_ZERO     = new Double((byte)0);
+139    
+140        /**
+141         * The <code>MutableDynaClass</code> "base class" that this DynaBean
+142         * is associated with.
+143         */
+144        protected Map values;
+145    
+146        /** Map decorator for this DynaBean */
+147        private transient Map mapDecorator;
+148    
+149        /**
+150         * The <code>MutableDynaClass</code> "base class" that this DynaBean
+151         * is associated with.
+152         */
+153        protected MutableDynaClass dynaClass;
+154    
+155    
+156        // ------------------- Constructors ----------------------------------
+157    
+158        /**
+159         * Construct a new <code>LazyDynaBean</code> with a <code>LazyDynaClass</code> instance.
+160         */
+161        public LazyDynaBean() {
+162            this(new LazyDynaClass());
+163        }
+164    
+165        /**
+166         * Construct a new <code>LazyDynaBean</code> with a <code>LazyDynaClass</code> instance.
+167         *
+168         * @param name Name of this DynaBean class
+169         */
+170        public LazyDynaBean(String name) {
+171            this(new LazyDynaClass(name));
+172        }
+173    
+174        /**
+175         * Construct a new <code>DynaBean</code> associated with the specified
+176         * <code>DynaClass</code> instance - if its not a <code>MutableDynaClass</code>
+177         * then a new <code>LazyDynaClass</code> is created and the properties copied.
+178         *
+179         * @param dynaClass The DynaClass we are associated with
+180         */
+181        public LazyDynaBean(DynaClass dynaClass) {
+182    
+183            values = newMap();
+184    
+185            if (dynaClass instanceof MutableDynaClass) {
+186                this.dynaClass = (MutableDynaClass)dynaClass;
+187            } else {
+188                this.dynaClass = new LazyDynaClass(dynaClass.getName(), dynaClass.getDynaProperties());
+189            }
+190    
+191        }
+192    
+193    
+194        // ------------------- Public Methods ----------------------------------
+195    
+196        /**
+197         * Return a Map representation of this DynaBean.
+198         * </p>
+199         * This, for example, could be used in JSTL in the following way to access
+200         * a DynaBean's <code>fooProperty</code>:
+201         * <ul><li><code>${myDynaBean.<b>map</b>.fooProperty}</code></li></ul>
+202         *
+203         * @return a Map representation of this DynaBean
+204         */
+205        public Map getMap() {
+206            // cache the Map
+207            if (mapDecorator == null) {
+208                mapDecorator = new DynaBeanMapDecorator(this);
+209            }
+210            return mapDecorator;
+211        }
+212    
+213        /**
+214         * <p>Return the size of an indexed or mapped property.</p>
+215         *
+216         * @param name Name of the property
+217         * @return The indexed or mapped property size
+218         * @exception IllegalArgumentException if no property name is specified
+219         */
+220        public int size(String name) {
+221    
+222            if (name == null) {
+223                throw new IllegalArgumentException("No property name specified");
+224            }
+225    
+226            Object value = values.get(name);
+227            if (value == null) {
+228                return 0;
+229            }
+230    
+231            if (value instanceof Map) {
+232                return ((Map)value).size();
+233            }
+234    
+235            if (value instanceof List) {
+236                return ((List)value).size();
+237            }
+238    
+239            if ((value.getClass().isArray())) {
+240                return Array.getLength(value);
+241            }
+242    
+243            return 0;
+244    
+245        }
+246    
+247        // ------------------- DynaBean Methods ----------------------------------
+248    
+249        /**
+250         * Does the specified mapped property contain a value for the specified
+251         * key value?
+252         *
+253         * @param name Name of the property to check
+254         * @param key Name of the key to check
+255         * @return <code>true<code> if the mapped property contains a value for
+256         * the specified key, otherwise <code>false</code>
+257         *
+258         * @exception IllegalArgumentException if no property name is specified
+259         */
+260        public boolean contains(String name, String key) {
+261    
+262            if (name == null) {
+263                throw new IllegalArgumentException("No property name specified");
+264            }
+265    
+266            Object value = values.get(name);
+267            if (value == null) {
+268                return false;
+269            }
+270    
+271            if (value instanceof Map) {
+272                return (((Map) value).containsKey(key));
+273            }
+274    
+275            return false;
+276    
+277        }
+278    
+279        /**
+280         * <p>Return the value of a simple property with the specified name.</p>
+281         *
+282         * <p><strong>N.B.</strong> Returns <code>null</code> if there is no property
+283         *  of the specified name.</p>
+284         *
+285         * @param name Name of the property whose value is to be retrieved.
+286         * @return The property's value
+287         * @exception IllegalArgumentException if no property name is specified
+288         */
+289        public Object get(String name) {
+290    
+291            if (name == null) {
+292                throw new IllegalArgumentException("No property name specified");
+293            }
+294    
+295            // Value found
+296            Object value = values.get(name);
+297            if (value != null) {
+298                return value;
+299            }
+300    
+301            // Property doesn't exist
+302            if (!isDynaProperty(name)) {
+303                return null;
+304            }
+305    
+306            // Property doesn't exist
+307            value = createProperty(name, dynaClass.getDynaProperty(name).getType());
+308    
+309            if (value != null) {
+310                set(name, value);
+311            }
+312    
+313            return value;
+314    
+315        }
+316    
+317        /**
+318         * <p>Return the value of an indexed property with the specified name.</p>
+319         *
+320         * <p><strong>N.B.</strong> Returns <code>null</code> if there is no 'indexed'
+321         * property of the specified name.</p>
+322         *
+323         * @param name Name of the property whose value is to be retrieved
+324         * @param index Index of the value to be retrieved
+325         * @return The indexed property's value
+326         *
+327         * @exception IllegalArgumentException if the specified property
+328         *  exists, but is not indexed
+329         * @exception IndexOutOfBoundsException if the specified index
+330         *  is outside the range of the underlying property
+331         */
+332        public Object get(String name, int index) {
+333    
+334            // If its not a property, then create default indexed property
+335            if (!isDynaProperty(name)) {
+336                set(name, defaultIndexedProperty(name));
+337            }
+338    
+339            // Get the indexed property
+340            Object indexedProperty = get(name);
+341    
+342            // Check that the property is indexed
+343            if (!dynaClass.getDynaProperty(name).isIndexed()) {
+344                throw new IllegalArgumentException
+345                    ("Non-indexed property for '" + name + "[" + index + "]' "
+346                                          + dynaClass.getDynaProperty(name).getName());
+347            }
+348    
+349            // Grow indexed property to appropriate size
+350            indexedProperty = growIndexedProperty(name, indexedProperty, index);
+351    
+352            // Return the indexed value
+353            if (indexedProperty.getClass().isArray()) {
+354                return Array.get(indexedProperty, index);
+355            } else if (indexedProperty instanceof List) {
+356                return ((List)indexedProperty).get(index);
+357            } else {
+358                throw new IllegalArgumentException
+359                    ("Non-indexed property for '" + name + "[" + index + "]' "
+360                                      + indexedProperty.getClass().getName());
+361            }
+362    
+363        }
+364    
+365        /**
+366         * <p>Return the value of a mapped property with the specified name.</p>
+367         *
+368         * <p><strong>N.B.</strong> Returns <code>null</code> if there is no 'mapped'
+369         * property of the specified name.</p>
+370         *
+371         * @param name Name of the property whose value is to be retrieved
+372         * @param key Key of the value to be retrieved
+373         * @return The mapped property's value
+374         *
+375         * @exception IllegalArgumentException if the specified property
+376         *  exists, but is not mapped
+377         */
+378        public Object get(String name, String key) {
+379    
+380            // If its not a property, then create default mapped property
+381            if (!isDynaProperty(name)) {
+382                set(name, defaultMappedProperty(name));
+383            }
+384    
+385            // Get the mapped property
+386            Object mappedProperty = get(name);
+387    
+388            // Check that the property is mapped
+389            if (!dynaClass.getDynaProperty(name).isMapped()) {
+390                throw new IllegalArgumentException
+391                    ("Non-mapped property for '" + name + "(" + key + ")' "
+392                                + dynaClass.getDynaProperty(name).getType().getName());
+393            }
+394    
+395            // Get the value from the Map
+396            if (mappedProperty instanceof Map) {
+397                return (((Map) mappedProperty).get(key));
+398            } else {
+399                throw new IllegalArgumentException
+400                  ("Non-mapped property for '" + name + "(" + key + ")'"
+401                                      + mappedProperty.getClass().getName());
+402            }
+403    
+404        }
+405    
+406    
+407        /**
+408         * Return the <code>DynaClass</code> instance that describes the set of
+409         * properties available for this DynaBean.
+410         *
+411         * @return The associated DynaClass
+412         */
+413        public DynaClass getDynaClass() {
+414            return dynaClass;
+415        }
+416    
+417        /**
+418         * Remove any existing value for the specified key on the
+419         * specified mapped property.
+420         *
+421         * @param name Name of the property for which a value is to
+422         *  be removed
+423         * @param key Key of the value to be removed
+424         *
+425         * @exception IllegalArgumentException if there is no property
+426         *  of the specified name
+427         */
+428        public void remove(String name, String key) {
+429    
+430            if (name == null) {
+431                throw new IllegalArgumentException("No property name specified");
+432            }
+433    
+434            Object value = values.get(name);
+435            if (value == null) {
+436                return;
+437            }
+438    
+439            if (value instanceof Map) {
+440                ((Map) value).remove(key);
+441            } else {
+442                throw new IllegalArgumentException
+443                        ("Non-mapped property for '" + name + "(" + key + ")'"
+444                                + value.getClass().getName());
+445            }
+446    
+447        }
+448    
+449        /**
+450         * Set the value of a simple property with the specified name.
+451         *
+452         * @param name Name of the property whose value is to be set
+453         * @param value Value to which this property is to be set
+454         *
+455         * @exception IllegalArgumentException if this is not an existing property
+456         *  name for our DynaClass and the MutableDynaClass is restricted
+457         * @exception ConversionException if the specified value cannot be
+458         *  converted to the type required for this property
+459         * @exception NullPointerException if an attempt is made to set a
+460         *  primitive property to null
+461         */
+462        public void set(String name, Object value) {
+463    
+464            // If the property doesn't exist, then add it
+465            if (!isDynaProperty(name)) {
+466    
+467                if (dynaClass.isRestricted()) {
+468                    throw new IllegalArgumentException
+469                        ("Invalid property name '" + name + "' (DynaClass is restricted)");
+470                }
+471                if (value == null) {
+472                    dynaClass.add(name);
+473                } else {
+474                    dynaClass.add(name, value.getClass());
+475                }
+476    
+477            }
+478    
+479            DynaProperty descriptor = dynaClass.getDynaProperty(name);
+480    
+481            if (value == null) {
+482                if (descriptor.getType().isPrimitive()) {
+483                    throw new NullPointerException
+484                            ("Primitive value for '" + name + "'");
+485                }
+486            } else if (!isAssignable(descriptor.getType(), value.getClass())) {
+487                throw new ConversionException
+488                        ("Cannot assign value of type '" +
+489                        value.getClass().getName() +
+490                        "' to property '" + name + "' of type '" +
+491                        descriptor.getType().getName() + "'");
+492            }
+493    
+494            // Set the property's value
+495            values.put(name, value);
+496    
+497        }
+498    
+499        /**
+500         * Set the value of an indexed property with the specified name.
+501         *
+502         * @param name Name of the property whose value is to be set
+503         * @param index Index of the property to be set
+504         * @param value Value to which this property is to be set
+505         *
+506         * @exception ConversionException if the specified value cannot be
+507         *  converted to the type required for this property
+508         * @exception IllegalArgumentException if there is no property
+509         *  of the specified name
+510         * @exception IllegalArgumentException if the specified property
+511         *  exists, but is not indexed
+512         * @exception IndexOutOfBoundsException if the specified index
+513         *  is outside the range of the underlying property
+514         */
+515        public void set(String name, int index, Object value) {
+516    
+517            // If its not a property, then create default indexed property
+518            if (!isDynaProperty(name)) {
+519                set(name, defaultIndexedProperty(name));
+520            }
+521    
+522            // Get the indexed property
+523            Object indexedProperty = get(name);
+524    
+525            // Check that the property is indexed
+526            if (!dynaClass.getDynaProperty(name).isIndexed()) {
+527                throw new IllegalArgumentException
+528                    ("Non-indexed property for '" + name + "[" + index + "]'"
+529                                + dynaClass.getDynaProperty(name).getType().getName());
+530            }
+531    
+532            // Grow indexed property to appropriate size
+533            indexedProperty = growIndexedProperty(name, indexedProperty, index);
+534    
+535            // Set the value in an array
+536            if (indexedProperty.getClass().isArray()) {
+537                Array.set(indexedProperty, index, value);
+538            } else if (indexedProperty instanceof List) {
+539                ((List)indexedProperty).set(index, value);
+540            } else {
+541                throw new IllegalArgumentException
+542                    ("Non-indexed property for '" + name + "[" + index + "]' "
+543                                + indexedProperty.getClass().getName());
+544            }
+545    
+546        }
+547    
+548        /**
+549         * Set the value of a mapped property with the specified name.
+550         *
+551         * @param name Name of the property whose value is to be set
+552         * @param key Key of the property to be set
+553         * @param value Value to which this property is to be set
+554         *
+555         * @exception ConversionException if the specified value cannot be
+556         *  converted to the type required for this property
+557         * @exception IllegalArgumentException if there is no property
+558         *  of the specified name
+559         * @exception IllegalArgumentException if the specified property
+560         *  exists, but is not mapped
+561         */
+562        public void set(String name, String key, Object value) {
+563    
+564            // If the 'mapped' property doesn't exist, then add it
+565            if (!isDynaProperty(name)) {
+566                set(name, defaultMappedProperty(name));
+567            }
+568    
+569            // Get the mapped property
+570            Object mappedProperty = get(name);
+571    
+572            // Check that the property is mapped
+573            if (!dynaClass.getDynaProperty(name).isMapped()) {
+574                throw new IllegalArgumentException
+575                    ("Non-mapped property for '" + name + "(" + key + ")'"
+576                                + dynaClass.getDynaProperty(name).getType().getName());
+577            }
+578    
+579            // Set the value in the Map
+580            ((Map)mappedProperty).put(key, value);
+581    
+582        }
+583    
+584        // ------------------- protected Methods ----------------------------------
+585    
+586        /**
+587         * Grow the size of an indexed property
+588         * @param name The name of the property
+589         * @param indexedProperty The current property value
+590         * @param index The indexed value to grow the property to (i.e. one less than
+591         * the required size)
+592         * @return The new property value (grown to the appropriate size)
+593         */
+594        protected Object growIndexedProperty(String name, Object indexedProperty, int index) {
+595    
+596            // Grow a List to the appropriate size
+597            if (indexedProperty instanceof List) {
+598    
+599                List list = (List)indexedProperty;
+600                while (index >= list.size()) {
+601                    Class contentType = getDynaClass().getDynaProperty(name).getContentType();
+602                    Object value = null;
+603                    if (contentType != null) {
+604                        value = createProperty(name+"["+list.size()+"]", contentType);
+605                    }
+606                    list.add(value);
+607                }
+608    
+609            }
+610    
+611            // Grow an Array to the appropriate size
+612            if ((indexedProperty.getClass().isArray())) {
+613    
+614                int length = Array.getLength(indexedProperty);
+615                if (index >= length) {
+616                    Class componentType = indexedProperty.getClass().getComponentType();
+617                    Object newArray = Array.newInstance(componentType, (index + 1));
+618                    System.arraycopy(indexedProperty, 0, newArray, 0, length);
+619                    indexedProperty = newArray;
+620                    set(name, indexedProperty);
+621                    int newLength = Array.getLength(indexedProperty);
+622                    for (int i = length; i < newLength; i++) {
+623                        Array.set(indexedProperty, i, createProperty(name+"["+i+"]", componentType));
+624                    }
+625                }
+626            }
+627    
+628            return indexedProperty;
+629    
+630        }
+631    
+632        /**
+633         * Create a new Instance of a Property
+634         * @param name The name of the property
+635         * @param type The class of the property
+636         * @return The new value
+637         */
+638        protected Object createProperty(String name, Class type) {
+639            if (type == null) {
+640                return null;
+641            }
+642    
+643            // Create Lists, arrays or DynaBeans
+644            if (type.isArray() || List.class.isAssignableFrom(type)) {
+645                return createIndexedProperty(name, type);
+646            }
+647    
+648            if (Map.class.isAssignableFrom(type)) {
+649                return createMappedProperty(name, type);
+650            }
+651    
+652            if (DynaBean.class.isAssignableFrom(type)) {
+653                return createDynaBeanProperty(name, type);
+654            }
+655    
+656            if (type.isPrimitive()) {
+657                return createPrimitiveProperty(name, type);
+658            }
+659    
+660            if (Number.class.isAssignableFrom(type)) {
+661                return createNumberProperty(name, type);
+662            }
+663    
+664            return createOtherProperty(name, type);
+665    
+666        }
+667    
+668        /**
+669         * Create a new Instance of an 'Indexed' Property
+670         * @param name The name of the property
+671         * @param type The class of the property
+672         * @return The new value
+673         */
+674        protected Object createIndexedProperty(String name, Class type) {
+675    
+676            // Create the indexed object
+677            Object indexedProperty = null;
+678    
+679            if (type == null) {
+680    
+681                indexedProperty = defaultIndexedProperty(name);
+682    
+683            } else if (type.isArray()) {
+684    
+685                indexedProperty = Array.newInstance(type.getComponentType(), 0);
+686    
+687            } else if (List.class.isAssignableFrom(type)) {
+688                if (type.isInterface()) {
+689                    indexedProperty = defaultIndexedProperty(name);
+690                } else {
+691                    try {
+692                        indexedProperty = type.newInstance();
+693                    }
+694                    catch (Exception ex) {
+695                        throw new IllegalArgumentException
+696                            ("Error instantiating indexed property of type '" +
+697                                       type.getName() + "' for '" + name + "' " + ex);
+698                    }
+699                }
+700            } else {
+701    
+702                throw new IllegalArgumentException
+703                        ("Non-indexed property of type '" + type.getName() + "' for '" + name + "'");
+704            }
+705    
+706            return indexedProperty;
+707    
+708        }
+709    
+710        /**
+711         * Create a new Instance of a 'Mapped' Property
+712         * @param name The name of the property
+713         * @param type The class of the property
+714         * @return The new value
+715         */
+716        protected Object createMappedProperty(String name, Class type) {
+717    
+718            // Create the mapped object
+719            Object mappedProperty = null;
+720    
+721            if (type == null) {
+722    
+723                mappedProperty = defaultMappedProperty(name);
+724    
+725            } else if (type.isInterface()) {
+726    
+727                mappedProperty = defaultMappedProperty(name);
+728    
+729            } else if (Map.class.isAssignableFrom(type)) {
+730                try {
+731                    mappedProperty = type.newInstance();
+732                }
+733                catch (Exception ex) {
+734                    throw new IllegalArgumentException
+735                        ("Error instantiating mapped property of type '" +
+736                                type.getName() + "' for '" + name + "' " + ex);
+737                }
+738            } else {
+739    
+740                throw new IllegalArgumentException
+741                        ("Non-mapped property of type '" + type.getName() + "' for '" + name + "'");
+742            }
+743    
+744            return mappedProperty;
+745    
+746        }
+747    
+748        /**
+749         * Create a new Instance of a 'DynaBean' Property.
+750         * @param name The name of the property
+751         * @param type The class of the property
+752         * @return The new value
+753         */
+754        protected Object createDynaBeanProperty(String name, Class type) {
+755            try {
+756                return type.newInstance();
+757            }
+758            catch (Exception ex) {
+759                if (logger().isWarnEnabled()) {
+760                    logger().warn("Error instantiating DynaBean property of type '" +
+761                            type.getName() + "' for '" + name + "' " + ex);
+762                }
+763                return null;
+764            }
+765        }
+766    
+767        /**
+768         * Create a new Instance of a 'Primitive' Property.
+769         * @param name The name of the property
+770         * @param type The class of the property
+771         * @return The new value
+772         */
+773        protected Object createPrimitiveProperty(String name, Class type) {
+774    
+775            if (type == Boolean.TYPE) {
+776                return Boolean.FALSE;
+777            } else if (type == Integer.TYPE) {
+778                return Integer_ZERO;
+779            } else if (type == Long.TYPE) {
+780                return Long_ZERO;
+781            } else if (type == Double.TYPE) {
+782                return Double_ZERO;
+783            } else if (type == Float.TYPE) {
+784                return Float_ZERO;
+785            } else if (type == Byte.TYPE) {
+786                return Byte_ZERO;
+787            } else if (type == Short.TYPE) {
+788                return Short_ZERO;
+789            } else if (type == Character.TYPE) {
+790                return Character_SPACE;
+791            } else {
+792                return null;
+793            }
+794    
+795        }
+796    
+797        /**
+798         * Create a new Instance of a <code>java.lang.Number</code> Property.
+799         * @param name The name of the property
+800         * @param type The class of the property
+801         * @return The new value
+802         */
+803        protected Object createNumberProperty(String name, Class type) {
+804    
+805            return null;
+806    
+807        }
+808    
+809        /**
+810         * Create a new Instance of other Property types
+811         * @param name The name of the property
+812         * @param type The class of the property
+813         * @return The new value
+814         */
+815        protected Object createOtherProperty(String name, Class type) {
+816    
+817            if (type == Object.class    ||
+818                type == String.class    ||
+819                type == Boolean.class   ||
+820                type == Character.class ||
+821                Date.class.isAssignableFrom(type)) {
+822    
+823                return null;
+824    
+825            }
+826    
+827            try {
+828                return type.newInstance();
+829            }
+830            catch (Exception ex) {
+831                if (logger().isWarnEnabled()) {
+832                    logger().warn("Error instantiating property of type '" + type.getName() + "' for '" + name + "' " + ex);
+833                }
+834                return null;
+835            }
+836        }
+837    
+838        /**
+839         * <p>Creates a new <code>ArrayList</code> for an 'indexed' property
+840         *    which doesn't exist.</p>
+841         *
+842         * <p>This method shouls be overriden if an alternative <code>List</code>
+843         *    or <code>Array</code> implementation is required for 'indexed' properties.</p>
+844         *
+845         * @param name Name of the 'indexed property.
+846         * @return The default value for an indexed property (java.util.ArrayList)
+847         */
+848        protected Object defaultIndexedProperty(String name) {
+849            return new ArrayList();
+850        }
+851    
+852        /**
+853         * <p>Creates a new <code>HashMap</code> for a 'mapped' property
+854         *    which doesn't exist.</p>
+855         *
+856         * <p>This method can be overriden if an alternative <code>Map</code>
+857         *    implementation is required for 'mapped' properties.</p>
+858         *
+859         * @param name Name of the 'mapped property.
+860         * @return The default value for a mapped property (java.util.HashMap)
+861         */
+862        protected Map defaultMappedProperty(String name) {
+863            return new HashMap();
+864        }
+865    
+866        /**
+867         * Indicates if there is a property with the specified name.
+868         * @param name The name of the property to check
+869         * @return <code>true<code> if there is a property of the
+870         * specified name, otherwise <code>false</code>
+871         */
+872        protected boolean isDynaProperty(String name) {
+873    
+874            if (name == null) {
+875                throw new IllegalArgumentException("No property name specified");
+876            }
+877    
+878            // Handle LazyDynaClasses
+879            if (dynaClass instanceof LazyDynaClass) {
+880                return ((LazyDynaClass)dynaClass).isDynaProperty(name);
+881            }
+882    
+883            // Handle other MutableDynaClass
+884            return dynaClass.getDynaProperty(name) == null ? false : true;
+885    
+886        }
+887    
+888        /**
+889         * Is an object of the source class assignable to the destination class?
+890         *
+891         * @param dest Destination class
+892         * @param source Source class
+893         * @return <code>true<code> if the source class is assignable to the
+894         * destination class, otherwise <code>false</code>
+895         */
+896        protected boolean isAssignable(Class dest, Class source) {
+897    
+898            if (dest.isAssignableFrom(source) ||
+899                    ((dest == Boolean.TYPE) && (source == Boolean.class)) ||
+900                    ((dest == Byte.TYPE) && (source == Byte.class)) ||
+901                    ((dest == Character.TYPE) && (source == Character.class)) ||
+902                    ((dest == Double.TYPE) && (source == Double.class)) ||
+903                    ((dest == Float.TYPE) && (source == Float.class)) ||
+904                    ((dest == Integer.TYPE) && (source == Integer.class)) ||
+905                    ((dest == Long.TYPE) && (source == Long.class)) ||
+906                    ((dest == Short.TYPE) && (source == Short.class))) {
+907                return (true);
+908            } else {
+909                return (false);
+910            }
+911    
+912        }
+913    
+914        /**
+915         * <p>Creates a new instance of the <code>Map</code>.</p>
+916         * @return a new Map instance
+917         */
+918        protected Map newMap() {
+919            return new HashMap();
+920        }
+921    
+922        /**
+923         * <p>Returns the <code>Log</code>.
+924         */
+925        private Log logger() {
+926            if (logger == null) {
+927                logger = LogFactory.getLog(LazyDynaBean.class);
+928            }
+929            return logger;
+930        }
+931    
+932    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaClass.html new file mode 100644 index 0000000..6e353d9 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaClass.html @@ -0,0 +1,423 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    /**
+020     * <p>DynaClass which implements the <code>MutableDynaClass</code> interface.</p>
+021     *
+022     * <p>A <code>MutableDynaClass</code> is a specialized extension to <code>DynaClass</code>
+023     *    that allows properties to be added or removed dynamically.</p>
+024     *
+025     * <p>This implementation has one slightly unusual default behaviour - calling
+026     *    the <code>getDynaProperty(name)</code> method for a property which doesn't
+027     *    exist returns a <code>DynaProperty</code> rather than <code>null</code>. The
+028     *    reason for this is that <code>BeanUtils</code> calls this method to check if
+029     *    a property exists before trying to set the value. This would defeat the object
+030     *    of the <code>LazyDynaBean</code> which automatically adds missing properties
+031     *    when any of its <code>set()</code> methods are called. For this reason the
+032     *    <code>isDynaProperty(name)</code> method has been added to this implementation
+033     *    in order to determine if a property actually exists. If the more <i>normal</i>
+034     *    behaviour of returning <code>null</code> is required, then this can be achieved
+035     *    by calling the <code>setReturnNull(true)</code>.</p>
+036     *
+037     * <p>The <code>add(name, type, readable, writable)</code> method is not implemented
+038     *    and always throws an <code>UnsupportedOperationException</code>. I believe
+039     *    this attributes need to be added to the <code>DynaProperty</code> class
+040     *    in order to control read/write facilities.</p>
+041     *
+042     * @see LazyDynaBean
+043     * @author Niall Pemberton
+044     */
+045    public class LazyDynaClass extends BasicDynaClass implements MutableDynaClass  {
+046    
+047        /**
+048         * Controls whether changes to this DynaClass's properties are allowed.
+049         */
+050        protected boolean restricted;
+051    
+052        /**
+053         * <p>Controls whether the <code>getDynaProperty()</code> method returns
+054         * null if a property doesn't exist - or creates a new one.</p>
+055         *
+056         * <p>Default is <code>false</code>.
+057         */
+058        protected boolean returnNull = false;
+059    
+060        /**
+061         * Construct a new LazyDynaClass with default parameters.
+062         */
+063        public LazyDynaClass() {
+064            this(null, (DynaProperty[])null);
+065        }
+066    
+067        /**
+068         * Construct a new LazyDynaClass with the specified name.
+069         *
+070         * @param name Name of this DynaBean class
+071         */
+072        public LazyDynaClass(String name) {
+073            this(name, (DynaProperty[])null);
+074        }
+075    
+076        /**
+077         * Construct a new LazyDynaClass with the specified name and DynaBean class.
+078         *
+079         * @param name Name of this DynaBean class
+080         * @param dynaBeanClass The implementation class for new instances
+081         */
+082        public LazyDynaClass(String name, Class dynaBeanClass) {
+083            this(name, dynaBeanClass, null);
+084        }
+085    
+086        /**
+087         * Construct a new LazyDynaClass with the specified name and properties.
+088         *
+089         * @param name Name of this DynaBean class
+090         * @param properties Property descriptors for the supported properties
+091         */
+092        public LazyDynaClass(String name, DynaProperty[] properties) {
+093            this(name, LazyDynaBean.class, properties);
+094        }
+095    
+096        /**
+097         * Construct a new LazyDynaClass with the specified name, DynaBean class and properties.
+098         *
+099         * @param name Name of this DynaBean class
+100         * @param dynaBeanClass The implementation class for new intances
+101         * @param properties Property descriptors for the supported properties
+102         */
+103        public LazyDynaClass(String name, Class dynaBeanClass, DynaProperty properties[]) {
+104            super(name, dynaBeanClass, properties);
+105        }
+106    
+107        /**
+108         * <p>Is this DynaClass currently restricted.</p>
+109         * <p>If restricted, no changes to the existing registration of
+110         *  property names, data types, readability, or writeability are allowed.</p>
+111         * @return <code>true</code> if this {@link MutableDynaClass} cannot be changed
+112         * otherwise <code>false</code>
+113         */
+114        public boolean isRestricted() {
+115            return restricted;
+116        }
+117    
+118        /**
+119         * <p>Set whether this DynaClass is currently restricted.</p>
+120         * <p>If restricted, no changes to the existing registration of
+121         *  property names, data types, readability, or writeability are allowed.</p>
+122         * @param restricted <code>true</code> if this {@link MutableDynaClass} cannot
+123         * be changed otherwise <code>false</code>
+124         */
+125        public void setRestricted(boolean restricted) {
+126            this.restricted = restricted;
+127        }
+128    
+129        /**
+130         * Should this DynaClass return a <code>null</code> from
+131         * the <code>getDynaProperty(name)</code> method if the property
+132         * doesn't exist.
+133         *
+134         * @return <code>true<code> if a <code>null</code> {@link DynaProperty}
+135         * should be returned if the property doesn't exist, otherwise
+136         * <code>false</code> if a new {@link DynaProperty} should be created.
+137         */
+138        public boolean isReturnNull() {
+139            return returnNull;
+140        }
+141    
+142        /**
+143         * Set whether this DynaClass should return a <code>null</code> from
+144         * the <code>getDynaProperty(name)</code> method if the property
+145         * doesn't exist.
+146         * @param returnNull <code>true<code> if a <code>null</code> {@link DynaProperty}
+147         * should be returned if the property doesn't exist, otherwise
+148         * <code>false</code> if a new {@link DynaProperty} should be created.
+149         */
+150        public void setReturnNull(boolean returnNull) {
+151            this.returnNull = returnNull;
+152        }
+153    
+154        /**
+155         * Add a new dynamic property with no restrictions on data type,
+156         * readability, or writeability.
+157         *
+158         * @param name Name of the new dynamic property
+159         *
+160         * @exception IllegalArgumentException if name is null
+161         * @exception IllegalStateException if this DynaClass is currently
+162         *  restricted, so no new properties can be added
+163         */
+164        public void add(String name) {
+165            add(new DynaProperty(name));
+166        }
+167    
+168        /**
+169         * Add a new dynamic property with the specified data type, but with
+170         * no restrictions on readability or writeability.
+171         *
+172         * @param name Name of the new dynamic property
+173         * @param type Data type of the new dynamic property (null for no
+174         *  restrictions)
+175         *
+176         * @exception IllegalArgumentException if name is null
+177         * @exception IllegalStateException if this DynaClass is currently
+178         *  restricted, so no new properties can be added
+179         */
+180        public void add(String name, Class type) {
+181            if (type == null) {
+182                add(name);
+183            } else {
+184                add(new DynaProperty(name, type));
+185            }
+186        }
+187    
+188        /**
+189         * <p>Add a new dynamic property with the specified data type, readability,
+190         * and writeability.</p>
+191         *
+192         * <p><strong>N.B.</strong>Support for readable/writeable properties has not been implemented
+193         *    and this method always throws a <code>UnsupportedOperationException</code>.</p>
+194         *
+195         * <p>I'm not sure the intention of the original authors for this method, but it seems to
+196         *    me that readable/writable should be attributes of the <code>DynaProperty</code> class
+197         *    (which they are not) and is the reason this method has not been implemented.</p>
+198         *
+199         * @param name Name of the new dynamic property
+200         * @param type Data type of the new dynamic property (null for no
+201         *  restrictions)
+202         * @param readable Set to <code>true</code> if this property value
+203         *  should be readable
+204         * @param writeable Set to <code>true</code> if this property value
+205         *  should be writeable
+206         *
+207         * @exception UnsupportedOperationException anytime this method is called
+208         */
+209        public void add(String name, Class type, boolean readable, boolean writeable) {
+210            throw new java.lang.UnsupportedOperationException("readable/writable properties not supported");
+211        }
+212    
+213        /**
+214         * Add a new dynamic property.
+215         *
+216         * @param property Property the new dynamic property to add.
+217         *
+218         * @exception IllegalArgumentException if name is null
+219         * @exception IllegalStateException if this DynaClass is currently
+220         *  restricted, so no new properties can be added
+221         */
+222        protected void add(DynaProperty property) {
+223    
+224            if (property.getName() == null) {
+225                throw new IllegalArgumentException("Property name is missing.");
+226            }
+227    
+228            if (isRestricted()) {
+229                throw new IllegalStateException("DynaClass is currently restricted. No new properties can be added.");
+230            }
+231    
+232            // Check if property already exists
+233            if (propertiesMap.get(property.getName()) != null) {
+234               return;
+235            }
+236    
+237            // Create a new property array with the specified property
+238            DynaProperty[] oldProperties = getDynaProperties();
+239            DynaProperty[] newProperties = new DynaProperty[oldProperties.length+1];
+240            System.arraycopy(oldProperties, 0, newProperties, 0, oldProperties.length);
+241            newProperties[oldProperties.length] = property;
+242    
+243           // Update the properties
+244           setProperties(newProperties);
+245    
+246        }
+247    
+248        /**
+249         * Remove the specified dynamic property, and any associated data type,
+250         * readability, and writeability, from this dynamic class.
+251         * <strong>NOTE</strong> - This does <strong>NOT</strong> cause any
+252         * corresponding property values to be removed from DynaBean instances
+253         * associated with this DynaClass.
+254         *
+255         * @param name Name of the dynamic property to remove
+256         *
+257         * @exception IllegalArgumentException if name is null
+258         * @exception IllegalStateException if this DynaClass is currently
+259         *  restricted, so no properties can be removed
+260         */
+261        public void remove(String name) {
+262    
+263            if (name == null) {
+264                throw new IllegalArgumentException("Property name is missing.");
+265            }
+266    
+267            if (isRestricted()) {
+268                throw new IllegalStateException("DynaClass is currently restricted. No properties can be removed.");
+269            }
+270    
+271            // Ignore if property doesn't exist
+272            if (propertiesMap.get(name) == null) {
+273                return;
+274            }
+275    
+276    
+277            // Create a new property array of without the specified property
+278            DynaProperty[] oldProperties = getDynaProperties();
+279            DynaProperty[] newProperties = new DynaProperty[oldProperties.length-1];
+280            int j = 0;
+281            for (int i = 0; i < oldProperties.length; i++) {
+282                if (!(name.equals(oldProperties[i].getName()))) {
+283                    newProperties[j] = oldProperties[i];
+284                    j++;
+285                }
+286            }
+287    
+288            // Update the properties
+289            setProperties(newProperties);
+290    
+291        }
+292    
+293        /**
+294         * <p>Return a property descriptor for the specified property.</p>
+295         *
+296         * <p>If the property is not found and the <code>returnNull</code> indicator is
+297         *    <code>true</code>, this method always returns <code>null</code>.</p>
+298         *
+299         * <p>If the property is not found and the <code>returnNull</code> indicator is
+300         *    <code>false</code> a new property descriptor is created and returned (although
+301         *    its not actually added to the DynaClass's properties). This is the default
+302         *    beahviour.</p>
+303         *
+304         * <p>The reason for not returning a <code>null</code> property descriptor is that
+305         *    <code>BeanUtils</code> uses this method to check if a property exists
+306         *    before trying to set it - since these <i>Lazy</i> implementations automatically
+307         *    add any new properties when they are set, returning <code>null</code> from
+308         *    this method would defeat their purpose.</p>
+309         *
+310         * @param name Name of the dynamic property for which a descriptor
+311         *  is requested
+312         * @return The dyna property for the specified name
+313         *
+314         * @exception IllegalArgumentException if no property name is specified
+315         */
+316        public DynaProperty getDynaProperty(String name) {
+317    
+318            if (name == null) {
+319                throw new IllegalArgumentException("Property name is missing.");
+320            }
+321    
+322            DynaProperty dynaProperty = (DynaProperty)propertiesMap.get(name);
+323    
+324            // If it doesn't exist and returnNull is false
+325            // create a new DynaProperty
+326            if (dynaProperty == null && !isReturnNull() && !isRestricted()) {
+327                dynaProperty = new DynaProperty(name);
+328            }
+329    
+330            return dynaProperty;
+331    
+332        }
+333    
+334        /**
+335         * <p>Indicate whether a property actually exists.</p>
+336         *
+337         * <p><strong>N.B.</strong> Using <code>getDynaProperty(name) == null</code>
+338         * doesn't work in this implementation because that method might
+339         * return a DynaProperty if it doesn't exist (depending on the
+340         * <code>returnNull</code> indicator).</p>
+341         *
+342         * @param name The name of the property to check
+343         * @return <code>true<code> if there is a property of the
+344         * specified name, otherwise <code>false</code>
+345         * @exception IllegalArgumentException if no property name is specified
+346         */
+347        public boolean isDynaProperty(String name) {
+348    
+349            if (name == null) {
+350                throw new IllegalArgumentException("Property name is missing.");
+351            }
+352    
+353            return propertiesMap.get(name) ==  null ? false : true;
+354    
+355        }
+356    
+357    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaList.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaList.html new file mode 100644 index 0000000..3c8d385 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaList.html @@ -0,0 +1,759 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    import java.util.ArrayList;
+020    import java.util.Map;
+021    import java.util.Collection;
+022    import java.util.Iterator;
+023    import java.lang.reflect.Array;
+024    
+025    /**
+026     * <h2><i>Lazy</i> DynaBean List.</h2>
+027     * 
+028     * <p>There are two main purposes for this class:</p>
+029     *    <ul>
+030     *        <li>To provide <i>Lazy List</i> behaviour - automatically
+031     *            <i>growing</i> and <i>populating</i> the <code>List</code>
+032     *            with either <code>DynaBean</code>, <code>java.util.Map</code>
+033     *            or POJO Beans.</li>
+034     *        <li>To provide a straight forward way of putting a Collection
+035     *            or Array into the lazy list <i>and</i> a straight forward 
+036     *            way to get it out again at the end.</li>
+037     *    </ul>
+038     * 
+039     * <p>All elements added to the List are stored as <code>DynaBean</code>'s:</p>
+040     * <ul>
+041     *    <li><code>java.util.Map</code> elements are "wrapped" in a <code>LazyDynaMap</code>.</i> 
+042     *    <li>POJO Bean elements are "wrapped" in a <code>WrapDynaBean.</code></i> 
+043     *    <li><code>DynaBean</code>'s are stored un-changed.</i>
+044     * </ul>
+045     *  
+046     * <h4><code>toArray()</code></h4>
+047     * <p>The <code>toArray()</code> method returns an array of the
+048     *    elements of the appropriate type. If the <code>LazyDynaList</code>
+049     *    is populated with <code>java.util.Map</code> objects a 
+050     *    <code>Map[]</code> array is returned.
+051     *    If the list is populated with POJO Beans an appropriate
+052     *    array of the POJO Beans is returned. Otherwise a <code>DynaBean[]</code>
+053     *    array is returned.
+054     * </p>
+055     *  
+056     * <h4><code>toDynaBeanArray()</code></h4>
+057     * <p>The <code>toDynaBeanArray()</code> method returns a 
+058     *    <code>DynaBean[]</code> array of the elements in the List.
+059     * </p>
+060     *  
+061     * <p><strong>N.B.</strong>All the elements in the List must be the
+062     *    same type. If the <code>DynaClass</code> or <code>Class</code>
+063     *    of the <code>LazyDynaList</code>'s elements is
+064     *    not specified, then it will be automatically set to the type
+065     *    of the first element populated.
+066     * </p>
+067     * 
+068     * <h3>Example 1</h3>
+069     * <p>If you have an array of <code>java.util.Map[]</code> - you can put that into
+070     *    a <code>LazyDynaList</code>.</p>
+071     * 
+072     * <pre><code>
+073     *    TreeMap[] myArray = .... // your Map[]
+074     *    List lazyList = new LazyDynaList(myArray);
+075     * </code></pre>
+076     * 
+077     * <p>New elements of the appropriate Map type are
+078     *    automatically populated:</p>
+079     *  
+080     * <pre><code>
+081     *    // get(index) automatically grows the list
+082     *    DynaBean newElement = (DynaBean)lazyList.get(lazyList.size());
+083     *    newElement.put("someProperty", "someValue");
+084     * </code></pre>
+085     * 
+086     * <p>Once you've finished you can get back an Array of the
+087     *    elements of the appropriate type:</p>
+088     *  
+089     * <pre><code>
+090     *    // Retrieve the array from the list
+091     *    TreeMap[] myArray = (TreeMap[])lazyList.toArray());
+092     * </code></pre>
+093     * 
+094     * 
+095     * <h3>Example 2</h3>
+096     * <p>Alternatively you can create an <i>empty</i> List and
+097     *    specify the Class for List's elements. The LazyDynaList
+098     *    uses the Class to automatically populate elements:</p>
+099     * 
+100     * <pre><code>
+101     *    // e.g. For Maps
+102     *    List lazyList = new LazyDynaList(TreeMap.class);
+103     * 
+104     *    // e.g. For POJO Beans
+105     *    List lazyList = new LazyDynaList(MyPojo.class);
+106     * 
+107     *    // e.g. For DynaBeans
+108     *    List lazyList = new LazyDynaList(MyDynaBean.class);
+109     * </code></pre>
+110     * 
+111     * <h3>Example 3</h3>
+112     * <p>Alternatively you can create an <i>empty</i> List and specify the 
+113     *    DynaClass for List's elements. The LazyDynaList uses
+114     *    the DynaClass to automatically populate elements:</p>
+115     * 
+116     * <pre><code>
+117     *    // e.g. For Maps
+118     *    DynaClass dynaClass = new LazyDynaMap(new HashMap());
+119     *    List lazyList = new LazyDynaList(dynaClass);
+120     * 
+121     *    // e.g. For POJO Beans
+122     *    DynaClass dynaClass = (new WrapDynaBean(myPojo)).getDynaClass();
+123     *    List lazyList = new LazyDynaList(dynaClass);
+124     * 
+125     *    // e.g. For DynaBeans
+126     *    DynaClass dynaClass = new BasicDynaClass(properties);
+127     *    List lazyList = new LazyDynaList(dynaClass);
+128     * </code></pre>
+129     * 
+130     * <p><strong>N.B.</strong> You may wonder why control the type
+131     *    using a <code>DynaClass</code> rather than the <code>Class</code>
+132     *    as in the previous example - the reason is that some <code>DynaBean</code>
+133     *    implementations don't have a <i>default</i> empty constructor and
+134     *    therefore need to be instantiated using the <code>DynaClass.newInstance()</code>
+135     *    method.</p>
+136     * 
+137     * <h3>Example 4</h3>
+138     * <p>A slight variation - set the element type using either
+139     *    the <code>setElementType(Class)</code> method or the
+140     *    <code>setElementDynaClass(DynaClass)</code> method - then populate
+141     *    with the normal <code>java.util.List</code> methods(i.e.
+142     *    <code>add()</code>, <code>addAll()</code> or <code>set()</code>).</p>
+143     * 
+144     * <pre><code>
+145     *    // Create a new LazyDynaList (100 element capacity)
+146     *    LazyDynaList lazyList = new LazyDynaList(100);
+147     * 
+148     *    // Either Set the element type...
+149     *    lazyList.setElementType(TreeMap.class);
+150     * 
+151     *    // ...or the element DynaClass...
+152     *    lazyList.setElementDynaClass(new MyCustomDynaClass());
+153     * 
+154     *    // Populate from a collection
+155     *    lazyList.addAll(myCollection);
+156     *
+157     * </code></pre>
+158     * 
+159     * @author Niall Pemberton
+160     * @version $Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+161     * @since 1.8.0
+162     */
+163    public class LazyDynaList extends ArrayList {
+164        
+165        /**
+166         * The DynaClass of the List's elements.
+167         */
+168        private DynaClass elementDynaClass;
+169        
+170        /**
+171         * The WrapDynaClass if the List's contains
+172         * POJO Bean elements.
+173         *
+174         * N.B. WrapDynaClass isn't serlializable, which
+175         *      is why its stored separately in a 
+176         *      transient instance variable.
+177         */
+178        private transient WrapDynaClass wrapDynaClass;
+179        
+180        /**
+181         * The type of the List's elements.
+182         */
+183        private Class elementType;
+184        
+185        /**
+186         * The DynaBean type of the List's elements.
+187         */
+188        private Class elementDynaBeanType;
+189    
+190    
+191        // ------------------- Constructors ------------------------------
+192    
+193        /**
+194         * Default Constructor.
+195         */
+196        public LazyDynaList() {
+197            super();
+198        }
+199    
+200        /**
+201         * Construct a LazyDynaList with the 
+202         * specified capacity.
+203         *
+204         * @param capacity The initial capacity of the list.
+205         */
+206        public LazyDynaList(int capacity) {
+207            super(capacity);
+208            
+209        }
+210    
+211        /**
+212         * Construct a  LazyDynaList with a
+213         * specified DynaClass for its elements.
+214         * 
+215         * @param elementDynaClass The DynaClass of the List's elements.
+216         */
+217        public LazyDynaList(DynaClass elementDynaClass) {
+218            super();
+219            setElementDynaClass(elementDynaClass);
+220        }
+221    
+222        /**
+223         * Construct a  LazyDynaList with a
+224         * specified type for its elements.
+225         * 
+226         * @param elementType The Type of the List's elements.
+227         */
+228        public LazyDynaList(Class elementType) {
+229            super();
+230            setElementType(elementType);
+231        }
+232        
+233        /**
+234         * Construct a  LazyDynaList populated with the
+235         * elements of a Collection.
+236         *
+237         * @param collection The Collection to poulate the List from.
+238         */
+239        public LazyDynaList(Collection collection) {
+240            super(collection.size());
+241            addAll(collection);
+242        }
+243        
+244        /**
+245         * Construct a  LazyDynaList populated with the
+246         * elements of an Array.
+247         *
+248         * @param array The Array to poulate the List from.
+249         */
+250        public LazyDynaList(Object[] array) {
+251            super(array.length);
+252            for (int i = 0; i < array.length; i++) {
+253                add(array[i]);
+254            }
+255        }
+256    
+257    
+258        // ------------------- java.util.List Methods --------------------
+259    
+260        /**
+261         * <p>Insert an element at the specified index position.</p>
+262         * 
+263         * <p>If the index position is greater than the current 
+264         *    size of the List, then the List is automatically
+265         *    <i>grown</i> to the appropriate size.</p>
+266         *  
+267         * @param index The index position to insert the new element.
+268         * @param element The new element to add.
+269         */
+270        public void add(int index, Object element) {
+271    
+272            DynaBean dynaBean = transform(element);
+273    
+274            growList(index);
+275            
+276            super.add(index, dynaBean);
+277    
+278        }
+279    
+280        /**
+281         * <p>Add an element to the List.</p>
+282         *
+283         * @param element The new element to add.
+284         * @return true.
+285         */
+286        public boolean add(Object element) {
+287    
+288            DynaBean dynaBean = transform(element);
+289    
+290            return super.add(dynaBean);
+291    
+292        }
+293    
+294        /**
+295         * <p>Add all the elements from a Collection to the list.
+296         *
+297         * @param collection The Collection of new elements.
+298         * @return true if elements were added.
+299         */
+300        public boolean addAll(Collection collection) {
+301    
+302            if (collection == null || collection.size() == 0) {
+303                return false;
+304            }
+305            
+306            ensureCapacity(size() + collection.size());
+307    
+308            Iterator iterator = collection.iterator();
+309            while (iterator.hasNext()) {
+310                add(iterator.next());
+311            }
+312    
+313            return true;
+314    
+315        }
+316    
+317        /**
+318         * <p>Insert all the elements from a Collection into the
+319         *    list at a specified position.
+320         *
+321         * <p>If the index position is greater than the current 
+322         *    size of the List, then the List is automatically
+323         *    <i>grown</i> to the appropriate size.</p>
+324         * 
+325         * @param collection The Collection of new elements.
+326         * @param index The index position to insert the new elements at.
+327         * @return true if elements were added.
+328         */
+329        public boolean addAll(int index, Collection collection) {
+330    
+331            if (collection == null || collection.size() == 0) {
+332                return false;
+333            }
+334            
+335            ensureCapacity((index > size() ? index : size()) + collection.size());
+336            
+337            // Call "tranform" with first element, before
+338            // List is "grown" to ensure the correct DynaClass
+339            // is set.
+340            if (size() == 0) {
+341                transform(collection.iterator().next());
+342            }
+343    
+344            growList(index);
+345    
+346            Iterator iterator = collection.iterator();
+347            while (iterator.hasNext()) {
+348                add(index++, iterator.next());
+349            }
+350    
+351            return true;
+352            
+353        }
+354    
+355        /**
+356         * <p>Return the element at the specified position.</p>
+357         *
+358         * <p>If the position requested is greater than the current 
+359         *    size of the List, then the List is automatically
+360         *    <i>grown</i> (and populated) to the appropriate size.</p>
+361         * 
+362         * @param index The index position to insert the new elements at.
+363         * @return The element at the specified position.
+364         */
+365        public Object get(int index) {
+366    
+367            growList(index + 1);
+368    
+369            return super.get(index);
+370    
+371        }
+372    
+373        /**
+374         * <p>Set the element at the specified position.</p>
+375         *
+376         * <p>If the position requested is greater than the current 
+377         *    size of the List, then the List is automatically
+378         *    <i>grown</i> (and populated) to the appropriate size.</p>
+379         * 
+380         * @param index The index position to insert the new element at.
+381         * @param element The new element.
+382         * @return The new element.
+383         */
+384        public Object set(int index, Object element) {
+385    
+386            DynaBean dynaBean = transform(element);
+387    
+388            growList(index + 1);
+389    
+390            return super.set(index, dynaBean);
+391            
+392        }
+393    
+394        /**
+395         * <p>Converts the List to an Array.</p>
+396         *
+397         * <p>The type of Array created depends on the contents
+398         *    of the List:</p>
+399         * <ul>
+400         *    <li>If the List contains only LazyDynaMap type elements
+401         *        then a java.util.Map[] array will be created.</li>   
+402         *    <li>If the List contains only elements which are 
+403         *        "wrapped" DynaBeans then an Object[] of the most
+404         *        suitable type will be created.</li>
+405         *    <li>...otherwise a DynaBean[] will be created.</li>
+406         * 
+407         * @return An Array of the elements in this List.
+408         */
+409        public Object[] toArray() {
+410    
+411            if (size() == 0 && elementType == null) {
+412                return new LazyDynaBean[0];
+413            }
+414    
+415            Object[] array = (Object[])Array.newInstance(elementType, size());
+416            for (int i = 0; i < size(); i++) {
+417                if (Map.class.isAssignableFrom(elementType)) {
+418                    array[i] = ((LazyDynaMap)get(i)).getMap(); 
+419                } else if (DynaBean.class.isAssignableFrom(elementType)) {
+420                    array[i] = get(i);
+421                } else {
+422                    array[i] = ((WrapDynaBean)get(i)).getInstance(); 
+423                }
+424            }
+425            return array;
+426            
+427        }
+428    
+429        /**
+430         * <p>Converts the List to an Array of the specified type.</p>
+431         *
+432         * @param model The model for the type of array to return
+433         * @return An Array of the elements in this List.
+434         */
+435        public Object[] toArray(Object[] model) {
+436            
+437            // Allocate the Array
+438            Class arrayType = model.getClass().getComponentType();
+439            Object[] array = (Object[])Array.newInstance(arrayType, size());
+440    
+441            if (size() == 0 && elementType == null) {
+442                return new LazyDynaBean[0];
+443            }
+444    
+445            if ((DynaBean.class.isAssignableFrom(arrayType))) {
+446                for (int i = 0; i < size(); i++) {
+447                    array[i] = get(i);
+448                }
+449                return array;
+450            }
+451    
+452            if ((arrayType.isAssignableFrom(elementType))) {
+453                for (int i = 0; i < size(); i++) {
+454                    if (Map.class.isAssignableFrom(elementType)) {
+455                        array[i] = ((LazyDynaMap)get(i)).getMap(); 
+456                    } else if (DynaBean.class.isAssignableFrom(elementType)) {
+457                        array[i] = get(i);
+458                    } else {
+459                        array[i] = ((WrapDynaBean)get(i)).getInstance(); 
+460                    }
+461                }
+462                return array;
+463            }
+464    
+465            throw new IllegalArgumentException("Invalid array type: " 
+466                      + arrayType.getName() + " - not compatible with '"
+467                      + elementType.getName());
+468            
+469        }
+470    
+471    
+472        // ------------------- Public Methods ----------------------------
+473    
+474        /**
+475         * <p>Converts the List to an DynaBean Array.</p>
+476         *
+477         * @return A DynaBean[] of the elements in this List.
+478         */
+479        public DynaBean[] toDynaBeanArray() {
+480    
+481            if (size() == 0 && elementDynaBeanType == null) {
+482                return new LazyDynaBean[0];
+483            }
+484            
+485            DynaBean[] array = (DynaBean[])Array.newInstance(elementDynaBeanType, size());
+486            for (int i = 0; i < size(); i++) {
+487                array[i] = (DynaBean)get(i);
+488            }
+489            return array;
+490            
+491        }
+492    
+493        /**
+494         * <p>Set the element Type and DynaClass.</p>
+495         *
+496         * @param elementType The type of the elements.
+497         * @exception IllegalArgumentException if the List already
+498         *            contains elements or the DynaClass is null.
+499         */
+500        public void setElementType(Class elementType) {
+501    
+502            if (elementType == null) {
+503                throw new IllegalArgumentException("Element Type is missing");
+504            }
+505    
+506            boolean changeType = (this.elementType != null && !this.elementType.equals(elementType));
+507            if (changeType && size() > 0) {
+508                throw new IllegalStateException("Element Type cannot be reset");
+509            }
+510    
+511            this.elementType = elementType;
+512    
+513            // Create a new object of the specified type
+514            Object object = null;
+515            try {
+516                object = elementType.newInstance();
+517            } catch (Exception e) {
+518                throw new IllegalArgumentException("Error creating type: " 
+519                               + elementType.getName() + " - " + e);
+520            }
+521    
+522            // Create a DynaBean
+523            DynaBean dynaBean = null;
+524            if (Map.class.isAssignableFrom(elementType)) {
+525                dynaBean = new LazyDynaMap((Map)object);
+526                this.elementDynaClass = dynaBean.getDynaClass();
+527            } else if (DynaBean.class.isAssignableFrom(elementType)) {
+528                dynaBean = (DynaBean)object;
+529                this.elementDynaClass = dynaBean.getDynaClass();
+530            } else {
+531                dynaBean = new WrapDynaBean(object);
+532                this.wrapDynaClass = (WrapDynaClass)dynaBean.getDynaClass();
+533            }
+534    
+535            this.elementDynaBeanType = dynaBean.getClass();
+536    
+537            // Re-calculate the type
+538            if (WrapDynaBean.class.isAssignableFrom(elementDynaBeanType )) {
+539                this.elementType = ((WrapDynaBean)dynaBean).getInstance().getClass();
+540            } else if (LazyDynaMap.class.isAssignableFrom(elementDynaBeanType )) {
+541                this.elementType = ((LazyDynaMap)dynaBean).getMap().getClass();
+542            }
+543    
+544        }
+545    
+546        /**
+547         * <p>Set the element Type and DynaClass.</p>
+548         *
+549         * @param elementDynaClass The DynaClass of the elements.
+550         * @exception IllegalArgumentException if the List already
+551         *            contains elements or the DynaClass is null.
+552         */
+553        public void setElementDynaClass(DynaClass elementDynaClass) {
+554    
+555            if (elementDynaClass == null) {
+556                throw new IllegalArgumentException("Element DynaClass is missing");
+557            }
+558    
+559            if (size() > 0) {
+560                throw new IllegalStateException("Element DynaClass cannot be reset");
+561            }
+562    
+563            // Try to create a new instance of the DynaBean
+564            try {
+565                DynaBean dynaBean  = elementDynaClass.newInstance();
+566                this.elementDynaBeanType = dynaBean.getClass();
+567                if (WrapDynaBean.class.isAssignableFrom(elementDynaBeanType)) {
+568                    this.elementType = ((WrapDynaBean)dynaBean).getInstance().getClass();
+569                    this.wrapDynaClass = (WrapDynaClass)elementDynaClass;
+570                } else if (LazyDynaMap.class.isAssignableFrom(elementDynaBeanType)) {
+571                    this.elementType = ((LazyDynaMap)dynaBean).getMap().getClass();
+572                    this.elementDynaClass = elementDynaClass;
+573                } else {
+574                    this.elementType = dynaBean.getClass();
+575                    this.elementDynaClass = elementDynaClass;
+576                }
+577            } catch (Exception e) {
+578                throw new IllegalArgumentException(
+579                            "Error creating DynaBean from " +
+580                            elementDynaClass.getClass().getName() + " - " + e);
+581            }
+582    
+583        }
+584    
+585    
+586        // ------------------- Private Methods ---------------------------
+587    
+588        /**
+589         * <p>Automatically <i>grown</i> the List
+590         *    to the appropriate size, populating with
+591         *    DynaBeans.</p>
+592         *
+593         * @param requiredSize the required size of the List.
+594         */
+595        private void growList(int requiredSize) {
+596            
+597            if (requiredSize < size()) {
+598                return;
+599            }
+600            
+601            ensureCapacity(requiredSize + 1);
+602            
+603            for (int i = size(); i < requiredSize; i++) {
+604                DynaBean dynaBean = transform(null);
+605                super.add(dynaBean);
+606            }
+607            
+608        }
+609    
+610        /**
+611         * <p>Transform the element into a DynaBean:</p>
+612         * 
+613         * <ul>
+614         *    <li>Map elements are turned into LazyDynaMap's.</li>
+615         *    <li>POJO Beans are "wrapped" in a WrapDynaBean.</li>
+616         *    <li>DynaBeans are unchanged.</li>
+617         * </li>
+618         *
+619         * @param element The element to transformt.
+620         * @param The DynaBean to store in the List.
+621         */
+622        private DynaBean transform(Object element) {
+623    
+624            DynaBean dynaBean     = null;
+625            Class newDynaBeanType = null;
+626            Class newElementType  = null;
+627    
+628            // Create a new element
+629            if (element == null) {
+630    
+631                // Default Types to LazyDynaBean
+632                // if not specified
+633                if (elementType == null) {
+634                    setElementDynaClass(new LazyDynaClass());
+635                }
+636    
+637                // Get DynaClass (restore WrapDynaClass lost in serialization)
+638                if (getDynaClass() == null) {
+639                    setElementType(elementType);
+640                }
+641                             
+642                // Create a new DynaBean            
+643                try {
+644                    dynaBean = getDynaClass().newInstance();
+645                    newDynaBeanType = dynaBean.getClass();
+646                } catch (Exception e) {
+647                    throw new IllegalArgumentException("Error creating DynaBean: " 
+648                                  + getDynaClass().getClass().getName() 
+649                                  + " - " + e);
+650                }
+651    
+652            } else {
+653    
+654                // Transform Object to a DynaBean
+655                newElementType = element.getClass();
+656                if (Map.class.isAssignableFrom(element.getClass())) {
+657                    dynaBean = new LazyDynaMap((Map)element);
+658                } else if (DynaBean.class.isAssignableFrom(element.getClass())) {
+659                    dynaBean = (DynaBean)element;
+660                } else {
+661                    dynaBean = new WrapDynaBean(element);
+662                }
+663    
+664                newDynaBeanType = dynaBean.getClass();
+665    
+666            }
+667    
+668            // Re-calculate the element type
+669            newElementType = dynaBean.getClass();
+670            if (WrapDynaBean.class.isAssignableFrom(newDynaBeanType)) {
+671                newElementType = ((WrapDynaBean)dynaBean).getInstance().getClass();
+672            } else if (LazyDynaMap.class.isAssignableFrom(newDynaBeanType)) {
+673                newElementType = ((LazyDynaMap)dynaBean).getMap().getClass();
+674            }
+675    
+676            // Check the new element type, matches all the 
+677            // other elements in the List
+678            if (elementType != null && !newElementType.equals(elementType)) {
+679                throw new IllegalArgumentException("Element Type "  + newElementType 
+680                           + " doesn't match other elements " + elementType);
+681            }
+682    
+683            return dynaBean;
+684            
+685        }
+686    
+687        /**
+688         * Return the DynaClass.
+689         */
+690        private DynaClass getDynaClass() {
+691            return (elementDynaClass == null ? wrapDynaClass : elementDynaClass);
+692        }
+693    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaMap.html new file mode 100644 index 0000000..5ccc1cc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/LazyDynaMap.html @@ -0,0 +1,547 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils;
+018    
+019    import java.util.Map;
+020    import java.util.Iterator;
+021    
+022    /**
+023     * <p>Provides a <i>light weight</i> <code>DynaBean</code> facade to a <code>Map</code>
+024     *  with <i>lazy</i> map/list processing.</p>
+025     *
+026     * <p>Its a <i>light weight</i> <code>DynaBean</code> implementation because there is no
+027     *    actual <code>DynaClass</code> associated with this <code>DynaBean</code> - in fact
+028     *    it implements the <code>DynaClass</code> interface itself providing <i>pseudo</i> DynaClass
+029     *    behaviour from the actual values stored in the <code>Map</code>.</p>
+030     *
+031     * <p>As well providing rhe standard <code>DynaBean</code> access to the <code>Map</code>'s properties
+032     *    this class also provides the usual <i>Lazy</i> behaviour:</p>
+033     *    <ul>
+034     *       <li>Properties don't need to be pre-defined in a <code>DynaClass</code></li>
+035     *       <li>Indexed properties (<code>Lists</code> or <code>Arrays</code>) are automatically instantiated
+036     *           and <i>grown</i> so that they are large enough to cater for the index being set.</li>
+037     *       <li>Mapped properties are automatically instantiated.</li>
+038     *    </ul>
+039     *
+040     * <p><b><u><i>Restricted</i> DynaClass</u></b></p>
+041     *    <p>This class implements the <code>MutableDynaClass</code> interface.
+042     *       <code>MutableDynaClass</code> have a facility to <i>restrict</i> the <code>DynaClass</code>
+043     *       so that its properties cannot be modified. If the <code>MutableDynaClass</code> is
+044     *       restricted then calling any of the <code>set()</code> methods for a property which
+045     *       doesn't exist will result in a <code>IllegalArgumentException</code> being thrown.</p>
+046     *
+047     * @author Niall Pemberton
+048     */
+049    public class LazyDynaMap extends LazyDynaBean implements MutableDynaClass {
+050    
+051        /**
+052         * The name of this DynaClass (analogous to the
+053         * <code>getName()</code> method of <code>java.lang.Class</code>).
+054         */
+055        protected String name;
+056    
+057        /**
+058         * Controls whether changes to this DynaClass's properties are allowed.
+059         */
+060        protected boolean restricted;
+061    
+062        /**
+063         * <p>Controls whether the <code>getDynaProperty()</code> method returns
+064         * null if a property doesn't exist - or creates a new one.</p>
+065         *
+066         * <p>Default is <code>false</code>.
+067         */
+068        protected boolean returnNull = false;
+069    
+070    
+071        // ------------------- Constructors ----------------------------------
+072    
+073        /**
+074         * Default Constructor.
+075         */
+076        public LazyDynaMap() {
+077            this(null, (Map)null);
+078        }
+079    
+080        /**
+081         * Construct a new <code>LazyDynaMap</code> with the specified name.
+082         *
+083         * @param name Name of this DynaBean class
+084         */
+085        public LazyDynaMap(String name) {
+086            this(name, (Map)null);
+087        }
+088    
+089        /**
+090         * Construct a new <code>LazyDynaMap</code> with the specified <code>Map</code>.
+091         *
+092         * @param values The Map backing this <code>LazyDynaMap</code>
+093         */
+094        public LazyDynaMap(Map values) {
+095            this(null, values);
+096        }
+097    
+098        /**
+099         * Construct a new <code>LazyDynaMap</code> with the specified name and  <code>Map</code>.
+100         *
+101         * @param name Name of this DynaBean class
+102         * @param values The Map backing this <code>LazyDynaMap</code>
+103         */
+104        public LazyDynaMap(String name, Map values) {
+105            this.name      = name   == null ? "LazyDynaMap" : name;
+106            this.values    = values == null ? newMap()      : values;
+107            this.dynaClass = this;
+108        }
+109    
+110        /**
+111         * Construct a new <code>LazyDynaMap</code> with the specified properties.
+112         *
+113         * @param properties Property descriptors for the supported properties
+114         */
+115        public LazyDynaMap(DynaProperty[] properties) {
+116            this(null, properties);
+117        }
+118    
+119        /**
+120         * Construct a new <code>LazyDynaMap</code> with the specified name and properties.
+121         *
+122         * @param name Name of this DynaBean class
+123         * @param properties Property descriptors for the supported properties
+124         */
+125        public LazyDynaMap(String name, DynaProperty[] properties) {
+126            this(name, (Map)null);
+127            if (properties != null) {
+128                for (int i = 0; i < properties.length; i++) {
+129                    add(properties[i]);
+130                }
+131            }
+132        }
+133    
+134        /**
+135         * Construct a new <code>LazyDynaMap</code> based on an exisiting DynaClass
+136         *
+137         * @param dynaClass DynaClass to copy the name and properties from
+138         */
+139        public LazyDynaMap(DynaClass dynaClass) {
+140            this(dynaClass.getName(), dynaClass.getDynaProperties());
+141        }
+142    
+143        // ------------------- Public Methods ----------------------------------
+144    
+145        /**
+146         * Set the Map backing this <code>DynaBean</code>
+147         *
+148         * @param values The new Map of values
+149         */
+150        public void setMap(Map values) {
+151            this.values = values;
+152        }
+153    
+154        /**
+155         * Return the underlying Map backing this <code>DynaBean</code>
+156         * @return the underlying Map
+157         * @since 1.8.0
+158         */
+159        public Map getMap() {
+160            return values;
+161        }
+162    
+163        // ------------------- DynaBean Methods ----------------------------------
+164    
+165        /**
+166         * Set the value of a simple property with the specified name.
+167         *
+168         * @param name Name of the property whose value is to be set
+169         * @param value Value to which this property is to be set
+170         */
+171        public void set(String name, Object value) {
+172    
+173            if (isRestricted() && !values.containsKey(name)) {
+174                throw new IllegalArgumentException
+175                        ("Invalid property name '" + name + "' (DynaClass is restricted)");
+176            }
+177    
+178            values.put(name, value);
+179    
+180        }
+181    
+182        // ------------------- DynaClass Methods ----------------------------------
+183    
+184        /**
+185         * Return the name of this DynaClass (analogous to the
+186         * <code>getName()</code> method of <code>java.lang.Class</code)
+187         *
+188         * @return the name of the DynaClass
+189         */
+190        public String getName() {
+191            return this.name;
+192        }
+193    
+194        /**
+195         * <p>Return a property descriptor for the specified property.</p>
+196         *
+197         * <p>If the property is not found and the <code>returnNull</code> indicator is
+198         *    <code>true</code>, this method always returns <code>null</code>.</p>
+199         *
+200         * <p>If the property is not found and the <code>returnNull</code> indicator is
+201         *    <code>false</code> a new property descriptor is created and returned (although
+202         *    its not actually added to the DynaClass's properties). This is the default
+203         *    beahviour.</p>
+204         *
+205         * <p>The reason for not returning a <code>null</code> property descriptor is that
+206         *    <code>BeanUtils</code> uses this method to check if a property exists
+207         *    before trying to set it - since these <i>Map</i> implementations automatically
+208         *    add any new properties when they are set, returning <code>null</code> from
+209         *    this method would defeat their purpose.</p>
+210         *
+211         * @param name Name of the dynamic property for which a descriptor
+212         *  is requested
+213         * @return The descriptor for the specified property
+214         *
+215         * @exception IllegalArgumentException if no property name is specified
+216         */
+217        public DynaProperty getDynaProperty(String name) {
+218    
+219            if (name == null) {
+220                throw new IllegalArgumentException("Property name is missing.");
+221            }
+222    
+223            // If it doesn't exist and returnNull is false
+224            // create a new DynaProperty
+225            if (!values.containsKey(name) && isReturnNull()) {
+226                return null;
+227            }
+228    
+229            Object value = values.get(name);
+230    
+231            if (value == null) {
+232                return new DynaProperty(name);
+233            } else {
+234                return new DynaProperty(name, value.getClass());
+235            }
+236    
+237        }
+238    
+239        /**
+240         * <p>Return an array of <code>ProperyDescriptors</code> for the properties
+241         * currently defined in this DynaClass.  If no properties are defined, a
+242         * zero-length array will be returned.</p>
+243         *
+244         * <p><strong>FIXME</strong> - Should we really be implementing
+245         * <code>getBeanInfo()</code> instead, which returns property descriptors
+246         * and a bunch of other stuff?</p>
+247         * @return the set of properties for this DynaClass
+248         */
+249        public DynaProperty[] getDynaProperties() {
+250    
+251            int i = 0;
+252            DynaProperty[] properties = new DynaProperty[values.size()];
+253            Iterator iterator = values.keySet().iterator();
+254    
+255            while (iterator.hasNext()) {
+256                String name = (String)iterator.next();
+257                Object value = values.get(name);
+258                properties[i++] = new DynaProperty(name, value == null ? null : value.getClass());
+259            }
+260    
+261            return properties;
+262    
+263        }
+264    
+265        /**
+266         * Instantiate and return a new DynaBean instance, associated
+267         * with this DynaClass.
+268         * @return A new <code>DynaBean</code> instance
+269         */
+270        public DynaBean newInstance()  {
+271    
+272            // Create a new instance of the Map
+273            Map newMap = null;
+274            try {
+275                newMap = (Map)getMap().getClass().newInstance();
+276            } catch(Exception ex) {
+277                newMap = newMap();
+278            }
+279    
+280            // Crate new LazyDynaMap and initialize properties
+281            LazyDynaMap lazyMap = new LazyDynaMap(newMap);
+282            DynaProperty[] properties = this.getDynaProperties();
+283            if (properties != null) {
+284                for (int i = 0; i < properties.length; i++) {
+285                    lazyMap.add(properties[i]);
+286                }
+287            }
+288            return lazyMap;
+289        }
+290    
+291    
+292        // ------------------- MutableDynaClass Methods ----------------------------------
+293    
+294        /**
+295         * <p>Is this DynaClass currently restricted.</p>
+296         * <p>If restricted, no changes to the existing registration of
+297         *  property names, data types, readability, or writeability are allowed.</p>
+298         *
+299         * @return <code>true</code> if this Mutable {@link DynaClass} is restricted,
+300         * otherwise <code>false</code>
+301         */
+302        public boolean isRestricted() {
+303            return restricted;
+304        }
+305    
+306        /**
+307         * <p>Set whether this DynaClass is currently restricted.</p>
+308         * <p>If restricted, no changes to the existing registration of
+309         *  property names, data types, readability, or writeability are allowed.</p>
+310         *
+311         * @param restricted The new restricted state
+312         */
+313        public void setRestricted(boolean restricted) {
+314            this.restricted = restricted;
+315        }
+316    
+317        /**
+318         * Add a new dynamic property with no restrictions on data type,
+319         * readability, or writeability.
+320         *
+321         * @param name Name of the new dynamic property
+322         *
+323         * @exception IllegalArgumentException if name is null
+324         */
+325        public void add(String name) {
+326            add(name, null);
+327        }
+328    
+329        /**
+330         * Add a new dynamic property with the specified data type, but with
+331         * no restrictions on readability or writeability.
+332         *
+333         * @param name Name of the new dynamic property
+334         * @param type Data type of the new dynamic property (null for no
+335         *  restrictions)
+336         *
+337         * @exception IllegalArgumentException if name is null
+338         * @exception IllegalStateException if this DynaClass is currently
+339         *  restricted, so no new properties can be added
+340         */
+341        public void add(String name, Class type) {
+342    
+343            if (name == null) {
+344                throw new IllegalArgumentException("Property name is missing.");
+345            }
+346    
+347            if (isRestricted()) {
+348                throw new IllegalStateException("DynaClass is currently restricted. No new properties can be added.");
+349            }
+350    
+351            Object value = values.get(name);
+352    
+353            // Check if the property already exists
+354            if (value == null) {
+355                values.put(name, type == null ? null : createProperty(name, type));
+356            }
+357    
+358        }
+359    
+360        /**
+361         * <p>Add a new dynamic property with the specified data type, readability,
+362         * and writeability.</p>
+363         *
+364         * <p><strong>N.B.</strong>Support for readable/writeable properties has not been implemented
+365         *    and this method always throws a <code>UnsupportedOperationException</code>.</p>
+366         *
+367         * <p>I'm not sure the intention of the original authors for this method, but it seems to
+368         *    me that readable/writable should be attributes of the <code>DynaProperty</code> class
+369         *    (which they are not) and is the reason this method has not been implemented.</p>
+370         *
+371         * @param name Name of the new dynamic property
+372         * @param type Data type of the new dynamic property (null for no
+373         *  restrictions)
+374         * @param readable Set to <code>true</code> if this property value
+375         *  should be readable
+376         * @param writeable Set to <code>true</code> if this property value
+377         *  should be writeable
+378         *
+379         * @exception UnsupportedOperationException anytime this method is called
+380         */
+381        public void add(String name, Class type, boolean readable, boolean writeable) {
+382            throw new java.lang.UnsupportedOperationException("readable/writable properties not supported");
+383        }
+384    
+385        /**
+386         * Add a new dynamic property.
+387         *
+388         * @param property Property the new dynamic property to add.
+389         *
+390         * @exception IllegalArgumentException if name is null
+391         */
+392        protected void add(DynaProperty property) {
+393            add(property.getName(), property.getType());
+394        }
+395    
+396        /**
+397         * Remove the specified dynamic property, and any associated data type,
+398         * readability, and writeability, from this dynamic class.
+399         * <strong>NOTE</strong> - This does <strong>NOT</strong> cause any
+400         * corresponding property values to be removed from DynaBean instances
+401         * associated with this DynaClass.
+402         *
+403         * @param name Name of the dynamic property to remove
+404         *
+405         * @exception IllegalArgumentException if name is null
+406         * @exception IllegalStateException if this DynaClass is currently
+407         *  restricted, so no properties can be removed
+408         */
+409        public void remove(String name) {
+410    
+411            if (name == null) {
+412                throw new IllegalArgumentException("Property name is missing.");
+413            }
+414    
+415            if (isRestricted()) {
+416                throw new IllegalStateException("DynaClass is currently restricted. No properties can be removed.");
+417            }
+418    
+419            // Remove, if property doesn't exist
+420            if (values.containsKey(name)) {
+421                values.remove(name);
+422            }
+423    
+424        }
+425    
+426    
+427        // ------------------- Additional Public Methods ----------------------------------
+428    
+429        /**
+430         * Should this DynaClass return a <code>null</code> from
+431         * the <code>getDynaProperty(name)</code> method if the property
+432         * doesn't exist.
+433         *
+434         * @return <code>true<code> if a <code>null</code> {@link DynaProperty}
+435         * should be returned if the property doesn't exist, otherwise
+436         * <code>false</code> if a new {@link DynaProperty} should be created.
+437         */
+438        public boolean isReturnNull() {
+439            return returnNull;
+440        }
+441    
+442        /**
+443         * Set whether this DynaClass should return a <code>null</code> from
+444         * the <code>getDynaProperty(name)</code> method if the property
+445         * doesn't exist.
+446         *
+447         * @param returnNull <code>true<code> if a <code>null</code> {@link DynaProperty}
+448         * should be returned if the property doesn't exist, otherwise
+449         * <code>false</code> if a new {@link DynaProperty} should be created.
+450         */
+451        public void setReturnNull(boolean returnNull) {
+452            this.returnNull = returnNull;
+453        }
+454    
+455    
+456        // ------------------- Protected Methods ----------------------------------
+457    
+458       /**
+459         * <p>Indicate whether a property actually exists.</p>
+460         *
+461         * <p><strong>N.B.</strong> Using <code>getDynaProperty(name) == null</code>
+462         * doesn't work in this implementation because that method might
+463         * return a DynaProperty if it doesn't exist (depending on the
+464         * <code>returnNull</code> indicator).</p>
+465         *
+466         * @param name Name of the dynamic property
+467         * @return <code>true</code> if the property exists,
+468         * otherwise <code>false</code>
+469         * @exception IllegalArgumentException if no property name is specified
+470         */
+471        protected boolean isDynaProperty(String name) {
+472    
+473            if (name == null) {
+474                throw new IllegalArgumentException("Property name is missing.");
+475            }
+476    
+477            return values.containsKey(name);
+478    
+479        }
+480    
+481    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MappedPropertyDescriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MappedPropertyDescriptor.html new file mode 100644 index 0000000..1757500 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MappedPropertyDescriptor.html @@ -0,0 +1,601 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    
+021    import java.beans.IntrospectionException;
+022    import java.beans.PropertyDescriptor;
+023    import java.lang.ref.Reference;
+024    import java.lang.ref.SoftReference;
+025    import java.lang.ref.WeakReference;
+026    import java.lang.reflect.Method;
+027    import java.lang.reflect.Modifier;
+028    
+029    
+030    /**
+031     * A MappedPropertyDescriptor describes one mapped property.
+032     * Mapped properties are multivalued properties like indexed properties
+033     * but that are accessed with a String key instead of an index.
+034     * Such property values are typically stored in a Map collection.
+035     * For this class to work properly, a mapped value must have
+036     * getter and setter methods of the form
+037     * <p><code>get<strong>Property</strong>(String key)<code> and
+038     * <p><code>set<strong>Property</strong>(String key, Object value)<code>,
+039     * <p>where <code><strong>Property</strong></code> must be replaced
+040     * by the name of the property.
+041     * @see java.beans.PropertyDescriptor
+042     *
+043     * @author Rey Francois
+044     * @author Gregor Rayman
+045     * @version $Revision: 806915 $ $Date: 2009-08-23 01:50:23 +0100 (Sun, 23 Aug 2009) $
+046     */
+047    
+048    
+049    public class MappedPropertyDescriptor extends PropertyDescriptor {
+050        // ----------------------------------------------------- Instance Variables
+051    
+052        /**
+053         * The underlying data type of the property we are describing.
+054         */
+055        private Reference mappedPropertyTypeRef;
+056    
+057        /**
+058         * The reader method for this property (if any).
+059         */
+060        private MappedMethodReference mappedReadMethodRef;
+061    
+062        /**
+063         * The writer method for this property (if any).
+064         */
+065        private MappedMethodReference mappedWriteMethodRef;
+066    
+067        /**
+068         * The parameter types array for the reader method signature.
+069         */
+070        private static final Class[] STRING_CLASS_PARAMETER = new Class[]{String.class};
+071    
+072        // ----------------------------------------------------------- Constructors
+073    
+074        /**
+075         * Constructs a MappedPropertyDescriptor for a property that follows
+076         * the standard Java convention by having getFoo and setFoo
+077         * accessor methods, with the addition of a String parameter (the key).
+078         * Thus if the argument name is "fred", it will
+079         * assume that the writer method is "setFred" and the reader method
+080         * is "getFred".  Note that the property name should start with a lower
+081         * case character, which will be capitalized in the method names.
+082         *
+083         * @param propertyName The programmatic name of the property.
+084         * @param beanClass The Class object for the target bean.  For
+085         *        example sun.beans.OurButton.class.
+086         *
+087         * @exception IntrospectionException if an exception occurs during
+088         *              introspection.
+089         */
+090        public MappedPropertyDescriptor(String propertyName, Class beanClass)
+091                throws IntrospectionException {
+092    
+093            super(propertyName, null, null);
+094            
+095            if (propertyName == null || propertyName.length() == 0) {
+096                throw new IntrospectionException("bad property name: " +
+097                        propertyName + " on class: " + beanClass.getClass().getName());
+098            }
+099    
+100            setName(propertyName);
+101            String base = capitalizePropertyName(propertyName);
+102            
+103            // Look for mapped read method and matching write method
+104            Method mappedReadMethod = null;
+105            Method mappedWriteMethod = null;
+106            try {
+107                try {
+108                    mappedReadMethod = getMethod(beanClass, "get" + base,
+109                            STRING_CLASS_PARAMETER);
+110                } catch (IntrospectionException e) {
+111                    mappedReadMethod = getMethod(beanClass, "is" + base,
+112                            STRING_CLASS_PARAMETER);
+113                }
+114                Class[] params = { String.class, mappedReadMethod.getReturnType() };
+115                mappedWriteMethod = getMethod(beanClass, "set" + base, params);
+116            } catch (IntrospectionException e) {
+117                /* Swallow IntrospectionException
+118                 * TODO: Why?
+119                 */
+120            }
+121            
+122            // If there's no read method, then look for just a write method 
+123            if (mappedReadMethod == null) {
+124                mappedWriteMethod = getMethod(beanClass, "set" + base, 2);
+125            }
+126    
+127            if ((mappedReadMethod == null) && (mappedWriteMethod == null)) {
+128                throw new IntrospectionException("Property '" + propertyName +
+129                        "' not found on " +
+130                        beanClass.getName());
+131            }
+132            mappedReadMethodRef  = new MappedMethodReference(mappedReadMethod);
+133            mappedWriteMethodRef = new MappedMethodReference(mappedWriteMethod);
+134            
+135            findMappedPropertyType();
+136        }
+137    
+138    
+139        /**
+140         * This constructor takes the name of a mapped property, and method
+141         * names for reading and writing the property.
+142         *
+143         * @param propertyName The programmatic name of the property.
+144         * @param beanClass The Class object for the target bean.  For
+145         *        example sun.beans.OurButton.class.
+146         * @param mappedGetterName The name of the method used for
+147         *          reading one of the property values.  May be null if the
+148         *          property is write-only.
+149         * @param mappedSetterName The name of the method used for writing
+150         *          one of the property values.  May be null if the property is
+151         *          read-only.
+152         *
+153         * @exception IntrospectionException if an exception occurs during
+154         *              introspection.
+155         */
+156        public MappedPropertyDescriptor(String propertyName, Class beanClass,
+157                                        String mappedGetterName, String mappedSetterName)
+158                throws IntrospectionException {
+159    
+160            super(propertyName, null, null);
+161    
+162            if (propertyName == null || propertyName.length() == 0) {
+163                throw new IntrospectionException("bad property name: " +
+164                        propertyName);
+165            }
+166            setName(propertyName);
+167    
+168            // search the mapped get and set methods
+169            Method mappedReadMethod = null;
+170            Method mappedWriteMethod = null;
+171            mappedReadMethod =
+172                getMethod(beanClass, mappedGetterName, STRING_CLASS_PARAMETER);
+173    
+174            if (mappedReadMethod != null) {
+175                Class[] params = { String.class, mappedReadMethod.getReturnType() };
+176                mappedWriteMethod = 
+177                    getMethod(beanClass, mappedSetterName, params);
+178            } else {
+179                mappedWriteMethod =
+180                    getMethod(beanClass, mappedSetterName, 2);
+181            }
+182            mappedReadMethodRef  = new MappedMethodReference(mappedReadMethod);
+183            mappedWriteMethodRef = new MappedMethodReference(mappedWriteMethod);
+184    
+185            findMappedPropertyType();
+186        }
+187    
+188        /**
+189         * This constructor takes the name of a mapped property, and Method
+190         * objects for reading and writing the property.
+191         *
+192         * @param propertyName The programmatic name of the property.
+193         * @param mappedGetter The method used for reading one of
+194         *          the property values.  May be be null if the property
+195         *          is write-only.
+196         * @param mappedSetter The method used for writing one the
+197         *          property values.  May be null if the property is read-only.
+198         *
+199         * @exception IntrospectionException if an exception occurs during
+200         *              introspection.
+201         */
+202        public MappedPropertyDescriptor(String propertyName,
+203                                        Method mappedGetter, Method mappedSetter)
+204                throws IntrospectionException {
+205    
+206            super(propertyName, mappedGetter, mappedSetter);
+207    
+208            if (propertyName == null || propertyName.length() == 0) {
+209                throw new IntrospectionException("bad property name: " +
+210                        propertyName);
+211            }
+212    
+213            setName(propertyName);
+214            mappedReadMethodRef  = new MappedMethodReference(mappedGetter);
+215            mappedWriteMethodRef = new MappedMethodReference(mappedSetter);
+216            findMappedPropertyType();
+217        }
+218    
+219        // -------------------------------------------------------- Public Methods
+220    
+221        /**
+222         * Gets the Class object for the property values.
+223         *
+224         * @return The Java type info for the property values.  Note that
+225         * the "Class" object may describe a built-in Java type such as "int".
+226         * The result may be "null" if this is a mapped property that
+227         * does not support non-keyed access.
+228         * <p>
+229         * This is the type that will be returned by the mappedReadMethod.
+230         */
+231        public Class getMappedPropertyType() {
+232            return (Class)mappedPropertyTypeRef.get();
+233        }
+234    
+235        /**
+236         * Gets the method that should be used to read one of the property value.
+237         *
+238         * @return The method that should be used to read the property value.
+239         * May return null if the property can't be read.
+240         */
+241        public Method getMappedReadMethod() {
+242            return mappedReadMethodRef.get();
+243        }
+244    
+245        /**
+246         * Sets the method that should be used to read one of the property value.
+247         *
+248         * @param mappedGetter The mapped getter method.
+249         * @throws IntrospectionException If an error occurs finding the
+250         * mapped property
+251         */
+252        public void setMappedReadMethod(Method mappedGetter)
+253                throws IntrospectionException {
+254            mappedReadMethodRef = new MappedMethodReference(mappedGetter);
+255            findMappedPropertyType();
+256        }
+257    
+258        /**
+259         * Gets the method that should be used to write one of the property value.
+260         *
+261         * @return The method that should be used to write one of the property value.
+262         * May return null if the property can't be written.
+263         */
+264        public Method getMappedWriteMethod() {
+265            return mappedWriteMethodRef.get();
+266        }
+267    
+268        /**
+269         * Sets the method that should be used to write the property value.
+270         *
+271         * @param mappedSetter The mapped setter method.
+272         * @throws IntrospectionException If an error occurs finding the
+273         * mapped property
+274         */
+275        public void setMappedWriteMethod(Method mappedSetter)
+276                throws IntrospectionException {
+277            mappedWriteMethodRef = new MappedMethodReference(mappedSetter);
+278            findMappedPropertyType();
+279        }
+280    
+281        // ------------------------------------------------------- Private Methods
+282    
+283        /**
+284         * Introspect our bean class to identify the corresponding getter
+285         * and setter methods.
+286         */
+287        private void findMappedPropertyType() throws IntrospectionException {
+288            try {
+289                Method mappedReadMethod  = getMappedReadMethod();
+290                Method mappedWriteMethod = getMappedWriteMethod();
+291                Class mappedPropertyType = null;
+292                if (mappedReadMethod != null) {
+293                    if (mappedReadMethod.getParameterTypes().length != 1) {
+294                        throw new IntrospectionException
+295                                ("bad mapped read method arg count");
+296                    }
+297                    mappedPropertyType = mappedReadMethod.getReturnType();
+298                    if (mappedPropertyType == Void.TYPE) {
+299                        throw new IntrospectionException
+300                                ("mapped read method " +
+301                                mappedReadMethod.getName() + " returns void");
+302                    }
+303                }
+304    
+305                if (mappedWriteMethod != null) {
+306                    Class[] params = mappedWriteMethod.getParameterTypes();
+307                    if (params.length != 2) {
+308                        throw new IntrospectionException
+309                                ("bad mapped write method arg count");
+310                    }
+311                    if (mappedPropertyType != null &&
+312                            mappedPropertyType != params[1]) {
+313                        throw new IntrospectionException
+314                                ("type mismatch between mapped read and write methods");
+315                    }
+316                    mappedPropertyType = params[1];
+317                }
+318                mappedPropertyTypeRef = new SoftReference(mappedPropertyType);
+319            } catch (IntrospectionException ex) {
+320                throw ex;
+321            }
+322        }
+323    
+324    
+325        /**
+326         * Return a capitalized version of the specified property name.
+327         *
+328         * @param s The property name
+329         */
+330        private static String capitalizePropertyName(String s) {
+331            if (s.length() == 0) {
+332                return s;
+333            }
+334    
+335            char[] chars = s.toCharArray();
+336            chars[0] = Character.toUpperCase(chars[0]);
+337            return new String(chars);
+338        }
+339    
+340        /**
+341         * Find a method on a class with a specified number of parameters.
+342         */
+343        private static Method internalGetMethod(Class initial, String methodName,
+344                                                int parameterCount) {
+345            // For overridden methods we need to find the most derived version.
+346            // So we start with the given class and walk up the superclass chain.
+347            for (Class clazz = initial; clazz != null; clazz = clazz.getSuperclass()) {
+348                Method[] methods = clazz.getDeclaredMethods();
+349                for (int i = 0; i < methods.length; i++) {
+350                    Method method = methods[i];
+351                    if (method == null) {
+352                        continue;
+353                    }
+354                    // skip static methods.
+355                    int mods = method.getModifiers();
+356                    if (!Modifier.isPublic(mods) ||
+357                        Modifier.isStatic(mods)) {
+358                        continue;
+359                    }
+360                    if (method.getName().equals(methodName) &&
+361                            method.getParameterTypes().length == parameterCount) {
+362                        return method;
+363                    }
+364                }
+365            }
+366    
+367            // Now check any inherited interfaces.  This is necessary both when
+368            // the argument class is itself an interface, and when the argument
+369            // class is an abstract class.
+370            Class[] interfaces = initial.getInterfaces();
+371            for (int i = 0; i < interfaces.length; i++) {
+372                Method method = internalGetMethod(interfaces[i], methodName, parameterCount);
+373                if (method != null) {
+374                    return method;
+375                }
+376            }
+377    
+378            return null;
+379        }
+380    
+381        /**
+382         * Find a method on a class with a specified number of parameters.
+383         */
+384        private static Method getMethod(Class clazz, String methodName, int parameterCount)
+385                throws IntrospectionException {
+386            if (methodName == null) {
+387                return null;
+388            }
+389    
+390            Method method = internalGetMethod(clazz, methodName, parameterCount);
+391            if (method != null) {
+392                return method;
+393            }
+394    
+395            // No Method found
+396            throw new IntrospectionException("No method \"" + methodName +
+397                    "\" with " + parameterCount + " parameter(s)");
+398        }
+399    
+400        /**
+401         * Find a method on a class with a specified parameter list.
+402         */
+403        private static Method getMethod(Class clazz, String methodName, Class[] parameterTypes) 
+404                                               throws IntrospectionException {
+405            if (methodName == null) {
+406                return null;
+407            }
+408    
+409            Method method = MethodUtils.getMatchingAccessibleMethod(clazz, methodName, parameterTypes);
+410            if (method != null) {
+411                return method;
+412            }
+413    
+414            int parameterCount = (parameterTypes == null) ? 0 : parameterTypes.length;
+415    
+416            // No Method found
+417            throw new IntrospectionException("No method \"" + methodName +
+418                    "\" with " + parameterCount + " parameter(s) of matching types.");
+419        }
+420    
+421        /**
+422         * Holds a {@link Method} in a {@link SoftReference} so that it
+423         * it doesn't prevent any ClassLoader being garbage collected, but
+424         * tries to re-create the method if the method reference has been
+425         * released.
+426         *
+427         * See http://issues.apache.org/jira/browse/BEANUTILS-291
+428         */
+429        private static class MappedMethodReference {
+430            private String className;
+431            private String methodName;
+432            private Reference methodRef;
+433            private Reference classRef;
+434            private Reference writeParamTypeRef0;
+435            private Reference writeParamTypeRef1;
+436            private String[] writeParamClassNames;
+437            MappedMethodReference(Method m) {
+438                if (m != null) {
+439                    className = m.getDeclaringClass().getName();
+440                    methodName = m.getName();
+441                    methodRef = new SoftReference(m);
+442                    classRef = new WeakReference(m.getDeclaringClass());
+443                    Class[] types = m.getParameterTypes();
+444                    if (types.length == 2) {
+445                        writeParamTypeRef0 = new WeakReference(types[0]);
+446                        writeParamTypeRef1 = new WeakReference(types[1]);
+447                        writeParamClassNames = new String[2];
+448                        writeParamClassNames[0] = types[0].getName();
+449                        writeParamClassNames[1] = types[1].getName();
+450                    }
+451                }
+452            }
+453            private Method get() {
+454                if (methodRef == null) {
+455                    return null;
+456                }
+457                Method m = (Method)methodRef.get();
+458                if (m == null) {
+459                    Class clazz = (Class)classRef.get();
+460                    if (clazz == null) {
+461                        clazz = reLoadClass();
+462                        if (clazz != null) {
+463                            classRef = new WeakReference(clazz);
+464                        }
+465                    }
+466                    if (clazz == null) {
+467                        throw new RuntimeException("Method " + methodName + " for " +
+468                                className + " could not be reconstructed - class reference has gone");
+469                    }
+470                    Class[] paramTypes = null;
+471                    if (writeParamClassNames != null) {
+472                        paramTypes = new Class[2];
+473                        paramTypes[0] = (Class)writeParamTypeRef0.get();
+474                        if (paramTypes[0] == null) {
+475                            paramTypes[0] = reLoadClass(writeParamClassNames[0]);
+476                            if (paramTypes[0] != null) {
+477                                writeParamTypeRef0 = new WeakReference(paramTypes[0]);
+478                            }
+479                        }
+480                        paramTypes[1] = (Class)writeParamTypeRef1.get();
+481                        if (paramTypes[1] == null) {
+482                            paramTypes[1] = reLoadClass(writeParamClassNames[1]);
+483                            if (paramTypes[1] != null) {
+484                                writeParamTypeRef1 = new WeakReference(paramTypes[1]);
+485                            }
+486                        }
+487                    } else {
+488                        paramTypes = STRING_CLASS_PARAMETER;
+489                    }
+490                    try {
+491                        m = clazz.getMethod(methodName, paramTypes);
+492                        // Un-comment following line for testing
+493                        // System.out.println("Recreated Method " + methodName + " for " + className);
+494                    } catch (NoSuchMethodException e) {
+495                        throw new RuntimeException("Method " + methodName + " for " +
+496                                className + " could not be reconstructed - method not found");
+497                    }
+498                    methodRef = new SoftReference(m);
+499                }
+500                return m;
+501            }
+502    
+503            /**
+504             * Try to re-load the class
+505             */
+506            private Class reLoadClass() {
+507                return reLoadClass(className);
+508            }
+509    
+510            /**
+511             * Try to re-load the class
+512             */
+513            private Class reLoadClass(String name) {
+514    
+515                ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+516    
+517                // Try the context class loader
+518                if (classLoader != null) {
+519                    try {
+520                        return classLoader.loadClass(name);
+521                    } catch (ClassNotFoundException e) {
+522                        // ignore
+523                    }
+524                }
+525    
+526                // Try this class's class loader
+527                classLoader = MappedPropertyDescriptor.class.getClassLoader();
+528                try {
+529                    return classLoader.loadClass(name);
+530                } catch (ClassNotFoundException e) {
+531                    return null;
+532                }
+533            }
+534        }
+535    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MethodUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MethodUtils.html new file mode 100644 index 0000000..4de9752 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MethodUtils.html @@ -0,0 +1,1428 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    
+021    import java.lang.ref.Reference;
+022    import java.lang.ref.WeakReference;
+023    import java.lang.reflect.InvocationTargetException;
+024    import java.lang.reflect.Method;
+025    import java.lang.reflect.Modifier;
+026    import java.util.Collections;
+027    import java.util.Map;
+028    import java.util.WeakHashMap;
+029    
+030    import org.apache.commons.logging.Log;
+031    import org.apache.commons.logging.LogFactory;
+032    
+033    
+034    /**
+035     * <p> Utility reflection methods focussed on methods in general rather than properties in particular. </p>
+036     *
+037     * <h3>Known Limitations</h3>
+038     * <h4>Accessing Public Methods In A Default Access Superclass</h4>
+039     * <p>There is an issue when invoking public methods contained in a default access superclass.
+040     * Reflection locates these methods fine and correctly assigns them as public.
+041     * However, an <code>IllegalAccessException</code> is thrown if the method is invoked.</p>
+042     *
+043     * <p><code>MethodUtils</code> contains a workaround for this situation. 
+044     * It will attempt to call <code>setAccessible</code> on this method.
+045     * If this call succeeds, then the method can be invoked as normal.
+046     * This call will only succeed when the application has sufficient security privilages. 
+047     * If this call fails then a warning will be logged and the method may fail.</p>
+048     *
+049     * @author Craig R. McClanahan
+050     * @author Ralph Schaer
+051     * @author Chris Audley
+052     * @author Rey Fran&#231;ois
+053     * @author Gregor Ra&#253;man
+054     * @author Jan Sorensen
+055     * @author Robert Burrell Donkin
+056     */
+057    
+058    public class MethodUtils {
+059    
+060        // --------------------------------------------------------- Private Methods
+061        
+062        /** 
+063         * Only log warning about accessibility work around once.
+064         * <p>
+065         * Note that this is broken when this class is deployed via a shared
+066         * classloader in a container, as the warning message will be emitted
+067         * only once, not once per webapp. However making the warning appear
+068         * once per webapp means having a map keyed by context classloader
+069         * which introduces nasty memory-leak problems. As this warning is
+070         * really optional we can ignore this problem; only one of the webapps
+071         * will get the warning in its logs but that should be good enough.
+072         */
+073        private static boolean loggedAccessibleWarning = false;
+074        
+075        /** 
+076         * Indicates whether methods should be cached for improved performance.
+077         * <p>
+078         * Note that when this class is deployed via a shared classloader in
+079         * a container, this will affect all webapps. However making this
+080         * configurable per webapp would mean having a map keyed by context classloader
+081         * which may introduce memory-leak problems.
+082         */
+083        private static boolean CACHE_METHODS = true;
+084    
+085        /** An empty class array */
+086        private static final Class[] EMPTY_CLASS_PARAMETERS = new Class[0];
+087        /** An empty object array */
+088        private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+089    
+090        /**
+091         * Stores a cache of MethodDescriptor -> Method in a WeakHashMap.
+092         * <p>
+093         * The keys into this map only ever exist as temporary variables within
+094         * methods of this class, and are never exposed to users of this class.
+095         * This means that the WeakHashMap is used only as a mechanism for 
+096         * limiting the size of the cache, ie a way to tell the garbage collector
+097         * that the contents of the cache can be completely garbage-collected 
+098         * whenever it needs the memory. Whether this is a good approach to
+099         * this problem is doubtful; something like the commons-collections
+100         * LRUMap may be more appropriate (though of course selecting an
+101         * appropriate size is an issue).
+102         * <p>
+103         * This static variable is safe even when this code is deployed via a
+104         * shared classloader because it is keyed via a MethodDescriptor object
+105         * which has a Class as one of its members and that member is used in
+106         * the MethodDescriptor.equals method. So two components that load the same
+107         * class via different classloaders will generate non-equal MethodDescriptor
+108         * objects and hence end up with different entries in the map.
+109         */
+110        private static final Map cache = Collections.synchronizedMap(new WeakHashMap());
+111        
+112        // --------------------------------------------------------- Public Methods
+113    
+114        /**
+115         * Set whether methods should be cached for greater performance or not,
+116         * default is <code>true</code>.
+117         *
+118         * @param cacheMethods <code>true</code> if methods should be
+119         * cached for greater performance, otherwise <code>false</code>
+120         * @since 1.8.0
+121         */
+122        public static synchronized void setCacheMethods(boolean cacheMethods) {
+123            CACHE_METHODS = cacheMethods;
+124            if (!CACHE_METHODS) {
+125                clearCache();
+126            }
+127        }
+128    
+129        /**
+130         * Clear the method cache.
+131         * @return the number of cached methods cleared
+132         * @since 1.8.0
+133         */
+134        public static synchronized int clearCache() {
+135            int size = cache.size();
+136            cache.clear();
+137            return size;
+138        }
+139        
+140        /**
+141         * <p>Invoke a named method whose parameter type matches the object type.</p>
+142         *
+143         * <p>The behaviour of this method is less deterministic 
+144         * than <code>invokeExactMethod()</code>.
+145         * It loops through all methods with names that match
+146         * and then executes the first it finds with compatable parameters.</p>
+147         *
+148         * <p>This method supports calls to methods taking primitive parameters 
+149         * via passing in wrapping classes. So, for example, a <code>Boolean</code> class
+150         * would match a <code>boolean</code> primitive.</p>
+151         *
+152         * <p> This is a convenient wrapper for
+153         * {@link #invokeMethod(Object object,String methodName,Object [] args)}.
+154         * </p>
+155         *
+156         * @param object invoke method on this object
+157         * @param methodName get method with this name
+158         * @param arg use this argument
+159         * @return The value returned by the invoked method
+160         *
+161         * @throws NoSuchMethodException if there is no such accessible method
+162         * @throws InvocationTargetException wraps an exception thrown by the
+163         *  method invoked
+164         * @throws IllegalAccessException if the requested method is not accessible
+165         *  via reflection
+166         */
+167        public static Object invokeMethod(
+168                Object object,
+169                String methodName,
+170                Object arg)
+171                throws
+172                NoSuchMethodException,
+173                IllegalAccessException,
+174                InvocationTargetException {
+175    
+176            Object[] args = {arg};
+177            return invokeMethod(object, methodName, args);
+178    
+179        }
+180    
+181    
+182        /**
+183         * <p>Invoke a named method whose parameter type matches the object type.</p>
+184         *
+185         * <p>The behaviour of this method is less deterministic 
+186         * than {@link #invokeExactMethod(Object object,String methodName,Object [] args)}. 
+187         * It loops through all methods with names that match
+188         * and then executes the first it finds with compatable parameters.</p>
+189         *
+190         * <p>This method supports calls to methods taking primitive parameters 
+191         * via passing in wrapping classes. So, for example, a <code>Boolean</code> class
+192         * would match a <code>boolean</code> primitive.</p>
+193         *
+194         * <p> This is a convenient wrapper for
+195         * {@link #invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}.
+196         * </p>
+197         *
+198         * @param object invoke method on this object
+199         * @param methodName get method with this name
+200         * @param args use these arguments - treat null as empty array
+201         * @return The value returned by the invoked method
+202         *
+203         * @throws NoSuchMethodException if there is no such accessible method
+204         * @throws InvocationTargetException wraps an exception thrown by the
+205         *  method invoked
+206         * @throws IllegalAccessException if the requested method is not accessible
+207         *  via reflection
+208         */
+209        public static Object invokeMethod(
+210                Object object,
+211                String methodName,
+212                Object[] args)
+213                throws
+214                NoSuchMethodException,
+215                IllegalAccessException,
+216                InvocationTargetException {
+217            
+218            if (args == null) {
+219                args = EMPTY_OBJECT_ARRAY;
+220            }  
+221            int arguments = args.length;
+222            Class[] parameterTypes = new Class[arguments];
+223            for (int i = 0; i < arguments; i++) {
+224                parameterTypes[i] = args[i].getClass();
+225            }
+226            return invokeMethod(object, methodName, args, parameterTypes);
+227    
+228        }
+229    
+230    
+231        /**
+232         * <p>Invoke a named method whose parameter type matches the object type.</p>
+233         *
+234         * <p>The behaviour of this method is less deterministic 
+235         * than {@link 
+236         * #invokeExactMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}. 
+237         * It loops through all methods with names that match
+238         * and then executes the first it finds with compatable parameters.</p>
+239         *
+240         * <p>This method supports calls to methods taking primitive parameters 
+241         * via passing in wrapping classes. So, for example, a <code>Boolean</code> class
+242         * would match a <code>boolean</code> primitive.</p>
+243         *
+244         *
+245         * @param object invoke method on this object
+246         * @param methodName get method with this name
+247         * @param args use these arguments - treat null as empty array
+248         * @param parameterTypes match these parameters - treat null as empty array
+249         * @return The value returned by the invoked method
+250         *
+251         * @throws NoSuchMethodException if there is no such accessible method
+252         * @throws InvocationTargetException wraps an exception thrown by the
+253         *  method invoked
+254         * @throws IllegalAccessException if the requested method is not accessible
+255         *  via reflection
+256         */
+257        public static Object invokeMethod(
+258                Object object,
+259                String methodName,
+260                Object[] args,
+261                Class[] parameterTypes)
+262                    throws
+263                        NoSuchMethodException,
+264                        IllegalAccessException,
+265                        InvocationTargetException {
+266                        
+267            if (parameterTypes == null) {
+268                parameterTypes = EMPTY_CLASS_PARAMETERS;
+269            }        
+270            if (args == null) {
+271                args = EMPTY_OBJECT_ARRAY;
+272            }  
+273    
+274            Method method = getMatchingAccessibleMethod(
+275                    object.getClass(),
+276                    methodName,
+277                    parameterTypes);
+278            if (method == null) {
+279                throw new NoSuchMethodException("No such accessible method: " +
+280                        methodName + "() on object: " + object.getClass().getName());
+281            }
+282            return method.invoke(object, args);
+283        }
+284    
+285    
+286        /**
+287         * <p>Invoke a method whose parameter type matches exactly the object
+288         * type.</p>
+289         *
+290         * <p> This is a convenient wrapper for
+291         * {@link #invokeExactMethod(Object object,String methodName,Object [] args)}.
+292         * </p>
+293         *
+294         * @param object invoke method on this object
+295         * @param methodName get method with this name
+296         * @param arg use this argument
+297         * @return The value returned by the invoked method
+298         *
+299         * @throws NoSuchMethodException if there is no such accessible method
+300         * @throws InvocationTargetException wraps an exception thrown by the
+301         *  method invoked
+302         * @throws IllegalAccessException if the requested method is not accessible
+303         *  via reflection
+304         */
+305        public static Object invokeExactMethod(
+306                Object object,
+307                String methodName,
+308                Object arg)
+309                throws
+310                NoSuchMethodException,
+311                IllegalAccessException,
+312                InvocationTargetException {
+313    
+314            Object[] args = {arg};
+315            return invokeExactMethod(object, methodName, args);
+316    
+317        }
+318    
+319    
+320        /**
+321         * <p>Invoke a method whose parameter types match exactly the object
+322         * types.</p>
+323         *
+324         * <p> This uses reflection to invoke the method obtained from a call to
+325         * <code>getAccessibleMethod()</code>.</p>
+326         *
+327         * @param object invoke method on this object
+328         * @param methodName get method with this name
+329         * @param args use these arguments - treat null as empty array
+330         * @return The value returned by the invoked method
+331         *
+332         * @throws NoSuchMethodException if there is no such accessible method
+333         * @throws InvocationTargetException wraps an exception thrown by the
+334         *  method invoked
+335         * @throws IllegalAccessException if the requested method is not accessible
+336         *  via reflection
+337         */
+338        public static Object invokeExactMethod(
+339                Object object,
+340                String methodName,
+341                Object[] args)
+342                throws
+343                NoSuchMethodException,
+344                IllegalAccessException,
+345                InvocationTargetException {
+346            if (args == null) {
+347                args = EMPTY_OBJECT_ARRAY;
+348            }  
+349            int arguments = args.length;
+350            Class[] parameterTypes = new Class[arguments];
+351            for (int i = 0; i < arguments; i++) {
+352                parameterTypes[i] = args[i].getClass();
+353            }
+354            return invokeExactMethod(object, methodName, args, parameterTypes);
+355    
+356        }
+357    
+358    
+359        /**
+360         * <p>Invoke a method whose parameter types match exactly the parameter
+361         * types given.</p>
+362         *
+363         * <p>This uses reflection to invoke the method obtained from a call to
+364         * <code>getAccessibleMethod()</code>.</p>
+365         *
+366         * @param object invoke method on this object
+367         * @param methodName get method with this name
+368         * @param args use these arguments - treat null as empty array
+369         * @param parameterTypes match these parameters - treat null as empty array
+370         * @return The value returned by the invoked method
+371         *
+372         * @throws NoSuchMethodException if there is no such accessible method
+373         * @throws InvocationTargetException wraps an exception thrown by the
+374         *  method invoked
+375         * @throws IllegalAccessException if the requested method is not accessible
+376         *  via reflection
+377         */
+378        public static Object invokeExactMethod(
+379                Object object,
+380                String methodName,
+381                Object[] args,
+382                Class[] parameterTypes)
+383                throws
+384                NoSuchMethodException,
+385                IllegalAccessException,
+386                InvocationTargetException {
+387            
+388            if (args == null) {
+389                args = EMPTY_OBJECT_ARRAY;
+390            }  
+391                    
+392            if (parameterTypes == null) {
+393                parameterTypes = EMPTY_CLASS_PARAMETERS;
+394            }
+395    
+396            Method method = getAccessibleMethod(
+397                    object.getClass(),
+398                    methodName,
+399                    parameterTypes);
+400            if (method == null) {
+401                throw new NoSuchMethodException("No such accessible method: " +
+402                        methodName + "() on object: " + object.getClass().getName());
+403            }
+404            return method.invoke(object, args);
+405    
+406        }
+407    
+408        /**
+409         * <p>Invoke a static method whose parameter types match exactly the parameter
+410         * types given.</p>
+411         *
+412         * <p>This uses reflection to invoke the method obtained from a call to
+413         * {@link #getAccessibleMethod(Class, String, Class[])}.</p>
+414         *
+415         * @param objectClass invoke static method on this class
+416         * @param methodName get method with this name
+417         * @param args use these arguments - treat null as empty array
+418         * @param parameterTypes match these parameters - treat null as empty array
+419         * @return The value returned by the invoked method
+420         *
+421         * @throws NoSuchMethodException if there is no such accessible method
+422         * @throws InvocationTargetException wraps an exception thrown by the
+423         *  method invoked
+424         * @throws IllegalAccessException if the requested method is not accessible
+425         *  via reflection
+426         * @since 1.8.0
+427         */
+428        public static Object invokeExactStaticMethod(
+429                Class objectClass,
+430                String methodName,
+431                Object[] args,
+432                Class[] parameterTypes)
+433                throws
+434                NoSuchMethodException,
+435                IllegalAccessException,
+436                InvocationTargetException {
+437            
+438            if (args == null) {
+439                args = EMPTY_OBJECT_ARRAY;
+440            }  
+441                    
+442            if (parameterTypes == null) {
+443                parameterTypes = EMPTY_CLASS_PARAMETERS;
+444            }
+445    
+446            Method method = getAccessibleMethod(
+447                    objectClass,
+448                    methodName,
+449                    parameterTypes);
+450            if (method == null) {
+451                throw new NoSuchMethodException("No such accessible method: " +
+452                        methodName + "() on class: " + objectClass.getName());
+453            }
+454            return method.invoke(null, args);
+455    
+456        }
+457    
+458        /**
+459         * <p>Invoke a named static method whose parameter type matches the object type.</p>
+460         *
+461         * <p>The behaviour of this method is less deterministic 
+462         * than {@link #invokeExactMethod(Object, String, Object[], Class[])}. 
+463         * It loops through all methods with names that match
+464         * and then executes the first it finds with compatable parameters.</p>
+465         *
+466         * <p>This method supports calls to methods taking primitive parameters 
+467         * via passing in wrapping classes. So, for example, a <code>Boolean</code> class
+468         * would match a <code>boolean</code> primitive.</p>
+469         *
+470         * <p> This is a convenient wrapper for
+471         * {@link #invokeStaticMethod(Class objectClass,String methodName,Object [] args)}.
+472         * </p>
+473         *
+474         * @param objectClass invoke static method on this class
+475         * @param methodName get method with this name
+476         * @param arg use this argument
+477         * @return The value returned by the invoked method
+478         *
+479         * @throws NoSuchMethodException if there is no such accessible method
+480         * @throws InvocationTargetException wraps an exception thrown by the
+481         *  method invoked
+482         * @throws IllegalAccessException if the requested method is not accessible
+483         *  via reflection
+484         * @since 1.8.0
+485         */
+486        public static Object invokeStaticMethod(
+487                Class objectClass,
+488                String methodName,
+489                Object arg)
+490                throws
+491                NoSuchMethodException,
+492                IllegalAccessException,
+493                InvocationTargetException {
+494    
+495            Object[] args = {arg};
+496            return invokeStaticMethod (objectClass, methodName, args);
+497    
+498        }
+499    
+500    
+501        /**
+502         * <p>Invoke a named static method whose parameter type matches the object type.</p>
+503         *
+504         * <p>The behaviour of this method is less deterministic 
+505         * than {@link #invokeExactMethod(Object object,String methodName,Object [] args)}. 
+506         * It loops through all methods with names that match
+507         * and then executes the first it finds with compatable parameters.</p>
+508         *
+509         * <p>This method supports calls to methods taking primitive parameters 
+510         * via passing in wrapping classes. So, for example, a <code>Boolean</code> class
+511         * would match a <code>boolean</code> primitive.</p>
+512         *
+513         * <p> This is a convenient wrapper for
+514         * {@link #invokeStaticMethod(Class objectClass,String methodName,Object [] args,Class[] parameterTypes)}.
+515         * </p>
+516         *
+517         * @param objectClass invoke static method on this class
+518         * @param methodName get method with this name
+519         * @param args use these arguments - treat null as empty array
+520         * @return The value returned by the invoked method
+521         *
+522         * @throws NoSuchMethodException if there is no such accessible method
+523         * @throws InvocationTargetException wraps an exception thrown by the
+524         *  method invoked
+525         * @throws IllegalAccessException if the requested method is not accessible
+526         *  via reflection
+527         * @since 1.8.0
+528         */
+529        public static Object invokeStaticMethod(
+530                Class objectClass,
+531                String methodName,
+532                Object[] args)
+533                throws
+534                NoSuchMethodException,
+535                IllegalAccessException,
+536                InvocationTargetException {
+537            
+538            if (args == null) {
+539                args = EMPTY_OBJECT_ARRAY;
+540            }  
+541            int arguments = args.length;
+542            Class[] parameterTypes = new Class[arguments];
+543            for (int i = 0; i < arguments; i++) {
+544                parameterTypes[i] = args[i].getClass();
+545            }
+546            return invokeStaticMethod (objectClass, methodName, args, parameterTypes);
+547    
+548        }
+549    
+550    
+551        /**
+552         * <p>Invoke a named static method whose parameter type matches the object type.</p>
+553         *
+554         * <p>The behaviour of this method is less deterministic 
+555         * than {@link 
+556         * #invokeExactStaticMethod(Class objectClass,String methodName,Object [] args,Class[] parameterTypes)}. 
+557         * It loops through all methods with names that match
+558         * and then executes the first it finds with compatable parameters.</p>
+559         *
+560         * <p>This method supports calls to methods taking primitive parameters 
+561         * via passing in wrapping classes. So, for example, a <code>Boolean</code> class
+562         * would match a <code>boolean</code> primitive.</p>
+563         *
+564         *
+565         * @param objectClass invoke static method on this class
+566         * @param methodName get method with this name
+567         * @param args use these arguments - treat null as empty array
+568         * @param parameterTypes match these parameters - treat null as empty array
+569         * @return The value returned by the invoked method
+570         *
+571         * @throws NoSuchMethodException if there is no such accessible method
+572         * @throws InvocationTargetException wraps an exception thrown by the
+573         *  method invoked
+574         * @throws IllegalAccessException if the requested method is not accessible
+575         *  via reflection
+576         * @since 1.8.0
+577         */
+578        public static Object invokeStaticMethod(
+579                Class objectClass,
+580                String methodName,
+581                Object[] args,
+582                Class[] parameterTypes)
+583                    throws
+584                        NoSuchMethodException,
+585                        IllegalAccessException,
+586                        InvocationTargetException {
+587                        
+588            if (parameterTypes == null) {
+589                parameterTypes = EMPTY_CLASS_PARAMETERS;
+590            }        
+591            if (args == null) {
+592                args = EMPTY_OBJECT_ARRAY;
+593            }  
+594    
+595            Method method = getMatchingAccessibleMethod(
+596                    objectClass,
+597                    methodName,
+598                    parameterTypes);
+599            if (method == null) {
+600                throw new NoSuchMethodException("No such accessible method: " +
+601                        methodName + "() on class: " + objectClass.getName());
+602            }
+603            return method.invoke(null, args);
+604        }
+605    
+606    
+607        /**
+608         * <p>Invoke a static method whose parameter type matches exactly the object
+609         * type.</p>
+610         *
+611         * <p> This is a convenient wrapper for
+612         * {@link #invokeExactStaticMethod(Class objectClass,String methodName,Object [] args)}.
+613         * </p>
+614         *
+615         * @param objectClass invoke static method on this class
+616         * @param methodName get method with this name
+617         * @param arg use this argument
+618         * @return The value returned by the invoked method
+619         *
+620         * @throws NoSuchMethodException if there is no such accessible method
+621         * @throws InvocationTargetException wraps an exception thrown by the
+622         *  method invoked
+623         * @throws IllegalAccessException if the requested method is not accessible
+624         *  via reflection
+625         * @since 1.8.0
+626         */
+627        public static Object invokeExactStaticMethod(
+628                Class objectClass,
+629                String methodName,
+630                Object arg)
+631                throws
+632                NoSuchMethodException,
+633                IllegalAccessException,
+634                InvocationTargetException {
+635    
+636            Object[] args = {arg};
+637            return invokeExactStaticMethod (objectClass, methodName, args);
+638    
+639        }
+640    
+641    
+642        /**
+643         * <p>Invoke a static method whose parameter types match exactly the object
+644         * types.</p>
+645         *
+646         * <p> This uses reflection to invoke the method obtained from a call to
+647         * {@link #getAccessibleMethod(Class, String, Class[])}.</p>
+648         *
+649         * @param objectClass invoke static method on this class
+650         * @param methodName get method with this name
+651         * @param args use these arguments - treat null as empty array
+652         * @return The value returned by the invoked method
+653         *
+654         * @throws NoSuchMethodException if there is no such accessible method
+655         * @throws InvocationTargetException wraps an exception thrown by the
+656         *  method invoked
+657         * @throws IllegalAccessException if the requested method is not accessible
+658         *  via reflection
+659         * @since 1.8.0
+660         */
+661        public static Object invokeExactStaticMethod(
+662                Class objectClass,
+663                String methodName,
+664                Object[] args)
+665                throws
+666                NoSuchMethodException,
+667                IllegalAccessException,
+668                InvocationTargetException {
+669            if (args == null) {
+670                args = EMPTY_OBJECT_ARRAY;
+671            }  
+672            int arguments = args.length;
+673            Class[] parameterTypes = new Class[arguments];
+674            for (int i = 0; i < arguments; i++) {
+675                parameterTypes[i] = args[i].getClass();
+676            }
+677            return invokeExactStaticMethod(objectClass, methodName, args, parameterTypes);
+678    
+679        }
+680    
+681    
+682        /**
+683         * <p>Return an accessible method (that is, one that can be invoked via
+684         * reflection) with given name and a single parameter.  If no such method
+685         * can be found, return <code>null</code>.
+686         * Basically, a convenience wrapper that constructs a <code>Class</code>
+687         * array for you.</p>
+688         *
+689         * @param clazz get method from this class
+690         * @param methodName get method with this name
+691         * @param parameterType taking this type of parameter
+692         * @return The accessible method
+693         */
+694        public static Method getAccessibleMethod(
+695                Class clazz,
+696                String methodName,
+697                Class parameterType) {
+698    
+699            Class[] parameterTypes = {parameterType};
+700            return getAccessibleMethod(clazz, methodName, parameterTypes);
+701    
+702        }
+703    
+704    
+705        /**
+706         * <p>Return an accessible method (that is, one that can be invoked via
+707         * reflection) with given name and parameters.  If no such method
+708         * can be found, return <code>null</code>.
+709         * This is just a convenient wrapper for
+710         * {@link #getAccessibleMethod(Method method)}.</p>
+711         *
+712         * @param clazz get method from this class
+713         * @param methodName get method with this name
+714         * @param parameterTypes with these parameters types
+715         * @return The accessible method
+716         */
+717        public static Method getAccessibleMethod(
+718                Class clazz,
+719                String methodName,
+720                Class[] parameterTypes) {
+721    
+722            try {
+723                MethodDescriptor md = new MethodDescriptor(clazz, methodName, parameterTypes, true);
+724                // Check the cache first
+725                Method method = getCachedMethod(md);
+726                if (method != null) {
+727                    return method;
+728                }
+729                
+730                method =  getAccessibleMethod
+731                        (clazz, clazz.getMethod(methodName, parameterTypes));
+732                cacheMethod(md, method);
+733                return method;
+734            } catch (NoSuchMethodException e) {
+735                return (null);
+736            }
+737    
+738        }
+739    
+740    
+741        /**
+742         * <p>Return an accessible method (that is, one that can be invoked via
+743         * reflection) that implements the specified Method.  If no such method
+744         * can be found, return <code>null</code>.</p>
+745         *
+746         * @param method The method that we wish to call
+747         * @return The accessible method
+748         */
+749        public static Method getAccessibleMethod(Method method) {
+750    
+751            // Make sure we have a method to check
+752            if (method == null) {
+753                return (null);
+754            }
+755    
+756            return getAccessibleMethod(method.getDeclaringClass(), method);
+757    
+758        }
+759    
+760    
+761    
+762        /**
+763         * <p>Return an accessible method (that is, one that can be invoked via
+764         * reflection) that implements the specified Method.  If no such method
+765         * can be found, return <code>null</code>.</p>
+766         *
+767         * @param clazz The class of the object
+768         * @param method The method that we wish to call
+769         * @return The accessible method
+770         * @since 1.8.0
+771         */
+772        public static Method getAccessibleMethod(Class clazz, Method method) {
+773    
+774            // Make sure we have a method to check
+775            if (method == null) {
+776                return (null);
+777            }
+778    
+779            // If the requested method is not public we cannot call it
+780            if (!Modifier.isPublic(method.getModifiers())) {
+781                return (null);
+782            }
+783    
+784            boolean sameClass = true;
+785            if (clazz == null) {
+786                clazz = method.getDeclaringClass();
+787            } else {
+788                sameClass = clazz.equals(method.getDeclaringClass());
+789                if (!method.getDeclaringClass().isAssignableFrom(clazz)) {
+790                    throw new IllegalArgumentException(clazz.getName() +
+791                            " is not assignable from " + method.getDeclaringClass().getName());
+792                }
+793            }
+794    
+795            // If the class is public, we are done
+796            if (Modifier.isPublic(clazz.getModifiers())) {
+797                if (!sameClass && !Modifier.isPublic(method.getDeclaringClass().getModifiers())) {
+798                    setMethodAccessible(method); // Default access superclass workaround
+799                }
+800                return (method);
+801            }
+802    
+803            String methodName      = method.getName();
+804            Class[] parameterTypes = method.getParameterTypes();
+805    
+806            // Check the implemented interfaces and subinterfaces
+807            method =
+808                    getAccessibleMethodFromInterfaceNest(clazz,
+809                            methodName,
+810                            parameterTypes);
+811    
+812            // Check the superclass chain
+813            if (method == null) {
+814                method = getAccessibleMethodFromSuperclass(clazz,
+815                            methodName,
+816                            parameterTypes);
+817            }
+818    
+819            return (method);
+820    
+821        }
+822    
+823    
+824        // -------------------------------------------------------- Private Methods
+825    
+826        /**
+827         * <p>Return an accessible method (that is, one that can be invoked via
+828         * reflection) by scanning through the superclasses. If no such method
+829         * can be found, return <code>null</code>.</p>
+830         *
+831         * @param clazz Class to be checked
+832         * @param methodName Method name of the method we wish to call
+833         * @param parameterTypes The parameter type signatures
+834         */
+835        private static Method getAccessibleMethodFromSuperclass
+836                (Class clazz, String methodName, Class[] parameterTypes) {
+837    
+838            Class parentClazz = clazz.getSuperclass();
+839            while (parentClazz != null) {
+840                if (Modifier.isPublic(parentClazz.getModifiers())) {
+841                    try {
+842                        return parentClazz.getMethod(methodName, parameterTypes);
+843                    } catch (NoSuchMethodException e) {
+844                        return null;
+845                    }
+846                }
+847                parentClazz = parentClazz.getSuperclass();
+848            }
+849            return null;
+850        }
+851    
+852        /**
+853         * <p>Return an accessible method (that is, one that can be invoked via
+854         * reflection) that implements the specified method, by scanning through
+855         * all implemented interfaces and subinterfaces.  If no such method
+856         * can be found, return <code>null</code>.</p>
+857         *
+858         * <p> There isn't any good reason why this method must be private.
+859         * It is because there doesn't seem any reason why other classes should
+860         * call this rather than the higher level methods.</p>
+861         *
+862         * @param clazz Parent class for the interfaces to be checked
+863         * @param methodName Method name of the method we wish to call
+864         * @param parameterTypes The parameter type signatures
+865         */
+866        private static Method getAccessibleMethodFromInterfaceNest
+867                (Class clazz, String methodName, Class[] parameterTypes) {
+868    
+869            Method method = null;
+870    
+871            // Search up the superclass chain
+872            for (; clazz != null; clazz = clazz.getSuperclass()) {
+873    
+874                // Check the implemented interfaces of the parent class
+875                Class[] interfaces = clazz.getInterfaces();
+876                for (int i = 0; i < interfaces.length; i++) {
+877    
+878                    // Is this interface public?
+879                    if (!Modifier.isPublic(interfaces[i].getModifiers())) {
+880                        continue;
+881                    }
+882    
+883                    // Does the method exist on this interface?
+884                    try {
+885                        method = interfaces[i].getDeclaredMethod(methodName,
+886                                parameterTypes);
+887                    } catch (NoSuchMethodException e) {
+888                        /* Swallow, if no method is found after the loop then this
+889                         * method returns null.
+890                         */
+891                    }
+892                    if (method != null) {
+893                        return method;
+894                    }
+895    
+896                    // Recursively check our parent interfaces
+897                    method =
+898                            getAccessibleMethodFromInterfaceNest(interfaces[i],
+899                                    methodName,
+900                                    parameterTypes);
+901                    if (method != null) {
+902                        return method;
+903                    }
+904    
+905                }
+906    
+907            }
+908    
+909            // We did not find anything
+910            return (null);
+911    
+912        }
+913    
+914        /**
+915         * <p>Find an accessible method that matches the given name and has compatible parameters.
+916         * Compatible parameters mean that every method parameter is assignable from 
+917         * the given parameters.
+918         * In other words, it finds a method with the given name 
+919         * that will take the parameters given.<p>
+920         *
+921         * <p>This method is slightly undeterminstic since it loops 
+922         * through methods names and return the first matching method.</p>
+923         * 
+924         * <p>This method is used by 
+925         * {@link 
+926         * #invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}.
+927         *
+928         * <p>This method can match primitive parameter by passing in wrapper classes.
+929         * For example, a <code>Boolean</code> will match a primitive <code>boolean</code>
+930         * parameter.
+931         *
+932         * @param clazz find method in this class
+933         * @param methodName find method with this name
+934         * @param parameterTypes find method with compatible parameters 
+935         * @return The accessible method
+936         */
+937        public static Method getMatchingAccessibleMethod(
+938                                                    Class clazz,
+939                                                    String methodName,
+940                                                    Class[] parameterTypes) {
+941            // trace logging
+942            Log log = LogFactory.getLog(MethodUtils.class);
+943            if (log.isTraceEnabled()) {
+944                log.trace("Matching name=" + methodName + " on " + clazz);
+945            }
+946            MethodDescriptor md = new MethodDescriptor(clazz, methodName, parameterTypes, false);
+947            
+948            // see if we can find the method directly
+949            // most of the time this works and it's much faster
+950            try {
+951                // Check the cache first
+952                Method method = getCachedMethod(md);
+953                if (method != null) {
+954                    return method;
+955                }
+956    
+957                method = clazz.getMethod(methodName, parameterTypes);
+958                if (log.isTraceEnabled()) {
+959                    log.trace("Found straight match: " + method);
+960                    log.trace("isPublic:" + Modifier.isPublic(method.getModifiers()));
+961                }
+962                
+963                setMethodAccessible(method); // Default access superclass workaround
+964    
+965                cacheMethod(md, method);
+966                return method;
+967                
+968            } catch (NoSuchMethodException e) { /* SWALLOW */ }
+969            
+970            // search through all methods 
+971            int paramSize = parameterTypes.length;
+972            Method bestMatch = null;
+973            Method[] methods = clazz.getMethods();
+974            float bestMatchCost = Float.MAX_VALUE;
+975            float myCost = Float.MAX_VALUE;
+976            for (int i = 0, size = methods.length; i < size ; i++) {
+977                if (methods[i].getName().equals(methodName)) {
+978                    // log some trace information
+979                    if (log.isTraceEnabled()) {
+980                        log.trace("Found matching name:");
+981                        log.trace(methods[i]);
+982                    }                
+983                    
+984                    // compare parameters
+985                    Class[] methodsParams = methods[i].getParameterTypes();
+986                    int methodParamSize = methodsParams.length;
+987                    if (methodParamSize == paramSize) {          
+988                        boolean match = true;
+989                        for (int n = 0 ; n < methodParamSize; n++) {
+990                            if (log.isTraceEnabled()) {
+991                                log.trace("Param=" + parameterTypes[n].getName());
+992                                log.trace("Method=" + methodsParams[n].getName());
+993                            }
+994                            if (!isAssignmentCompatible(methodsParams[n], parameterTypes[n])) {
+995                                if (log.isTraceEnabled()) {
+996                                    log.trace(methodsParams[n] + " is not assignable from " 
+997                                                + parameterTypes[n]);
+998                                }    
+999                                match = false;
+1000                                break;
+1001                            }
+1002                        }
+1003                        
+1004                        if (match) {
+1005                            // get accessible version of method
+1006                            Method method = getAccessibleMethod(clazz, methods[i]);
+1007                            if (method != null) {
+1008                                if (log.isTraceEnabled()) {
+1009                                    log.trace(method + " accessible version of " 
+1010                                                + methods[i]);
+1011                                }
+1012                                setMethodAccessible(method); // Default access superclass workaround
+1013                                myCost = getTotalTransformationCost(parameterTypes,method.getParameterTypes());
+1014                                if ( myCost < bestMatchCost ) {
+1015                                   bestMatch = method;
+1016                                   bestMatchCost = myCost;
+1017                                }
+1018                            }
+1019                            
+1020                            log.trace("Couldn't find accessible method.");
+1021                        }
+1022                    }
+1023                }
+1024            }
+1025            if ( bestMatch != null ){
+1026                     cacheMethod(md, bestMatch);
+1027            } else {
+1028            // didn't find a match
+1029                   log.trace("No match found.");
+1030            }
+1031            
+1032            return bestMatch;                                        
+1033        }
+1034    
+1035        /**
+1036         * Try to make the method accessible
+1037         * @param method The source arguments
+1038         */
+1039        private static void setMethodAccessible(Method method) {
+1040            try {
+1041                //
+1042                // XXX Default access superclass workaround
+1043                //
+1044                // When a public class has a default access superclass
+1045                // with public methods, these methods are accessible.
+1046                // Calling them from compiled code works fine.
+1047                //
+1048                // Unfortunately, using reflection to invoke these methods
+1049                // seems to (wrongly) to prevent access even when the method
+1050                // modifer is public.
+1051                //
+1052                // The following workaround solves the problem but will only
+1053                // work from sufficiently privilages code. 
+1054                //
+1055                // Better workarounds would be greatfully accepted.
+1056                //
+1057                if (!method.isAccessible()) {
+1058                    method.setAccessible(true);
+1059                }
+1060                
+1061            } catch (SecurityException se) {
+1062                // log but continue just in case the method.invoke works anyway
+1063                Log log = LogFactory.getLog(MethodUtils.class);
+1064                if (!loggedAccessibleWarning) {
+1065                    boolean vulnerableJVM = false;
+1066                    try {
+1067                        String specVersion = System.getProperty("java.specification.version");
+1068                        if (specVersion.charAt(0) == '1' && 
+1069                                (specVersion.charAt(2) == '0' ||
+1070                                 specVersion.charAt(2) == '1' ||
+1071                                 specVersion.charAt(2) == '2' ||
+1072                                 specVersion.charAt(2) == '3')) {
+1073                                 
+1074                            vulnerableJVM = true;
+1075                        }
+1076                    } catch (SecurityException e) {
+1077                        // don't know - so display warning
+1078                        vulnerableJVM = true;
+1079                    }
+1080                    if (vulnerableJVM) {
+1081                        log.warn(
+1082                            "Current Security Manager restricts use of workarounds for reflection bugs "
+1083                            + " in pre-1.4 JVMs.");
+1084                    }
+1085                    loggedAccessibleWarning = true;
+1086                }
+1087                log.debug("Cannot setAccessible on method. Therefore cannot use jvm access bug workaround.", se);
+1088            }
+1089        }
+1090    
+1091        /**
+1092         * Returns the sum of the object transformation cost for each class in the source
+1093         * argument list.
+1094         * @param srcArgs The source arguments
+1095         * @param destArgs The destination arguments
+1096         * @return The total transformation cost
+1097         */
+1098        private static float getTotalTransformationCost(Class[] srcArgs, Class[] destArgs) {
+1099    
+1100            float totalCost = 0.0f;
+1101            for (int i = 0; i < srcArgs.length; i++) {
+1102                Class srcClass, destClass;
+1103                srcClass = srcArgs[i];
+1104                destClass = destArgs[i];
+1105                totalCost += getObjectTransformationCost(srcClass, destClass);
+1106            }
+1107    
+1108            return totalCost;
+1109        }
+1110        
+1111        /**
+1112         * Gets the number of steps required needed to turn the source class into the 
+1113         * destination class. This represents the number of steps in the object hierarchy 
+1114         * graph.
+1115         * @param srcClass The source class
+1116         * @param destClass The destination class
+1117         * @return The cost of transforming an object
+1118         */
+1119        private static float getObjectTransformationCost(Class srcClass, Class destClass) {
+1120            float cost = 0.0f;
+1121            while (destClass != null && !destClass.equals(srcClass)) {
+1122                if (destClass.isInterface() && isAssignmentCompatible(destClass,srcClass)) {
+1123                    // slight penalty for interface match. 
+1124                    // we still want an exact match to override an interface match, but  
+1125                    // an interface match should override anything where we have to get a 
+1126                    // superclass.
+1127                    cost += 0.25f;
+1128                    break;
+1129                }
+1130                cost++;
+1131                destClass = destClass.getSuperclass();
+1132            }
+1133    
+1134            /*
+1135             * If the destination class is null, we've travelled all the way up to 
+1136             * an Object match. We'll penalize this by adding 1.5 to the cost.
+1137             */
+1138            if (destClass == null) {
+1139                cost += 1.5f;
+1140            }
+1141    
+1142            return cost;
+1143        }
+1144        
+1145        
+1146        /**
+1147         * <p>Determine whether a type can be used as a parameter in a method invocation.
+1148         * This method handles primitive conversions correctly.</p>
+1149         *
+1150         * <p>In order words, it will match a <code>Boolean</code> to a <code>boolean</code>,
+1151         * a <code>Long</code> to a <code>long</code>,
+1152         * a <code>Float</code> to a <code>float</code>,
+1153         * a <code>Integer</code> to a <code>int</code>,
+1154         * and a <code>Double</code> to a <code>double</code>.
+1155         * Now logic widening matches are allowed.
+1156         * For example, a <code>Long</code> will not match a <code>int</code>.
+1157         *
+1158         * @param parameterType the type of parameter accepted by the method
+1159         * @param parameterization the type of parameter being tested 
+1160         *
+1161         * @return true if the assignement is compatible.
+1162         */
+1163        public static final boolean isAssignmentCompatible(Class parameterType, Class parameterization) {
+1164            // try plain assignment
+1165            if (parameterType.isAssignableFrom(parameterization)) {
+1166                return true;
+1167            }
+1168            
+1169            if (parameterType.isPrimitive()) {
+1170                // this method does *not* do widening - you must specify exactly
+1171                // is this the right behaviour?
+1172                Class parameterWrapperClazz = getPrimitiveWrapper(parameterType);
+1173                if (parameterWrapperClazz != null) {
+1174                    return parameterWrapperClazz.equals(parameterization);
+1175                }
+1176            }
+1177            
+1178            return false;
+1179        }
+1180        
+1181        /**
+1182         * Gets the wrapper object class for the given primitive type class.
+1183         * For example, passing <code>boolean.class</code> returns <code>Boolean.class</code>
+1184         * @param primitiveType the primitive type class for which a match is to be found
+1185         * @return the wrapper type associated with the given primitive 
+1186         * or null if no match is found
+1187         */
+1188        public static Class getPrimitiveWrapper(Class primitiveType) {
+1189            // does anyone know a better strategy than comparing names?
+1190            if (boolean.class.equals(primitiveType)) {
+1191                return Boolean.class;
+1192            } else if (float.class.equals(primitiveType)) {
+1193                return Float.class;
+1194            } else if (long.class.equals(primitiveType)) {
+1195                return Long.class;
+1196            } else if (int.class.equals(primitiveType)) {
+1197                return Integer.class;
+1198            } else if (short.class.equals(primitiveType)) {
+1199                return Short.class;
+1200            } else if (byte.class.equals(primitiveType)) {
+1201                return Byte.class;
+1202            } else if (double.class.equals(primitiveType)) {
+1203                return Double.class;
+1204            } else if (char.class.equals(primitiveType)) {
+1205                return Character.class;
+1206            } else {
+1207                
+1208                return null;
+1209            }
+1210        }
+1211    
+1212        /**
+1213         * Gets the class for the primitive type corresponding to the primitive wrapper class given.
+1214         * For example, an instance of <code>Boolean.class</code> returns a <code>boolean.class</code>. 
+1215         * @param wrapperType the 
+1216         * @return the primitive type class corresponding to the given wrapper class,
+1217         * null if no match is found
+1218         */
+1219        public static Class getPrimitiveType(Class wrapperType) {
+1220            // does anyone know a better strategy than comparing names?
+1221            if (Boolean.class.equals(wrapperType)) {
+1222                return boolean.class;
+1223            } else if (Float.class.equals(wrapperType)) {
+1224                return float.class;
+1225            } else if (Long.class.equals(wrapperType)) {
+1226                return long.class;
+1227            } else if (Integer.class.equals(wrapperType)) {
+1228                return int.class;
+1229            } else if (Short.class.equals(wrapperType)) {
+1230                return short.class;
+1231            } else if (Byte.class.equals(wrapperType)) {
+1232                return byte.class;
+1233            } else if (Double.class.equals(wrapperType)) {
+1234                return double.class;
+1235            } else if (Character.class.equals(wrapperType)) {
+1236                return char.class;
+1237            } else {
+1238                Log log = LogFactory.getLog(MethodUtils.class);
+1239                if (log.isDebugEnabled()) {
+1240                    log.debug("Not a known primitive wrapper class: " + wrapperType);
+1241                }
+1242                return null;
+1243            }
+1244        }
+1245        
+1246        /**
+1247         * Find a non primitive representation for given primitive class.
+1248         *
+1249         * @param clazz the class to find a representation for, not null
+1250         * @return the original class if it not a primitive. Otherwise the wrapper class. Not null
+1251         */
+1252        public static Class toNonPrimitiveClass(Class clazz) {
+1253            if (clazz.isPrimitive()) {
+1254                Class primitiveClazz = MethodUtils.getPrimitiveWrapper(clazz);
+1255                // the above method returns 
+1256                if (primitiveClazz != null) {
+1257                    return primitiveClazz;
+1258                } else {
+1259                    return clazz;
+1260                }
+1261            } else {
+1262                return clazz;
+1263            }
+1264        }
+1265        
+1266    
+1267        /**
+1268         * Return the method from the cache, if present.
+1269         *
+1270         * @param md The method descriptor
+1271         * @return The cached method
+1272         */
+1273        private static Method getCachedMethod(MethodDescriptor md) {
+1274            if (CACHE_METHODS) {
+1275                Reference methodRef = (Reference)cache.get(md);
+1276                if (methodRef != null) {
+1277                    return (Method)methodRef.get();
+1278                }
+1279            }
+1280            return null;
+1281        }
+1282    
+1283        /**
+1284         * Add a method to the cache.
+1285         *
+1286         * @param md The method descriptor
+1287         * @param method The method to cache
+1288         */
+1289        private static void cacheMethod(MethodDescriptor md, Method method) {
+1290            if (CACHE_METHODS) {
+1291                if (method != null) {
+1292                    cache.put(md, new WeakReference(method));
+1293                }
+1294            }
+1295        }
+1296    
+1297        /**
+1298         * Represents the key to looking up a Method by reflection.
+1299         */
+1300        private static class MethodDescriptor {
+1301            private Class cls;
+1302            private String methodName;
+1303            private Class[] paramTypes;
+1304            private boolean exact;
+1305            private int hashCode;
+1306    
+1307            /**
+1308             * The sole constructor.
+1309             *
+1310             * @param cls  the class to reflect, must not be null
+1311             * @param methodName  the method name to obtain
+1312             * @param paramTypes the array of classes representing the paramater types
+1313             * @param exact whether the match has to be exact.
+1314             */
+1315            public MethodDescriptor(Class cls, String methodName, Class[] paramTypes, boolean exact) {
+1316                if (cls == null) {
+1317                    throw new IllegalArgumentException("Class cannot be null");
+1318                }
+1319                if (methodName == null) {
+1320                    throw new IllegalArgumentException("Method Name cannot be null");
+1321                }
+1322                if (paramTypes == null) {
+1323                    paramTypes = EMPTY_CLASS_PARAMETERS;
+1324                }
+1325    
+1326                this.cls = cls;
+1327                this.methodName = methodName;
+1328                this.paramTypes = paramTypes;
+1329                this.exact= exact;
+1330    
+1331                this.hashCode = methodName.length();
+1332            }
+1333            /**
+1334             * Checks for equality.
+1335             * @param obj object to be tested for equality
+1336             * @return true, if the object describes the same Method.
+1337             */
+1338            public boolean equals(Object obj) {
+1339                if (!(obj instanceof MethodDescriptor)) {
+1340                    return false;
+1341                }
+1342                MethodDescriptor md = (MethodDescriptor)obj;
+1343    
+1344                return (
+1345                    exact == md.exact &&
+1346                    methodName.equals(md.methodName) &&
+1347                    cls.equals(md.cls) &&
+1348                    java.util.Arrays.equals(paramTypes, md.paramTypes)
+1349                );
+1350            }
+1351            /**
+1352             * Returns the string length of method name. I.e. if the
+1353             * hashcodes are different, the objects are different. If the
+1354             * hashcodes are the same, need to use the equals method to
+1355             * determine equality.
+1356             * @return the string length of method name.
+1357             */
+1358            public int hashCode() {
+1359                return hashCode;
+1360            }
+1361        }
+1362    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MutableDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MutableDynaClass.html new file mode 100644 index 0000000..90d3aa7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/MutableDynaClass.html @@ -0,0 +1,190 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    
+021    
+022    
+023    
+024    /**
+025     * <p>A specialized extension to <code>DynaClass</code> that allows properties
+026     * to be added or removed dynamically.</p>
+027     *
+028     * <p><strong>WARNING</strong> - No guarantees that this will be in the final
+029     * APIs ... it's here primarily to preserve some concepts that were in the
+030     * original proposal for further discussion.</p>
+031     *
+032     * @author Craig McClanahan
+033     * @author Michael Smith
+034     * @author Paulo Gaspar
+035     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+036     */
+037    
+038    public interface MutableDynaClass extends DynaClass {
+039    
+040    
+041        /**
+042         * Add a new dynamic property with no restrictions on data type,
+043         * readability, or writeability.
+044         *
+045         * @param name Name of the new dynamic property
+046         *
+047         * @exception IllegalArgumentException if name is null
+048         * @exception IllegalStateException if this DynaClass is currently
+049         *  restricted, so no new properties can be added
+050         */
+051        public void add(String name);
+052    
+053    
+054        /**
+055         * Add a new dynamic property with the specified data type, but with
+056         * no restrictions on readability or writeability.
+057         *
+058         * @param name Name of the new dynamic property
+059         * @param type Data type of the new dynamic property (null for no
+060         *  restrictions)
+061         *
+062         * @exception IllegalArgumentException if name is null
+063         * @exception IllegalStateException if this DynaClass is currently
+064         *  restricted, so no new properties can be added
+065         */
+066        public void add(String name, Class type);
+067    
+068    
+069        /**
+070         * Add a new dynamic property with the specified data type, readability,
+071         * and writeability.
+072         *
+073         * @param name Name of the new dynamic property
+074         * @param type Data type of the new dynamic property (null for no
+075         *  restrictions)
+076         * @param readable Set to <code>true</code> if this property value
+077         *  should be readable
+078         * @param writeable Set to <code>true</code> if this property value
+079         *  should be writeable
+080         *
+081         * @exception IllegalArgumentException if name is null
+082         * @exception IllegalStateException if this DynaClass is currently
+083         *  restricted, so no new properties can be added
+084         */
+085        public void add(String name, Class type, boolean readable,
+086                        boolean writeable);
+087    
+088    
+089        /**
+090         * Is this DynaClass currently restricted, if so, no changes to the
+091         * existing registration of property names, data types, readability, or
+092         * writeability are allowed.
+093         *
+094         * @return <code>true</code> if this Mutable {@link DynaClass} is restricted,
+095         * otherwise <code>false</code>
+096         */
+097        public boolean isRestricted();
+098    
+099    
+100        /**
+101         * Remove the specified dynamic property, and any associated data type,
+102         * readability, and writeability, from this dynamic class.
+103         * <strong>NOTE</strong> - This does <strong>NOT</strong> cause any
+104         * corresponding property values to be removed from DynaBean instances
+105         * associated with this DynaClass.
+106         *
+107         * @param name Name of the dynamic property to remove
+108         *
+109         * @exception IllegalArgumentException if name is null
+110         * @exception IllegalStateException if this DynaClass is currently
+111         *  restricted, so no properties can be removed
+112         */
+113        public void remove(String name);
+114    
+115    
+116        /**
+117         * Set the restricted state of this DynaClass to the specified value.
+118         *
+119         * @param restricted The new restricted state
+120         */
+121        public void setRestricted(boolean restricted);
+122    
+123    
+124    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/NestedNullException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/NestedNullException.html new file mode 100644 index 0000000..fbcbb18 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/NestedNullException.html @@ -0,0 +1,113 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils;
+019    
+020    /** 
+021     * Thrown to indicate that the <em>Bean Access Language</em> cannot execute query
+022     * against given bean since a nested bean referenced is null.
+023     *
+024     * @author Robert Burrell Donkin
+025     * @since 1.7
+026     */
+027    
+028    public class NestedNullException extends BeanAccessLanguageException {
+029        
+030        // --------------------------------------------------------- Constuctors
+031        
+032        /** 
+033         * Constructs a <code>NestedNullException</code> without a detail message.
+034         */
+035        public NestedNullException() {
+036            super();
+037        }
+038        
+039        /**
+040         * Constructs a <code>NestedNullException</code> without a detail message.
+041         * 
+042         * @param message the detail message explaining this exception
+043         */
+044        public NestedNullException(String message) {
+045            super(message);
+046        }
+047    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtils.html new file mode 100644 index 0000000..ade0f75 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtils.html @@ -0,0 +1,960 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    import java.beans.PropertyDescriptor;
+022    import java.lang.reflect.InvocationTargetException;
+023    import java.lang.reflect.Method;
+024    import java.util.Map;
+025    
+026    import org.apache.commons.collections.FastHashMap;
+027    
+028    
+029    /**
+030     * <p>Utility methods for using Java Reflection APIs to facilitate generic
+031     * property getter and setter operations on Java objects.</p>
+032     *
+033     * <p>The implementations for these methods are provided by <code>PropertyUtilsBean</code>.
+034     * For more details see {@link PropertyUtilsBean}.</p>
+035     *
+036     * @author Craig R. McClanahan
+037     * @author Ralph Schaer
+038     * @author Chris Audley
+039     * @author Rey Francois
+040     * @author Gregor Rayman
+041     * @author Jan Sorensen
+042     * @author Scott Sanders
+043     * @version $Revision: 644137 $ $Date: 2008-04-03 03:30:23 +0100 (Thu, 03 Apr 2008) $
+044     * @see PropertyUtilsBean
+045     * @see org.apache.commons.beanutils.expression.Resolver
+046     */
+047    
+048    public class PropertyUtils {
+049    
+050    
+051        // ----------------------------------------------------- Manifest Constants
+052    
+053    
+054        /**
+055         * The delimiter that preceeds the zero-relative subscript for an
+056         * indexed reference.
+057         *
+058         * @deprecated The notation used for property name expressions is now
+059         * dependant on the {@link org.apache.commons.beanutils.expression.Resolver}
+060         * implementation being used.
+061         */
+062        public static final char INDEXED_DELIM = '[';
+063    
+064    
+065        /**
+066         * The delimiter that follows the zero-relative subscript for an
+067         * indexed reference.
+068         *
+069         * @deprecated The notation used for property name expressions is now
+070         * dependant on the {@link org.apache.commons.beanutils.expression.Resolver}
+071         * implementation being used.
+072         */
+073        public static final char INDEXED_DELIM2 = ']';
+074    
+075    
+076        /**
+077         * The delimiter that preceeds the key of a mapped property.
+078         *
+079         * @deprecated The notation used for property name expressions is now
+080         * dependant on the {@link org.apache.commons.beanutils.expression.Resolver}
+081         * implementation being used.
+082         */
+083        public static final char MAPPED_DELIM = '(';
+084    
+085    
+086        /**
+087         * The delimiter that follows the key of a mapped property.
+088         *
+089         * @deprecated The notation used for property name expressions is now
+090         * dependant on the {@link org.apache.commons.beanutils.expression.Resolver}
+091         * implementation being used.
+092         */
+093        public static final char MAPPED_DELIM2 = ')';
+094    
+095    
+096        /**
+097         * The delimiter that separates the components of a nested reference.
+098         *
+099         * @deprecated The notation used for property name expressions is now
+100         * dependant on the {@link org.apache.commons.beanutils.expression.Resolver}
+101         * implementation being used.
+102         */
+103        public static final char NESTED_DELIM = '.';
+104    
+105    
+106        // ------------------------------------------------------- Static Variables
+107    
+108    
+109        /**
+110         * The debugging detail level for this component.
+111         * 
+112         * Note that this static variable will have unexpected side-effects if
+113         * this class is deployed in a shared classloader within a container.
+114         * However as it is actually completely ignored by this class due to its
+115         * deprecated status, it doesn't do any actual harm.
+116         *
+117         * @deprecated The <code>debug</code> static property is no longer used
+118         */
+119        private static int debug = 0;
+120    
+121        /**
+122         * The <code>debug</code> static property is no longer used
+123         * @return debug property
+124         * @deprecated The <code>debug</code> static property is no longer used
+125         */
+126        public static int getDebug() {
+127            return (debug);
+128        }
+129    
+130        /**
+131         * The <code>debug</code> static property is no longer used
+132         * @param newDebug debug property
+133         * @deprecated The <code>debug</code> static property is no longer used
+134         */
+135        public static void setDebug(int newDebug) {
+136            debug = newDebug;
+137        }
+138    
+139        // --------------------------------------------------------- Public Methods
+140    
+141    
+142        /**
+143         * Clear any cached property descriptors information for all classes
+144         * loaded by any class loaders.  This is useful in cases where class
+145         * loaders are thrown away to implement class reloading.
+146         *
+147         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+148         *
+149         * @see PropertyUtilsBean#clearDescriptors  
+150         */
+151        public static void clearDescriptors() {
+152    
+153            PropertyUtilsBean.getInstance().clearDescriptors();
+154    
+155        }
+156    
+157    
+158        /**
+159         * <p>Copy property values from the "origin" bean to the "destination" bean
+160         * for all cases where the property names are the same (even though the
+161         * actual getter and setter methods might have been customized via
+162         * <code>BeanInfo</code> classes).</p>
+163         *
+164         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+165         *
+166         * @param dest Destination bean whose properties are modified
+167         * @param orig Origin bean whose properties are retrieved
+168         *
+169         * @exception IllegalAccessException if the caller does not have
+170         *  access to the property accessor method
+171         * @exception IllegalArgumentException if the <code>dest</code> or
+172         *  <code>orig</code> argument is null
+173         * @exception InvocationTargetException if the property accessor method
+174         *  throws an exception
+175         * @exception NoSuchMethodException if an accessor method for this
+176         *  propety cannot be found
+177         * @see PropertyUtilsBean#copyProperties  
+178         */
+179        public static void copyProperties(Object dest, Object orig)
+180                throws IllegalAccessException, InvocationTargetException,
+181                NoSuchMethodException {
+182    
+183            PropertyUtilsBean.getInstance().copyProperties(dest, orig);
+184        }
+185    
+186    
+187        /**
+188         * <p>Return the entire set of properties for which the specified bean
+189         * provides a read method.</p>
+190         *
+191         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+192         *
+193         * @param bean Bean whose properties are to be extracted
+194         * @return The set of properties for the bean
+195         *
+196         * @exception IllegalAccessException if the caller does not have
+197         *  access to the property accessor method
+198         * @exception IllegalArgumentException if <code>bean</code> is null
+199         * @exception InvocationTargetException if the property accessor method
+200         *  throws an exception
+201         * @exception NoSuchMethodException if an accessor method for this
+202         *  propety cannot be found
+203         * @see PropertyUtilsBean#describe  
+204         */
+205        public static Map describe(Object bean)
+206                throws IllegalAccessException, InvocationTargetException,
+207                NoSuchMethodException {
+208    
+209            return (PropertyUtilsBean.getInstance().describe(bean));
+210    
+211        }
+212    
+213    
+214        /**
+215         * <p>Return the value of the specified indexed property of the specified
+216         * bean, with no type conversions.</p>
+217         *
+218         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+219         *
+220         * @param bean Bean whose property is to be extracted
+221         * @param name <code>propertyname[index]</code> of the property value
+222         *  to be extracted
+223         * @return the indexed property value
+224         *
+225         * @exception IndexOutOfBoundsException if the specified index
+226         *  is outside the valid range for the underlying property
+227         * @exception IllegalAccessException if the caller does not have
+228         *  access to the property accessor method
+229         * @exception IllegalArgumentException if <code>bean</code> or
+230         *  <code>name</code> is null
+231         * @exception InvocationTargetException if the property accessor method
+232         *  throws an exception
+233         * @exception NoSuchMethodException if an accessor method for this
+234         *  propety cannot be found
+235         * @see PropertyUtilsBean#getIndexedProperty(Object,String)  
+236         */
+237        public static Object getIndexedProperty(Object bean, String name)
+238                throws IllegalAccessException, InvocationTargetException,
+239                NoSuchMethodException {
+240    
+241            return (PropertyUtilsBean.getInstance().getIndexedProperty(bean, name));
+242    
+243        }
+244    
+245    
+246        /**
+247         * <p>Return the value of the specified indexed property of the specified
+248         * bean, with no type conversions.</p>
+249         *
+250         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+251         *
+252         * @param bean Bean whose property is to be extracted
+253         * @param name Simple property name of the property value to be extracted
+254         * @param index Index of the property value to be extracted
+255         * @return the indexed property value
+256         *
+257         * @exception IndexOutOfBoundsException if the specified index
+258         *  is outside the valid range for the underlying property
+259         * @exception IllegalAccessException if the caller does not have
+260         *  access to the property accessor method
+261         * @exception IllegalArgumentException if <code>bean</code> or
+262         *  <code>name</code> is null
+263         * @exception InvocationTargetException if the property accessor method
+264         *  throws an exception
+265         * @exception NoSuchMethodException if an accessor method for this
+266         *  propety cannot be found
+267         * @see PropertyUtilsBean#getIndexedProperty(Object,String, int)  
+268         */
+269        public static Object getIndexedProperty(Object bean,
+270                                                String name, int index)
+271                throws IllegalAccessException, InvocationTargetException,
+272                NoSuchMethodException {
+273    
+274            return (PropertyUtilsBean.getInstance().getIndexedProperty(bean, name, index));
+275        }
+276    
+277    
+278        /**
+279         * <p>Return the value of the specified mapped property of the
+280         * specified bean, with no type conversions.</p>
+281         *
+282         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+283         *
+284         * @param bean Bean whose property is to be extracted
+285         * @param name <code>propertyname(key)</code> of the property value
+286         *  to be extracted
+287         * @return the mapped property value
+288         *
+289         * @exception IllegalAccessException if the caller does not have
+290         *  access to the property accessor method
+291         * @exception InvocationTargetException if the property accessor method
+292         *  throws an exception
+293         * @exception NoSuchMethodException if an accessor method for this
+294         *  propety cannot be found
+295         * @see PropertyUtilsBean#getMappedProperty(Object,String)  
+296         */
+297        public static Object getMappedProperty(Object bean, String name)
+298                throws IllegalAccessException, InvocationTargetException,
+299                NoSuchMethodException {
+300    
+301            return (PropertyUtilsBean.getInstance().getMappedProperty(bean, name));
+302    
+303        }
+304    
+305    
+306        /**
+307         * <p>Return the value of the specified mapped property of the specified
+308         * bean, with no type conversions.</p>
+309         *
+310         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+311         *
+312         * @param bean Bean whose property is to be extracted
+313         * @param name Mapped property name of the property value to be extracted
+314         * @param key Key of the property value to be extracted
+315         * @return the mapped property value
+316         *
+317         * @exception IllegalAccessException if the caller does not have
+318         *  access to the property accessor method
+319         * @exception InvocationTargetException if the property accessor method
+320         *  throws an exception
+321         * @exception NoSuchMethodException if an accessor method for this
+322         *  propety cannot be found
+323         * @see PropertyUtilsBean#getMappedProperty(Object,String, String)  
+324         */
+325        public static Object getMappedProperty(Object bean,
+326                                               String name, String key)
+327                throws IllegalAccessException, InvocationTargetException,
+328                NoSuchMethodException {
+329    
+330            return PropertyUtilsBean.getInstance().getMappedProperty(bean, name, key);
+331    
+332        }
+333    
+334    
+335        /**
+336         * <p>Return the mapped property descriptors for this bean class.</p>
+337         *
+338         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+339         *
+340         * @param beanClass Bean class to be introspected
+341         * @return the mapped property descriptors
+342         * @see PropertyUtilsBean#getMappedPropertyDescriptors(Class)
+343         * @deprecated This method should not be exposed
+344         */
+345        public static FastHashMap getMappedPropertyDescriptors(Class beanClass) {
+346    
+347            return PropertyUtilsBean.getInstance().getMappedPropertyDescriptors(beanClass);
+348    
+349        }
+350    
+351    
+352        /**
+353         * <p>Return the mapped property descriptors for this bean.</p>
+354         *
+355         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+356         *
+357         * @param bean Bean to be introspected
+358         * @return the mapped property descriptors
+359         * @see PropertyUtilsBean#getMappedPropertyDescriptors(Object)
+360         * @deprecated This method should not be exposed
+361         */
+362        public static FastHashMap getMappedPropertyDescriptors(Object bean) {
+363    
+364            return PropertyUtilsBean.getInstance().getMappedPropertyDescriptors(bean);
+365    
+366        }
+367    
+368    
+369        /**
+370         * <p>Return the value of the (possibly nested) property of the specified
+371         * name, for the specified bean, with no type conversions.</p>
+372         *
+373         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+374         *
+375         * @param bean Bean whose property is to be extracted
+376         * @param name Possibly nested name of the property to be extracted
+377         * @return the nested property value
+378         *
+379         * @exception IllegalAccessException if the caller does not have
+380         *  access to the property accessor method
+381         * @exception IllegalArgumentException if <code>bean</code> or
+382         *  <code>name</code> is null
+383         * @exception NestedNullException if a nested reference to a
+384         *  property returns null
+385         * @exception InvocationTargetException 
+386         * if the property accessor method throws an exception
+387         * @exception NoSuchMethodException if an accessor method for this
+388         *  propety cannot be found
+389         * @see PropertyUtilsBean#getNestedProperty
+390         */
+391        public static Object getNestedProperty(Object bean, String name)
+392                throws IllegalAccessException, InvocationTargetException,
+393                NoSuchMethodException {
+394    
+395            return PropertyUtilsBean.getInstance().getNestedProperty(bean, name);
+396            
+397        }
+398    
+399    
+400        /**
+401         * <p>Return the value of the specified property of the specified bean,
+402         * no matter which property reference format is used, with no
+403         * type conversions.</p>
+404         *
+405         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+406         *
+407         * @param bean Bean whose property is to be extracted
+408         * @param name Possibly indexed and/or nested name of the property
+409         *  to be extracted
+410         * @return the property value
+411         *
+412         * @exception IllegalAccessException if the caller does not have
+413         *  access to the property accessor method
+414         * @exception IllegalArgumentException if <code>bean</code> or
+415         *  <code>name</code> is null
+416         * @exception InvocationTargetException if the property accessor method
+417         *  throws an exception
+418         * @exception NoSuchMethodException if an accessor method for this
+419         *  propety cannot be found
+420         * @see PropertyUtilsBean#getProperty
+421         */
+422        public static Object getProperty(Object bean, String name)
+423                throws IllegalAccessException, InvocationTargetException,
+424                NoSuchMethodException {
+425    
+426            return (PropertyUtilsBean.getInstance().getProperty(bean, name));
+427    
+428        }
+429    
+430    
+431        /**
+432         * <p>Retrieve the property descriptor for the specified property of the
+433         * specified bean, or return <code>null</code> if there is no such
+434         * descriptor.</p>
+435         *
+436         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+437         *
+438         * @param bean Bean for which a property descriptor is requested
+439         * @param name Possibly indexed and/or nested name of the property for
+440         *  which a property descriptor is requested
+441         * @return the property descriptor
+442         *
+443         * @exception IllegalAccessException if the caller does not have
+444         *  access to the property accessor method
+445         * @exception IllegalArgumentException if <code>bean</code> or
+446         *  <code>name</code> is null
+447         * @exception IllegalArgumentException if a nested reference to a
+448         *  property returns null
+449         * @exception InvocationTargetException if the property accessor method
+450         *  throws an exception
+451         * @exception NoSuchMethodException if an accessor method for this
+452         *  propety cannot be found
+453         * @see PropertyUtilsBean#getPropertyDescriptor
+454         */
+455        public static PropertyDescriptor getPropertyDescriptor(Object bean,
+456                                                               String name)
+457                throws IllegalAccessException, InvocationTargetException,
+458                NoSuchMethodException {
+459    
+460            return PropertyUtilsBean.getInstance().getPropertyDescriptor(bean, name);
+461    
+462        }
+463    
+464    
+465        /**
+466         * <p>Retrieve the property descriptors for the specified class,
+467         * introspecting and caching them the first time a particular bean class
+468         * is encountered.</p>
+469         *
+470         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+471         *
+472         * @param beanClass Bean class for which property descriptors are requested
+473         * @return the property descriptors
+474         * @exception IllegalArgumentException if <code>beanClass</code> is null
+475         * @see PropertyUtilsBean#getPropertyDescriptors(Class)
+476         */
+477        public static PropertyDescriptor[]
+478                getPropertyDescriptors(Class beanClass) {
+479    
+480            return PropertyUtilsBean.getInstance().getPropertyDescriptors(beanClass);
+481    
+482        }
+483    
+484    
+485        /**
+486         * <p>Retrieve the property descriptors for the specified bean,
+487         * introspecting and caching them the first time a particular bean class
+488         * is encountered.</p>
+489         *
+490         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+491         *
+492         * @param bean Bean for which property descriptors are requested
+493         * @return the property descriptors
+494         * @exception IllegalArgumentException if <code>bean</code> is null
+495         * @see PropertyUtilsBean#getPropertyDescriptors(Object)
+496         */
+497        public static PropertyDescriptor[] getPropertyDescriptors(Object bean) {
+498    
+499            return PropertyUtilsBean.getInstance().getPropertyDescriptors(bean);
+500    
+501        }
+502    
+503    
+504        /**
+505         * <p>Return the Java Class repesenting the property editor class that has
+506         * been registered for this property (if any).</p>
+507         *
+508         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+509         *
+510         * @param bean Bean for which a property descriptor is requested
+511         * @param name Possibly indexed and/or nested name of the property for
+512         *  which a property descriptor is requested
+513         * @return the property editor class
+514         *
+515         * @exception IllegalAccessException if the caller does not have
+516         *  access to the property accessor method
+517         * @exception IllegalArgumentException if <code>bean</code> or
+518         *  <code>name</code> is null
+519         * @exception IllegalArgumentException if a nested reference to a
+520         *  property returns null
+521         * @exception InvocationTargetException if the property accessor method
+522         *  throws an exception
+523         * @exception NoSuchMethodException if an accessor method for this
+524         *  propety cannot be found
+525         * @see PropertyUtilsBean#getPropertyEditorClass(Object,String)
+526         */
+527        public static Class getPropertyEditorClass(Object bean, String name)
+528                throws IllegalAccessException, InvocationTargetException,
+529                NoSuchMethodException {
+530    
+531            return PropertyUtilsBean.getInstance().getPropertyEditorClass(bean, name);
+532    
+533        }
+534    
+535    
+536        /**
+537         * <p>Return the Java Class representing the property type of the specified
+538         * property, or <code>null</code> if there is no such property for the
+539         * specified bean.</p>
+540         *
+541         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+542         *
+543         * @param bean Bean for which a property descriptor is requested
+544         * @param name Possibly indexed and/or nested name of the property for
+545         *  which a property descriptor is requested
+546         * @return The property type
+547         *
+548         * @exception IllegalAccessException if the caller does not have
+549         *  access to the property accessor method
+550         * @exception IllegalArgumentException if <code>bean</code> or
+551         *  <code>name</code> is null
+552         * @exception IllegalArgumentException if a nested reference to a
+553         *  property returns null
+554         * @exception InvocationTargetException if the property accessor method
+555         *  throws an exception
+556         * @exception NoSuchMethodException if an accessor method for this
+557         *  propety cannot be found
+558         * @see PropertyUtilsBean#getPropertyType(Object, String)
+559         */
+560        public static Class getPropertyType(Object bean, String name)
+561                throws IllegalAccessException, InvocationTargetException,
+562                NoSuchMethodException {
+563    
+564            return PropertyUtilsBean.getInstance().getPropertyType(bean, name);
+565        }
+566    
+567    
+568        /**
+569         * <p>Return an accessible property getter method for this property,
+570         * if there is one; otherwise return <code>null</code>.</p>
+571         *
+572         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+573         *
+574         * @param descriptor Property descriptor to return a getter for
+575         * @return The read method
+576         * @see PropertyUtilsBean#getReadMethod(PropertyDescriptor)
+577         */
+578        public static Method getReadMethod(PropertyDescriptor descriptor) {
+579    
+580            return (PropertyUtilsBean.getInstance().getReadMethod(descriptor));
+581    
+582        }
+583    
+584    
+585        /**
+586         * <p>Return the value of the specified simple property of the specified
+587         * bean, with no type conversions.</p>
+588         *
+589         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+590         *
+591         * @param bean Bean whose property is to be extracted
+592         * @param name Name of the property to be extracted
+593         * @return The property value
+594         *
+595         * @exception IllegalAccessException if the caller does not have
+596         *  access to the property accessor method
+597         * @exception IllegalArgumentException if <code>bean</code> or
+598         *  <code>name</code> is null
+599         * @exception IllegalArgumentException if the property name
+600         *  is nested or indexed
+601         * @exception InvocationTargetException if the property accessor method
+602         *  throws an exception
+603         * @exception NoSuchMethodException if an accessor method for this
+604         *  propety cannot be found
+605         * @see PropertyUtilsBean#getSimpleProperty
+606         */
+607        public static Object getSimpleProperty(Object bean, String name)
+608                throws IllegalAccessException, InvocationTargetException,
+609                NoSuchMethodException {
+610    
+611            return PropertyUtilsBean.getInstance().getSimpleProperty(bean, name);
+612            
+613        }
+614    
+615    
+616        /**
+617         * <p>Return an accessible property setter method for this property,
+618         * if there is one; otherwise return <code>null</code>.</p>
+619         *
+620         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+621         *
+622         * @param descriptor Property descriptor to return a setter for
+623         * @return The write method
+624         * @see PropertyUtilsBean#getWriteMethod(PropertyDescriptor)
+625         */
+626        public static Method getWriteMethod(PropertyDescriptor descriptor) {
+627    
+628            return PropertyUtilsBean.getInstance().getWriteMethod(descriptor);
+629    
+630        }
+631    
+632    
+633        /**
+634         * <p>Return <code>true</code> if the specified property name identifies
+635         * a readable property on the specified bean; otherwise, return
+636         * <code>false</code>.</p>
+637         *
+638         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+639         *
+640         * @param bean Bean to be examined (may be a {@link DynaBean}
+641         * @param name Property name to be evaluated
+642         * @return <code>true</code> if the property is readable,
+643         * otherwise <code>false</code>
+644         *
+645         * @exception IllegalArgumentException if <code>bean</code>
+646         *  or <code>name</code> is <code>null</code>
+647         * @see PropertyUtilsBean#isReadable
+648         * @since BeanUtils 1.6
+649         */
+650        public static boolean isReadable(Object bean, String name) {
+651    
+652            return PropertyUtilsBean.getInstance().isReadable(bean, name);
+653        }
+654    
+655    
+656        /**
+657         * <p>Return <code>true</code> if the specified property name identifies
+658         * a writeable property on the specified bean; otherwise, return
+659         * <code>false</code>.</p>
+660         *
+661         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+662         *
+663         * @param bean Bean to be examined (may be a {@link DynaBean}
+664         * @param name Property name to be evaluated
+665         * @return <code>true</code> if the property is writeable,
+666         * otherwise <code>false</code>
+667         *
+668         * @exception IllegalArgumentException if <code>bean</code>
+669         *  or <code>name</code> is <code>null</code>
+670         * @see PropertyUtilsBean#isWriteable
+671         * @since BeanUtils 1.6
+672         */
+673        public static boolean isWriteable(Object bean, String name) {
+674    
+675            return PropertyUtilsBean.getInstance().isWriteable(bean, name);
+676        }
+677    
+678    
+679        /**
+680         * <p>Sets the value of the specified indexed property of the specified
+681         * bean, with no type conversions.</p>
+682         *
+683         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+684         *
+685         * @param bean Bean whose property is to be modified
+686         * @param name <code>propertyname[index]</code> of the property value
+687         *  to be modified
+688         * @param value Value to which the specified property element
+689         *  should be set
+690         *
+691         * @exception IndexOutOfBoundsException if the specified index
+692         *  is outside the valid range for the underlying property
+693         * @exception IllegalAccessException if the caller does not have
+694         *  access to the property accessor method
+695         * @exception IllegalArgumentException if <code>bean</code> or
+696         *  <code>name</code> is null
+697         * @exception InvocationTargetException if the property accessor method
+698         *  throws an exception
+699         * @exception NoSuchMethodException if an accessor method for this
+700         *  propety cannot be found
+701         * @see PropertyUtilsBean#setIndexedProperty(Object, String, Object)
+702         */
+703        public static void setIndexedProperty(Object bean, String name,
+704                                              Object value)
+705                throws IllegalAccessException, InvocationTargetException,
+706                NoSuchMethodException {
+707    
+708            PropertyUtilsBean.getInstance().setIndexedProperty(bean, name, value);
+709    
+710        }
+711    
+712    
+713        /**
+714         * <p>Sets the value of the specified indexed property of the specified
+715         * bean, with no type conversions.</p>
+716         *
+717         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+718         *
+719         * @param bean Bean whose property is to be set
+720         * @param name Simple property name of the property value to be set
+721         * @param index Index of the property value to be set
+722         * @param value Value to which the indexed property element is to be set
+723         *
+724         * @exception IndexOutOfBoundsException if the specified index
+725         *  is outside the valid range for the underlying property
+726         * @exception IllegalAccessException if the caller does not have
+727         *  access to the property accessor method
+728         * @exception IllegalArgumentException if <code>bean</code> or
+729         *  <code>name</code> is null
+730         * @exception InvocationTargetException if the property accessor method
+731         *  throws an exception
+732         * @exception NoSuchMethodException if an accessor method for this
+733         *  propety cannot be found
+734         * @see PropertyUtilsBean#setIndexedProperty(Object, String, Object)
+735         */
+736        public static void setIndexedProperty(Object bean, String name,
+737                                              int index, Object value)
+738                throws IllegalAccessException, InvocationTargetException,
+739                NoSuchMethodException {
+740    
+741            PropertyUtilsBean.getInstance().setIndexedProperty(bean, name, index, value);
+742        }
+743    
+744    
+745        /**
+746         * <p>Sets the value of the specified mapped property of the
+747         * specified bean, with no type conversions.</p>
+748         *
+749         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+750         *
+751         * @param bean Bean whose property is to be set
+752         * @param name <code>propertyname(key)</code> of the property value
+753         *  to be set
+754         * @param value The property value to be set
+755         *
+756         * @exception IllegalAccessException if the caller does not have
+757         *  access to the property accessor method
+758         * @exception InvocationTargetException if the property accessor method
+759         *  throws an exception
+760         * @exception NoSuchMethodException if an accessor method for this
+761         *  propety cannot be found
+762         * @see PropertyUtilsBean#setMappedProperty(Object, String, Object)
+763         */
+764        public static void setMappedProperty(Object bean, String name,
+765                                             Object value)
+766                throws IllegalAccessException, InvocationTargetException,
+767                NoSuchMethodException {
+768    
+769            PropertyUtilsBean.getInstance().setMappedProperty(bean, name, value);
+770        }
+771    
+772    
+773        /**
+774         * <p>Sets the value of the specified mapped property of the specified
+775         * bean, with no type conversions.</p>
+776         *
+777         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+778         *
+779         * @param bean Bean whose property is to be set
+780         * @param name Mapped property name of the property value to be set
+781         * @param key Key of the property value to be set
+782         * @param value The property value to be set
+783         *
+784         * @exception IllegalAccessException if the caller does not have
+785         *  access to the property accessor method
+786         * @exception InvocationTargetException if the property accessor method
+787         *  throws an exception
+788         * @exception NoSuchMethodException if an accessor method for this
+789         *  propety cannot be found
+790         * @see PropertyUtilsBean#setMappedProperty(Object, String, String, Object)
+791         */
+792        public static void setMappedProperty(Object bean, String name,
+793                                             String key, Object value)
+794                throws IllegalAccessException, InvocationTargetException,
+795                NoSuchMethodException {
+796    
+797            PropertyUtilsBean.getInstance().setMappedProperty(bean, name, key, value);
+798        }
+799    
+800    
+801        /**
+802         * <p>Sets the value of the (possibly nested) property of the specified
+803         * name, for the specified bean, with no type conversions.</p>
+804         *
+805         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+806         *
+807         * @param bean Bean whose property is to be modified
+808         * @param name Possibly nested name of the property to be modified
+809         * @param value Value to which the property is to be set
+810         *
+811         * @exception IllegalAccessException if the caller does not have
+812         *  access to the property accessor method
+813         * @exception IllegalArgumentException if <code>bean</code> or
+814         *  <code>name</code> is null
+815         * @exception IllegalArgumentException if a nested reference to a
+816         *  property returns null
+817         * @exception InvocationTargetException if the property accessor method
+818         *  throws an exception
+819         * @exception NoSuchMethodException if an accessor method for this
+820         *  propety cannot be found
+821         * @see PropertyUtilsBean#setNestedProperty
+822         */
+823        public static void setNestedProperty(Object bean,
+824                                             String name, Object value)
+825                throws IllegalAccessException, InvocationTargetException,
+826                NoSuchMethodException {
+827    
+828            PropertyUtilsBean.getInstance().setNestedProperty(bean, name, value);
+829        }
+830    
+831    
+832        /**
+833         * <p>Set the value of the specified property of the specified bean,
+834         * no matter which property reference format is used, with no
+835         * type conversions.</p>
+836         *
+837         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+838         *
+839         * @param bean Bean whose property is to be modified
+840         * @param name Possibly indexed and/or nested name of the property
+841         *  to be modified
+842         * @param value Value to which this property is to be set
+843         *
+844         * @exception IllegalAccessException if the caller does not have
+845         *  access to the property accessor method
+846         * @exception IllegalArgumentException if <code>bean</code> or
+847         *  <code>name</code> is null
+848         * @exception InvocationTargetException if the property accessor method
+849         *  throws an exception
+850         * @exception NoSuchMethodException if an accessor method for this
+851         *  propety cannot be found
+852         * @see PropertyUtilsBean#setProperty
+853         */
+854        public static void setProperty(Object bean, String name, Object value)
+855                throws IllegalAccessException, InvocationTargetException,
+856                NoSuchMethodException {
+857    
+858            PropertyUtilsBean.getInstance().setProperty(bean, name, value);
+859    
+860        }
+861    
+862    
+863        /**
+864         * <p>Set the value of the specified simple property of the specified bean,
+865         * with no type conversions.</p>
+866         *
+867         * <p>For more details see <code>PropertyUtilsBean</code>.</p>
+868         *
+869         * @param bean Bean whose property is to be modified
+870         * @param name Name of the property to be modified
+871         * @param value Value to which the property should be set
+872         *
+873         * @exception IllegalAccessException if the caller does not have
+874         *  access to the property accessor method
+875         * @exception IllegalArgumentException if <code>bean</code> or
+876         *  <code>name</code> is null
+877         * @exception IllegalArgumentException if the property name is
+878         *  nested or indexed
+879         * @exception InvocationTargetException if the property accessor method
+880         *  throws an exception
+881         * @exception NoSuchMethodException if an accessor method for this
+882         *  propety cannot be found
+883         * @see PropertyUtilsBean#setSimpleProperty
+884         */
+885        public static void setSimpleProperty(Object bean,
+886                                             String name, Object value)
+887                throws IllegalAccessException, InvocationTargetException,
+888                NoSuchMethodException {
+889    
+890            PropertyUtilsBean.getInstance().setSimpleProperty(bean, name, value);
+891        }
+892    
+893    
+894    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtilsBean.html new file mode 100644 index 0000000..e3205b7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/PropertyUtilsBean.html @@ -0,0 +1,2317 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    
+021    import java.beans.BeanInfo;
+022    import java.beans.IndexedPropertyDescriptor;
+023    import java.beans.IntrospectionException;
+024    import java.beans.Introspector;
+025    import java.beans.PropertyDescriptor;
+026    import java.lang.reflect.Array;
+027    import java.lang.reflect.InvocationTargetException;
+028    import java.lang.reflect.Method;
+029    import java.util.HashMap;
+030    import java.util.Iterator;
+031    import java.util.List;
+032    import java.util.Map;
+033    
+034    import org.apache.commons.beanutils.expression.DefaultResolver;
+035    import org.apache.commons.beanutils.expression.Resolver;
+036    import org.apache.commons.collections.FastHashMap;
+037    import org.apache.commons.logging.Log;
+038    import org.apache.commons.logging.LogFactory;
+039    
+040    
+041    /**
+042     * Utility methods for using Java Reflection APIs to facilitate generic
+043     * property getter and setter operations on Java objects.  Much of this
+044     * code was originally included in <code>BeanUtils</code>, but has been
+045     * separated because of the volume of code involved.
+046     * <p>
+047     * In general, the objects that are examined and modified using these
+048     * methods are expected to conform to the property getter and setter method
+049     * naming conventions described in the JavaBeans Specification (Version 1.0.1).
+050     * No data type conversions are performed, and there are no usage of any
+051     * <code>PropertyEditor</code> classes that have been registered, although
+052     * a convenient way to access the registered classes themselves is included.
+053     * <p>
+054     * For the purposes of this class, five formats for referencing a particular
+055     * property value of a bean are defined, with the <i>default</i> layout of an
+056     * identifying String in parentheses. However the notation for these formats
+057     * and how they are resolved is now (since BeanUtils 1.8.0) controlled by
+058     * the configured {@link Resolver} implementation:
+059     * <ul>
+060     * <li><strong>Simple (<code>name</code>)</strong> - The specified
+061     *     <code>name</code> identifies an individual property of a particular
+062     *     JavaBean.  The name of the actual getter or setter method to be used
+063     *     is determined using standard JavaBeans instrospection, so that (unless
+064     *     overridden by a <code>BeanInfo</code> class, a property named "xyz"
+065     *     will have a getter method named <code>getXyz()</code> or (for boolean
+066     *     properties only) <code>isXyz()</code>, and a setter method named
+067     *     <code>setXyz()</code>.</li>
+068     * <li><strong>Nested (<code>name1.name2.name3</code>)</strong> The first
+069     *     name element is used to select a property getter, as for simple
+070     *     references above.  The object returned for this property is then
+071     *     consulted, using the same approach, for a property getter for a
+072     *     property named <code>name2</code>, and so on.  The property value that
+073     *     is ultimately retrieved or modified is the one identified by the
+074     *     last name element.</li>
+075     * <li><strong>Indexed (<code>name[index]</code>)</strong> - The underlying
+076     *     property value is assumed to be an array, or this JavaBean is assumed
+077     *     to have indexed property getter and setter methods.  The appropriate
+078     *     (zero-relative) entry in the array is selected.  <code>List</code>
+079     *     objects are now also supported for read/write.  You simply need to define
+080     *     a getter that returns the <code>List</code></li>
+081     * <li><strong>Mapped (<code>name(key)</code>)</strong> - The JavaBean
+082     *     is assumed to have an property getter and setter methods with an
+083     *     additional attribute of type <code>java.lang.String</code>.</li>
+084     * <li><strong>Combined (<code>name1.name2[index].name3(key)</code>)</strong> -
+085     *     Combining mapped, nested, and indexed references is also
+086     *     supported.</li>
+087     * </ul>
+088     *
+089     * @author Craig R. McClanahan
+090     * @author Ralph Schaer
+091     * @author Chris Audley
+092     * @author Rey Francois
+093     * @author Gregor Rayman
+094     * @author Jan Sorensen
+095     * @author Scott Sanders
+096     * @author Erik Meade
+097     * @version $Revision: 822777 $ $Date: 2009-10-07 16:23:23 +0100 (Wed, 07 Oct 2009) $
+098     * @see Resolver
+099     * @see PropertyUtils
+100     * @since 1.7
+101     */
+102    
+103    public class PropertyUtilsBean {
+104    
+105        private Resolver resolver = new DefaultResolver();
+106    
+107        // --------------------------------------------------------- Class Methods
+108    
+109        /**
+110         * Return the PropertyUtils bean instance.
+111         * @return The PropertyUtils bean instance
+112         */
+113        protected static PropertyUtilsBean getInstance() {
+114            return BeanUtilsBean.getInstance().getPropertyUtils();
+115        }
+116    
+117        // --------------------------------------------------------- Variables
+118    
+119        /**
+120         * The cache of PropertyDescriptor arrays for beans we have already
+121         * introspected, keyed by the java.lang.Class of this object.
+122         */
+123        private WeakFastHashMap descriptorsCache = null;
+124        private WeakFastHashMap mappedDescriptorsCache = null;
+125        private static final Class[] EMPTY_CLASS_PARAMETERS = new Class[0];
+126        private static final Class[] LIST_CLASS_PARAMETER = new Class[] {java.util.List.class};
+127        
+128        /** An empty object array */
+129        private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+130    
+131        /** Log instance */
+132        private Log log = LogFactory.getLog(PropertyUtils.class);
+133        
+134        // ---------------------------------------------------------- Constructors
+135        
+136        /** Base constructor */
+137        public PropertyUtilsBean() {
+138            descriptorsCache = new WeakFastHashMap();
+139            descriptorsCache.setFast(true);
+140            mappedDescriptorsCache = new WeakFastHashMap();
+141            mappedDescriptorsCache.setFast(true);
+142        }
+143    
+144    
+145        // --------------------------------------------------------- Public Methods
+146    
+147    
+148        /**
+149         * Return the configured {@link Resolver} implementation used by BeanUtils.
+150         * <p>
+151         * The {@link Resolver} handles the <i>property name</i>
+152         * expressions and the implementation in use effectively
+153         * controls the dialect of the <i>expression language</i>
+154         * that BeanUtils recongnises.
+155         * <p>
+156         * {@link DefaultResolver} is the default implementation used.
+157         *
+158         * @return resolver The property expression resolver.
+159         * @since 1.8.0
+160         */
+161        public Resolver getResolver() {
+162            return resolver;
+163        }
+164    
+165        /**
+166         * Configure the {@link Resolver} implementation used by BeanUtils.
+167         * <p>
+168         * The {@link Resolver} handles the <i>property name</i>
+169         * expressions and the implementation in use effectively
+170         * controls the dialect of the <i>expression language</i>
+171         * that BeanUtils recongnises.
+172         * <p>
+173         * {@link DefaultResolver} is the default implementation used.
+174         *
+175         * @param resolver The property expression resolver.
+176         * @since 1.8.0
+177         */
+178        public void setResolver(Resolver resolver) {
+179            if (resolver == null) {
+180                this.resolver = new DefaultResolver();
+181            } else {
+182                this.resolver = resolver;
+183            }
+184        }
+185    
+186        /**
+187         * Clear any cached property descriptors information for all classes
+188         * loaded by any class loaders.  This is useful in cases where class
+189         * loaders are thrown away to implement class reloading.
+190         */
+191        public void clearDescriptors() {
+192    
+193            descriptorsCache.clear();
+194            mappedDescriptorsCache.clear();
+195            Introspector.flushCaches();
+196    
+197        }
+198    
+199    
+200        /**
+201         * <p>Copy property values from the "origin" bean to the "destination" bean
+202         * for all cases where the property names are the same (even though the
+203         * actual getter and setter methods might have been customized via
+204         * <code>BeanInfo</code> classes).  No conversions are performed on the
+205         * actual property values -- it is assumed that the values retrieved from
+206         * the origin bean are assignment-compatible with the types expected by
+207         * the destination bean.</p>
+208         *
+209         * <p>If the origin "bean" is actually a <code>Map</code>, it is assumed
+210         * to contain String-valued <strong>simple</strong> property names as the keys, pointing
+211         * at the corresponding property values that will be set in the destination
+212         * bean.<strong>Note</strong> that this method is intended to perform 
+213         * a "shallow copy" of the properties and so complex properties 
+214         * (for example, nested ones) will not be copied.</p>
+215         * 
+216         * <p>Note, that this method will not copy a List to a List, or an Object[] 
+217         * to an Object[]. It's specifically for copying JavaBean properties. </p>
+218         *
+219         * @param dest Destination bean whose properties are modified
+220         * @param orig Origin bean whose properties are retrieved
+221         *
+222         * @exception IllegalAccessException if the caller does not have
+223         *  access to the property accessor method
+224         * @exception IllegalArgumentException if the <code>dest</code> or
+225         *  <code>orig</code> argument is null
+226         * @exception InvocationTargetException if the property accessor method
+227         *  throws an exception
+228         * @exception NoSuchMethodException if an accessor method for this
+229         *  propety cannot be found
+230         */
+231        public void copyProperties(Object dest, Object orig)
+232                throws IllegalAccessException, InvocationTargetException,
+233                NoSuchMethodException {
+234    
+235            if (dest == null) {
+236                throw new IllegalArgumentException
+237                        ("No destination bean specified");
+238            }
+239            if (orig == null) {
+240                throw new IllegalArgumentException("No origin bean specified");
+241            }
+242    
+243            if (orig instanceof DynaBean) {
+244                DynaProperty[] origDescriptors =
+245                    ((DynaBean) orig).getDynaClass().getDynaProperties();
+246                for (int i = 0; i < origDescriptors.length; i++) {
+247                    String name = origDescriptors[i].getName();
+248                    if (isReadable(orig, name) && isWriteable(dest, name)) {
+249                        try {
+250                            Object value = ((DynaBean) orig).get(name);
+251                            if (dest instanceof DynaBean) {
+252                                ((DynaBean) dest).set(name, value);
+253                            } else {
+254                                    setSimpleProperty(dest, name, value);
+255                            }
+256                        } catch (NoSuchMethodException e) {
+257                            if (log.isDebugEnabled()) {
+258                                log.debug("Error writing to '" + name + "' on class '" + dest.getClass() + "'", e);
+259                            }
+260                        }
+261                    }
+262                }
+263            } else if (orig instanceof Map) {
+264                Iterator entries = ((Map) orig).entrySet().iterator();
+265                while (entries.hasNext()) {
+266                    Map.Entry entry = (Map.Entry) entries.next();
+267                    String name = (String)entry.getKey();
+268                    if (isWriteable(dest, name)) {
+269                        try {
+270                            if (dest instanceof DynaBean) {
+271                                ((DynaBean) dest).set(name, entry.getValue());
+272                            } else {
+273                                setSimpleProperty(dest, name, entry.getValue());
+274                            }
+275                        } catch (NoSuchMethodException e) {
+276                            if (log.isDebugEnabled()) {
+277                                log.debug("Error writing to '" + name + "' on class '" + dest.getClass() + "'", e);
+278                            }
+279                        }
+280                    }
+281                }
+282            } else /* if (orig is a standard JavaBean) */ {
+283                PropertyDescriptor[] origDescriptors =
+284                    getPropertyDescriptors(orig);
+285                for (int i = 0; i < origDescriptors.length; i++) {
+286                    String name = origDescriptors[i].getName();
+287                    if (isReadable(orig, name) && isWriteable(dest, name)) {
+288                        try {
+289                            Object value = getSimpleProperty(orig, name);
+290                            if (dest instanceof DynaBean) {
+291                                ((DynaBean) dest).set(name, value);
+292                            } else {
+293                                    setSimpleProperty(dest, name, value);
+294                            }
+295                        } catch (NoSuchMethodException e) {
+296                            if (log.isDebugEnabled()) {
+297                                log.debug("Error writing to '" + name + "' on class '" + dest.getClass() + "'", e);
+298                            }
+299                        }
+300                    }
+301                }
+302            }
+303    
+304        }
+305    
+306    
+307        /**
+308         * <p>Return the entire set of properties for which the specified bean
+309         * provides a read method.  This map contains the unconverted property
+310         * values for all properties for which a read method is provided
+311         * (i.e. where the <code>getReadMethod()</code> returns non-null).</p>
+312         *
+313         * <p><strong>FIXME</strong> - Does not account for mapped properties.</p>
+314         *
+315         * @param bean Bean whose properties are to be extracted
+316         * @return The set of properties for the bean
+317         *
+318         * @exception IllegalAccessException if the caller does not have
+319         *  access to the property accessor method
+320         * @exception IllegalArgumentException if <code>bean</code> is null
+321         * @exception InvocationTargetException if the property accessor method
+322         *  throws an exception
+323         * @exception NoSuchMethodException if an accessor method for this
+324         *  propety cannot be found
+325         */
+326        public Map describe(Object bean)
+327                throws IllegalAccessException, InvocationTargetException,
+328                NoSuchMethodException {
+329    
+330            if (bean == null) {
+331                throw new IllegalArgumentException("No bean specified");
+332            }
+333            Map description = new HashMap();
+334            if (bean instanceof DynaBean) {
+335                DynaProperty[] descriptors =
+336                    ((DynaBean) bean).getDynaClass().getDynaProperties();
+337                for (int i = 0; i < descriptors.length; i++) {
+338                    String name = descriptors[i].getName();
+339                    description.put(name, getProperty(bean, name));
+340                }
+341            } else {
+342                PropertyDescriptor[] descriptors =
+343                    getPropertyDescriptors(bean);
+344                for (int i = 0; i < descriptors.length; i++) {
+345                    String name = descriptors[i].getName();
+346                    if (descriptors[i].getReadMethod() != null) {
+347                        description.put(name, getProperty(bean, name));
+348                    }
+349                }
+350            }
+351            return (description);
+352    
+353        }
+354    
+355    
+356        /**
+357         * Return the value of the specified indexed property of the specified
+358         * bean, with no type conversions.  The zero-relative index of the
+359         * required value must be included (in square brackets) as a suffix to
+360         * the property name, or <code>IllegalArgumentException</code> will be
+361         * thrown.  In addition to supporting the JavaBeans specification, this
+362         * method has been extended to support <code>List</code> objects as well.
+363         *
+364         * @param bean Bean whose property is to be extracted
+365         * @param name <code>propertyname[index]</code> of the property value
+366         *  to be extracted
+367         * @return the indexed property value
+368         *
+369         * @exception IndexOutOfBoundsException if the specified index
+370         *  is outside the valid range for the underlying array or List
+371         * @exception IllegalAccessException if the caller does not have
+372         *  access to the property accessor method
+373         * @exception IllegalArgumentException if <code>bean</code> or
+374         *  <code>name</code> is null
+375         * @exception InvocationTargetException if the property accessor method
+376         *  throws an exception
+377         * @exception NoSuchMethodException if an accessor method for this
+378         *  propety cannot be found
+379         */
+380        public Object getIndexedProperty(Object bean, String name)
+381                throws IllegalAccessException, InvocationTargetException,
+382                NoSuchMethodException {
+383    
+384            if (bean == null) {
+385                throw new IllegalArgumentException("No bean specified");
+386            }
+387            if (name == null) {
+388                throw new IllegalArgumentException("No name specified for bean class '" +
+389                        bean.getClass() + "'");
+390            }
+391    
+392            // Identify the index of the requested individual property
+393            int index = -1;
+394            try {
+395                index = resolver.getIndex(name);
+396            } catch (IllegalArgumentException e) {
+397                throw new IllegalArgumentException("Invalid indexed property '" +
+398                        name + "' on bean class '" + bean.getClass() + "' " +
+399                        e.getMessage());
+400            }
+401            if (index < 0) {
+402                throw new IllegalArgumentException("Invalid indexed property '" +
+403                        name + "' on bean class '" + bean.getClass() + "'");
+404            }
+405    
+406            // Isolate the name
+407            name = resolver.getProperty(name);
+408    
+409            // Request the specified indexed property value
+410            return (getIndexedProperty(bean, name, index));
+411    
+412        }
+413    
+414    
+415        /**
+416         * Return the value of the specified indexed property of the specified
+417         * bean, with no type conversions.  In addition to supporting the JavaBeans
+418         * specification, this method has been extended to support
+419         * <code>List</code> objects as well.
+420         *
+421         * @param bean Bean whose property is to be extracted
+422         * @param name Simple property name of the property value to be extracted
+423         * @param index Index of the property value to be extracted
+424         * @return the indexed property value
+425         *
+426         * @exception IndexOutOfBoundsException if the specified index
+427         *  is outside the valid range for the underlying property
+428         * @exception IllegalAccessException if the caller does not have
+429         *  access to the property accessor method
+430         * @exception IllegalArgumentException if <code>bean</code> or
+431         *  <code>name</code> is null
+432         * @exception InvocationTargetException if the property accessor method
+433         *  throws an exception
+434         * @exception NoSuchMethodException if an accessor method for this
+435         *  propety cannot be found
+436         */
+437        public Object getIndexedProperty(Object bean,
+438                                                String name, int index)
+439                throws IllegalAccessException, InvocationTargetException,
+440                NoSuchMethodException {
+441    
+442            if (bean == null) {
+443                throw new IllegalArgumentException("No bean specified");
+444            }
+445            if (name == null || name.length() == 0) {
+446                if (bean.getClass().isArray()) {
+447                    return Array.get(bean, index);
+448                } else if (bean instanceof List) {
+449                    return ((List)bean).get(index);   
+450                }
+451            }
+452            if (name == null) {
+453                throw new IllegalArgumentException("No name specified for bean class '" +
+454                        bean.getClass() + "'");
+455            }
+456    
+457            // Handle DynaBean instances specially
+458            if (bean instanceof DynaBean) {
+459                DynaProperty descriptor =
+460                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+461                if (descriptor == null) {
+462                    throw new NoSuchMethodException("Unknown property '" +
+463                        name + "' on bean class '" + bean.getClass() + "'");
+464                }
+465                return (((DynaBean) bean).get(name, index));
+466            }
+467    
+468            // Retrieve the property descriptor for the specified property
+469            PropertyDescriptor descriptor =
+470                    getPropertyDescriptor(bean, name);
+471            if (descriptor == null) {
+472                throw new NoSuchMethodException("Unknown property '" +
+473                        name + "' on bean class '" + bean.getClass() + "'");
+474            }
+475    
+476            // Call the indexed getter method if there is one
+477            if (descriptor instanceof IndexedPropertyDescriptor) {
+478                Method readMethod = ((IndexedPropertyDescriptor) descriptor).
+479                        getIndexedReadMethod();
+480                readMethod = MethodUtils.getAccessibleMethod(bean.getClass(), readMethod);
+481                if (readMethod != null) {
+482                    Object[] subscript = new Object[1];
+483                    subscript[0] = new Integer(index);
+484                    try {
+485                        return (invokeMethod(readMethod,bean, subscript));
+486                    } catch (InvocationTargetException e) {
+487                        if (e.getTargetException() instanceof
+488                                IndexOutOfBoundsException) {
+489                            throw (IndexOutOfBoundsException)
+490                                    e.getTargetException();
+491                        } else {
+492                            throw e;
+493                        }
+494                    }
+495                }
+496            }
+497    
+498            // Otherwise, the underlying property must be an array
+499            Method readMethod = getReadMethod(bean.getClass(), descriptor);
+500            if (readMethod == null) {
+501                throw new NoSuchMethodException("Property '" + name + "' has no " +
+502                        "getter method on bean class '" + bean.getClass() + "'");
+503            }
+504    
+505            // Call the property getter and return the value
+506            Object value = invokeMethod(readMethod, bean, EMPTY_OBJECT_ARRAY);
+507            if (!value.getClass().isArray()) {
+508                if (!(value instanceof java.util.List)) {
+509                    throw new IllegalArgumentException("Property '" + name +
+510                            "' is not indexed on bean class '" + bean.getClass() + "'");
+511                } else {
+512                    //get the List's value
+513                    return ((java.util.List) value).get(index);
+514                }
+515            } else {
+516                //get the array's value
+517                try {
+518                    return (Array.get(value, index));
+519                } catch (ArrayIndexOutOfBoundsException e) {
+520                    throw new ArrayIndexOutOfBoundsException("Index: " +
+521                            index + ", Size: " + Array.getLength(value) +
+522                            " for property '" + name + "'");
+523                }
+524            }
+525    
+526        }
+527    
+528    
+529        /**
+530         * Return the value of the specified mapped property of the
+531         * specified bean, with no type conversions.  The key of the
+532         * required value must be included (in brackets) as a suffix to
+533         * the property name, or <code>IllegalArgumentException</code> will be
+534         * thrown.
+535         *
+536         * @param bean Bean whose property is to be extracted
+537         * @param name <code>propertyname(key)</code> of the property value
+538         *  to be extracted
+539         * @return the mapped property value
+540         *
+541         * @exception IllegalAccessException if the caller does not have
+542         *  access to the property accessor method
+543         * @exception InvocationTargetException if the property accessor method
+544         *  throws an exception
+545         * @exception NoSuchMethodException if an accessor method for this
+546         *  propety cannot be found
+547         */
+548        public Object getMappedProperty(Object bean, String name)
+549                throws IllegalAccessException, InvocationTargetException,
+550                NoSuchMethodException {
+551    
+552            if (bean == null) {
+553                throw new IllegalArgumentException("No bean specified");
+554            }
+555            if (name == null) {
+556                throw new IllegalArgumentException("No name specified for bean class '" +
+557                        bean.getClass() + "'");
+558            }
+559    
+560            // Identify the key of the requested individual property
+561            String key  = null;
+562            try {
+563                key = resolver.getKey(name);
+564            } catch (IllegalArgumentException e) {
+565                throw new IllegalArgumentException
+566                        ("Invalid mapped property '" + name +
+567                        "' on bean class '" + bean.getClass() + "' " + e.getMessage());
+568            }
+569            if (key == null) {
+570                throw new IllegalArgumentException("Invalid mapped property '" +
+571                        name + "' on bean class '" + bean.getClass() + "'");
+572            }
+573    
+574            // Isolate the name
+575            name = resolver.getProperty(name);
+576    
+577            // Request the specified indexed property value
+578            return (getMappedProperty(bean, name, key));
+579    
+580        }
+581    
+582    
+583        /**
+584         * Return the value of the specified mapped property of the specified
+585         * bean, with no type conversions.
+586         *
+587         * @param bean Bean whose property is to be extracted
+588         * @param name Mapped property name of the property value to be extracted
+589         * @param key Key of the property value to be extracted
+590         * @return the mapped property value
+591         *
+592         * @exception IllegalAccessException if the caller does not have
+593         *  access to the property accessor method
+594         * @exception InvocationTargetException if the property accessor method
+595         *  throws an exception
+596         * @exception NoSuchMethodException if an accessor method for this
+597         *  propety cannot be found
+598         */
+599        public Object getMappedProperty(Object bean,
+600                                               String name, String key)
+601                throws IllegalAccessException, InvocationTargetException,
+602                NoSuchMethodException {
+603    
+604            if (bean == null) {
+605                throw new IllegalArgumentException("No bean specified");
+606            }
+607            if (name == null) {
+608                throw new IllegalArgumentException("No name specified for bean class '" +
+609                        bean.getClass() + "'");
+610            }
+611            if (key == null) {
+612                throw new IllegalArgumentException("No key specified for property '" +
+613                        name + "' on bean class " + bean.getClass() + "'");
+614            }
+615    
+616            // Handle DynaBean instances specially
+617            if (bean instanceof DynaBean) {
+618                DynaProperty descriptor =
+619                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+620                if (descriptor == null) {
+621                    throw new NoSuchMethodException("Unknown property '" +
+622                            name + "'+ on bean class '" + bean.getClass() + "'");
+623                }
+624                return (((DynaBean) bean).get(name, key));
+625            }
+626    
+627            Object result = null;
+628    
+629            // Retrieve the property descriptor for the specified property
+630            PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);
+631            if (descriptor == null) {
+632                throw new NoSuchMethodException("Unknown property '" +
+633                        name + "'+ on bean class '" + bean.getClass() + "'");
+634            }
+635    
+636            if (descriptor instanceof MappedPropertyDescriptor) {
+637                // Call the keyed getter method if there is one
+638                Method readMethod = ((MappedPropertyDescriptor) descriptor).
+639                        getMappedReadMethod();
+640                readMethod = MethodUtils.getAccessibleMethod(bean.getClass(), readMethod);
+641                if (readMethod != null) {
+642                    Object[] keyArray = new Object[1];
+643                    keyArray[0] = key;
+644                    result = invokeMethod(readMethod, bean, keyArray);
+645                } else {
+646                    throw new NoSuchMethodException("Property '" + name +
+647                            "' has no mapped getter method on bean class '" +
+648                            bean.getClass() + "'");
+649                }
+650            } else {
+651              /* means that the result has to be retrieved from a map */
+652              Method readMethod = getReadMethod(bean.getClass(), descriptor);
+653              if (readMethod != null) {
+654                Object invokeResult = invokeMethod(readMethod, bean, EMPTY_OBJECT_ARRAY);
+655                /* test and fetch from the map */
+656                if (invokeResult instanceof java.util.Map) {
+657                  result = ((java.util.Map)invokeResult).get(key);
+658                }
+659              } else {
+660                throw new NoSuchMethodException("Property '" + name +
+661                        "' has no mapped getter method on bean class '" +
+662                        bean.getClass() + "'");
+663              }
+664            }
+665            return result;
+666    
+667        }
+668    
+669    
+670        /**
+671         * <p>Return the mapped property descriptors for this bean class.</p>
+672         *
+673         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+674         *
+675         * @param beanClass Bean class to be introspected
+676         * @return the mapped property descriptors
+677         * @deprecated This method should not be exposed
+678         */
+679        public FastHashMap getMappedPropertyDescriptors(Class beanClass) {
+680    
+681            if (beanClass == null) {
+682                return null;
+683            }
+684    
+685            // Look up any cached descriptors for this bean class
+686            return (FastHashMap) mappedDescriptorsCache.get(beanClass);
+687    
+688        }
+689    
+690    
+691        /**
+692         * <p>Return the mapped property descriptors for this bean.</p>
+693         *
+694         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+695         *
+696         * @param bean Bean to be introspected
+697         * @return the mapped property descriptors
+698         * @deprecated This method should not be exposed
+699         */
+700        public FastHashMap getMappedPropertyDescriptors(Object bean) {
+701    
+702            if (bean == null) {
+703                return null;
+704            }
+705            return (getMappedPropertyDescriptors(bean.getClass()));
+706    
+707        }
+708    
+709    
+710        /**
+711         * Return the value of the (possibly nested) property of the specified
+712         * name, for the specified bean, with no type conversions.
+713         *
+714         * @param bean Bean whose property is to be extracted
+715         * @param name Possibly nested name of the property to be extracted
+716         * @return the nested property value
+717         *
+718         * @exception IllegalAccessException if the caller does not have
+719         *  access to the property accessor method
+720         * @exception IllegalArgumentException if <code>bean</code> or
+721         *  <code>name</code> is null
+722         * @exception NestedNullException if a nested reference to a
+723         *  property returns null
+724         * @exception InvocationTargetException 
+725         * if the property accessor method throws an exception
+726         * @exception NoSuchMethodException if an accessor method for this
+727         *  propety cannot be found
+728         */
+729        public Object getNestedProperty(Object bean, String name)
+730                throws IllegalAccessException, InvocationTargetException,
+731                NoSuchMethodException {
+732    
+733            if (bean == null) {
+734                throw new IllegalArgumentException("No bean specified");
+735            }
+736            if (name == null) {
+737                throw new IllegalArgumentException("No name specified for bean class '" +
+738                        bean.getClass() + "'");
+739            }
+740    
+741            // Resolve nested references
+742            while (resolver.hasNested(name)) {
+743                String next = resolver.next(name);
+744                Object nestedBean = null;
+745                if (bean instanceof Map) {
+746                    nestedBean = getPropertyOfMapBean((Map) bean, next);
+747                } else if (resolver.isMapped(next)) {
+748                    nestedBean = getMappedProperty(bean, next);
+749                } else if (resolver.isIndexed(next)) {
+750                    nestedBean = getIndexedProperty(bean, next);
+751                } else {
+752                    nestedBean = getSimpleProperty(bean, next);
+753                }
+754                if (nestedBean == null) {
+755                    throw new NestedNullException
+756                            ("Null property value for '" + name +
+757                            "' on bean class '" + bean.getClass() + "'");
+758                }
+759                bean = nestedBean;
+760                name = resolver.remove(name);
+761            }
+762    
+763            if (bean instanceof Map) {
+764                bean = getPropertyOfMapBean((Map) bean, name);
+765            } else if (resolver.isMapped(name)) {
+766                bean = getMappedProperty(bean, name);
+767            } else if (resolver.isIndexed(name)) {
+768                bean = getIndexedProperty(bean, name);
+769            } else {
+770                bean = getSimpleProperty(bean, name);
+771            }
+772            return bean;
+773    
+774        }
+775    
+776        /**
+777         * This method is called by getNestedProperty and setNestedProperty to
+778         * define what it means to get a property from an object which implements
+779         * Map. See setPropertyOfMapBean for more information.
+780         *
+781         * @param bean Map bean
+782         * @param propertyName The property name
+783         * @return the property value
+784         * 
+785         * @throws IllegalArgumentException when the propertyName is regarded as
+786         * being invalid.
+787         * 
+788         * @throws IllegalAccessException just in case subclasses override this
+789         * method to try to access real getter methods and find permission is denied.
+790         * 
+791         * @throws InvocationTargetException just in case subclasses override this
+792         * method to try to access real getter methods, and find it throws an
+793         * exception when invoked.
+794         * 
+795         * @throws NoSuchMethodException just in case subclasses override this
+796         * method to try to access real getter methods, and want to fail if
+797         * no simple method is available.
+798         * @since 1.8.0
+799         */
+800        protected Object getPropertyOfMapBean(Map bean, String propertyName) 
+801            throws IllegalArgumentException, IllegalAccessException, 
+802            InvocationTargetException, NoSuchMethodException {
+803    
+804            if (resolver.isMapped(propertyName)) {
+805                String name = resolver.getProperty(propertyName);
+806                if (name == null || name.length() == 0) {
+807                    propertyName = resolver.getKey(propertyName);
+808                }
+809            }
+810    
+811            if (resolver.isIndexed(propertyName) ||
+812                resolver.isMapped(propertyName)) {
+813                throw new IllegalArgumentException(
+814                        "Indexed or mapped properties are not supported on"
+815                        + " objects of type Map: " + propertyName);
+816            }
+817    
+818            return bean.get(propertyName);
+819        }
+820    
+821    
+822    
+823        /**
+824         * Return the value of the specified property of the specified bean,
+825         * no matter which property reference format is used, with no
+826         * type conversions.
+827         *
+828         * @param bean Bean whose property is to be extracted
+829         * @param name Possibly indexed and/or nested name of the property
+830         *  to be extracted
+831         * @return the property value
+832         *
+833         * @exception IllegalAccessException if the caller does not have
+834         *  access to the property accessor method
+835         * @exception IllegalArgumentException if <code>bean</code> or
+836         *  <code>name</code> is null
+837         * @exception InvocationTargetException if the property accessor method
+838         *  throws an exception
+839         * @exception NoSuchMethodException if an accessor method for this
+840         *  propety cannot be found
+841         */
+842        public Object getProperty(Object bean, String name)
+843                throws IllegalAccessException, InvocationTargetException,
+844                NoSuchMethodException {
+845    
+846            return (getNestedProperty(bean, name));
+847    
+848        }
+849    
+850    
+851        /**
+852         * <p>Retrieve the property descriptor for the specified property of the
+853         * specified bean, or return <code>null</code> if there is no such
+854         * descriptor.  This method resolves indexed and nested property
+855         * references in the same manner as other methods in this class, except
+856         * that if the last (or only) name element is indexed, the descriptor
+857         * for the last resolved property itself is returned.</p>
+858         *
+859         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+860         *
+861         * @param bean Bean for which a property descriptor is requested
+862         * @param name Possibly indexed and/or nested name of the property for
+863         *  which a property descriptor is requested
+864         * @return the property descriptor
+865         *
+866         * @exception IllegalAccessException if the caller does not have
+867         *  access to the property accessor method
+868         * @exception IllegalArgumentException if <code>bean</code> or
+869         *  <code>name</code> is null
+870         * @exception IllegalArgumentException if a nested reference to a
+871         *  property returns null
+872         * @exception InvocationTargetException if the property accessor method
+873         *  throws an exception
+874         * @exception NoSuchMethodException if an accessor method for this
+875         *  propety cannot be found
+876         */
+877        public PropertyDescriptor getPropertyDescriptor(Object bean,
+878                                                               String name)
+879                throws IllegalAccessException, InvocationTargetException,
+880                NoSuchMethodException {
+881    
+882            if (bean == null) {
+883                throw new IllegalArgumentException("No bean specified");
+884            }
+885            if (name == null) {
+886                throw new IllegalArgumentException("No name specified for bean class '" +
+887                        bean.getClass() + "'");
+888            }
+889    
+890            // Resolve nested references
+891            while (resolver.hasNested(name)) {
+892                String next = resolver.next(name);
+893                Object nestedBean = getProperty(bean, next);
+894                if (nestedBean == null) {
+895                    throw new NestedNullException
+896                            ("Null property value for '" + next +
+897                            "' on bean class '" + bean.getClass() + "'");
+898                }
+899                bean = nestedBean;
+900                name = resolver.remove(name);
+901            }
+902    
+903            // Remove any subscript from the final name value
+904            name = resolver.getProperty(name);
+905    
+906            // Look up and return this property from our cache
+907            // creating and adding it to the cache if not found.
+908            if (name == null) {
+909                return (null);
+910            }
+911            
+912            PropertyDescriptor[] descriptors = getPropertyDescriptors(bean);
+913            if (descriptors != null) {
+914                
+915                for (int i = 0; i < descriptors.length; i++) {
+916                    if (name.equals(descriptors[i].getName())) {
+917                        return (descriptors[i]);
+918                    }
+919                }
+920            }
+921    
+922            PropertyDescriptor result = null;
+923            FastHashMap mappedDescriptors =
+924                    getMappedPropertyDescriptors(bean);
+925            if (mappedDescriptors == null) {
+926                mappedDescriptors = new FastHashMap();
+927                mappedDescriptors.setFast(true);
+928                mappedDescriptorsCache.put(bean.getClass(), mappedDescriptors);
+929            }
+930            result = (PropertyDescriptor) mappedDescriptors.get(name);
+931            if (result == null) {
+932                // not found, try to create it
+933                try {
+934                    result = new MappedPropertyDescriptor(name, bean.getClass());
+935                } catch (IntrospectionException ie) {
+936                    /* Swallow IntrospectionException
+937                     * TODO: Why?
+938                     */
+939                }
+940                if (result != null) {
+941                    mappedDescriptors.put(name, result);
+942                }
+943            }
+944            
+945            return result;
+946    
+947        }
+948    
+949    
+950        /**
+951         * <p>Retrieve the property descriptors for the specified class,
+952         * introspecting and caching them the first time a particular bean class
+953         * is encountered.</p>
+954         *
+955         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+956         *
+957         * @param beanClass Bean class for which property descriptors are requested
+958         * @return the property descriptors
+959         *
+960         * @exception IllegalArgumentException if <code>beanClass</code> is null
+961         */
+962        public PropertyDescriptor[]
+963                getPropertyDescriptors(Class beanClass) {
+964    
+965            if (beanClass == null) {
+966                throw new IllegalArgumentException("No bean class specified");
+967            }
+968    
+969            // Look up any cached descriptors for this bean class
+970            PropertyDescriptor[] descriptors = null;
+971            descriptors =
+972                    (PropertyDescriptor[]) descriptorsCache.get(beanClass);
+973            if (descriptors != null) {
+974                return (descriptors);
+975            }
+976    
+977            // Introspect the bean and cache the generated descriptors
+978            BeanInfo beanInfo = null;
+979            try {
+980                beanInfo = Introspector.getBeanInfo(beanClass);
+981            } catch (IntrospectionException e) {
+982                return (new PropertyDescriptor[0]);
+983            }
+984            descriptors = beanInfo.getPropertyDescriptors();
+985            if (descriptors == null) {
+986                descriptors = new PropertyDescriptor[0];
+987            }
+988    
+989            // ----------------- Workaround for Bug 28358 --------- START ------------------
+990            //
+991            // The following code fixes an issue where IndexedPropertyDescriptor behaves
+992            // Differently in different versions of the JDK for 'indexed' properties which
+993            // use java.util.List (rather than an array).
+994            //
+995            // If you have a Bean with the following getters/setters for an indexed property:
+996            //
+997            //     public List getFoo()
+998            //     public Object getFoo(int index)
+999            //     public void setFoo(List foo)
+1000            //     public void setFoo(int index, Object foo)
+1001            //
+1002            // then the IndexedPropertyDescriptor's getReadMethod() and getWriteMethod()
+1003            // behave as follows:
+1004            //
+1005            //     JDK 1.3.1_04: returns valid Method objects from these methods.
+1006            //     JDK 1.4.2_05: returns null from these methods.
+1007            //
+1008            for (int i = 0; i < descriptors.length; i++) {
+1009                if (descriptors[i] instanceof IndexedPropertyDescriptor) {
+1010                    IndexedPropertyDescriptor descriptor =  (IndexedPropertyDescriptor)descriptors[i];
+1011                    String propName = descriptor.getName().substring(0, 1).toUpperCase() +
+1012                                      descriptor.getName().substring(1);
+1013    
+1014                    if (descriptor.getReadMethod() == null) {
+1015                        String methodName = descriptor.getIndexedReadMethod() != null
+1016                                            ? descriptor.getIndexedReadMethod().getName()
+1017                                            : "get" + propName;
+1018                        Method readMethod = MethodUtils.getMatchingAccessibleMethod(beanClass,
+1019                                                                methodName,
+1020                                                                EMPTY_CLASS_PARAMETERS);
+1021                        if (readMethod != null) {
+1022                            try {
+1023                                descriptor.setReadMethod(readMethod);
+1024                            } catch(Exception e) {
+1025                                log.error("Error setting indexed property read method", e);
+1026                            }
+1027                        }
+1028                    }
+1029                    if (descriptor.getWriteMethod() == null) {
+1030                        String methodName = descriptor.getIndexedWriteMethod() != null
+1031                                          ? descriptor.getIndexedWriteMethod().getName()
+1032                                          : "set" + propName;
+1033                        Method writeMethod = MethodUtils.getMatchingAccessibleMethod(beanClass,
+1034                                                                methodName,
+1035                                                                LIST_CLASS_PARAMETER);
+1036                        if (writeMethod == null) {
+1037                            Method[] methods = beanClass.getMethods();
+1038                            for (int j = 0; j < methods.length; j++) {
+1039                                if (methods[j].getName().equals(methodName)) {
+1040                                    Class[] parameterTypes = methods[j].getParameterTypes();
+1041                                    if (parameterTypes.length == 1 &&
+1042                                        List.class.isAssignableFrom(parameterTypes[0])) {
+1043                                        writeMethod = methods[j];
+1044                                        break; 
+1045                                    }
+1046                                }
+1047                            }
+1048                        }
+1049                        if (writeMethod != null) {
+1050                            try {
+1051                                descriptor.setWriteMethod(writeMethod);
+1052                            } catch(Exception e) {
+1053                                log.error("Error setting indexed property write method", e);
+1054                            }
+1055                        }
+1056                    }
+1057                }
+1058            }
+1059            // ----------------- Workaround for Bug 28358 ---------- END -------------------
+1060    
+1061            descriptorsCache.put(beanClass, descriptors);
+1062            return (descriptors);
+1063    
+1064        }
+1065    
+1066    
+1067        /**
+1068         * <p>Retrieve the property descriptors for the specified bean,
+1069         * introspecting and caching them the first time a particular bean class
+1070         * is encountered.</p>
+1071         *
+1072         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+1073         *
+1074         * @param bean Bean for which property descriptors are requested
+1075         * @return the property descriptors
+1076         *
+1077         * @exception IllegalArgumentException if <code>bean</code> is null
+1078         */
+1079        public PropertyDescriptor[] getPropertyDescriptors(Object bean) {
+1080    
+1081            if (bean == null) {
+1082                throw new IllegalArgumentException("No bean specified");
+1083            }
+1084            return (getPropertyDescriptors(bean.getClass()));
+1085    
+1086        }
+1087    
+1088    
+1089        /**
+1090         * <p>Return the Java Class repesenting the property editor class that has
+1091         * been registered for this property (if any).  This method follows the
+1092         * same name resolution rules used by <code>getPropertyDescriptor()</code>,
+1093         * so if the last element of a name reference is indexed, the property
+1094         * editor for the underlying property's class is returned.</p>
+1095         *
+1096         * <p>Note that <code>null</code> will be returned if there is no property,
+1097         * or if there is no registered property editor class.  Because this
+1098         * return value is ambiguous, you should determine the existence of the
+1099         * property itself by other means.</p>
+1100         *
+1101         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+1102         *
+1103         * @param bean Bean for which a property descriptor is requested
+1104         * @param name Possibly indexed and/or nested name of the property for
+1105         *  which a property descriptor is requested
+1106         * @return the property editor class
+1107         *
+1108         * @exception IllegalAccessException if the caller does not have
+1109         *  access to the property accessor method
+1110         * @exception IllegalArgumentException if <code>bean</code> or
+1111         *  <code>name</code> is null
+1112         * @exception IllegalArgumentException if a nested reference to a
+1113         *  property returns null
+1114         * @exception InvocationTargetException if the property accessor method
+1115         *  throws an exception
+1116         * @exception NoSuchMethodException if an accessor method for this
+1117         *  propety cannot be found
+1118         */
+1119        public Class getPropertyEditorClass(Object bean, String name)
+1120                throws IllegalAccessException, InvocationTargetException,
+1121                NoSuchMethodException {
+1122    
+1123            if (bean == null) {
+1124                throw new IllegalArgumentException("No bean specified");
+1125            }
+1126            if (name == null) {
+1127                throw new IllegalArgumentException("No name specified for bean class '" +
+1128                        bean.getClass() + "'");
+1129            }
+1130    
+1131            PropertyDescriptor descriptor =
+1132                    getPropertyDescriptor(bean, name);
+1133            if (descriptor != null) {
+1134                return (descriptor.getPropertyEditorClass());
+1135            } else {
+1136                return (null);
+1137            }
+1138    
+1139        }
+1140    
+1141    
+1142        /**
+1143         * Return the Java Class representing the property type of the specified
+1144         * property, or <code>null</code> if there is no such property for the
+1145         * specified bean.  This method follows the same name resolution rules
+1146         * used by <code>getPropertyDescriptor()</code>, so if the last element
+1147         * of a name reference is indexed, the type of the property itself will
+1148         * be returned.  If the last (or only) element has no property with the
+1149         * specified name, <code>null</code> is returned.
+1150         *
+1151         * @param bean Bean for which a property descriptor is requested
+1152         * @param name Possibly indexed and/or nested name of the property for
+1153         *  which a property descriptor is requested
+1154         * @return The property type
+1155         *
+1156         * @exception IllegalAccessException if the caller does not have
+1157         *  access to the property accessor method
+1158         * @exception IllegalArgumentException if <code>bean</code> or
+1159         *  <code>name</code> is null
+1160         * @exception IllegalArgumentException if a nested reference to a
+1161         *  property returns null
+1162         * @exception InvocationTargetException if the property accessor method
+1163         *  throws an exception
+1164         * @exception NoSuchMethodException if an accessor method for this
+1165         *  propety cannot be found
+1166         */
+1167        public Class getPropertyType(Object bean, String name)
+1168                throws IllegalAccessException, InvocationTargetException,
+1169                NoSuchMethodException {
+1170    
+1171            if (bean == null) {
+1172                throw new IllegalArgumentException("No bean specified");
+1173            }
+1174            if (name == null) {
+1175                throw new IllegalArgumentException("No name specified for bean class '" +
+1176                        bean.getClass() + "'");
+1177            }
+1178    
+1179            // Resolve nested references
+1180            while (resolver.hasNested(name)) {
+1181                String next = resolver.next(name);
+1182                Object nestedBean = getProperty(bean, next);
+1183                if (nestedBean == null) {
+1184                    throw new NestedNullException
+1185                            ("Null property value for '" + next +
+1186                            "' on bean class '" + bean.getClass() + "'");
+1187                }
+1188                bean = nestedBean;
+1189                name = resolver.remove(name);
+1190            }
+1191    
+1192            // Remove any subscript from the final name value
+1193            name = resolver.getProperty(name);
+1194    
+1195            // Special handling for DynaBeans
+1196            if (bean instanceof DynaBean) {
+1197                DynaProperty descriptor =
+1198                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+1199                if (descriptor == null) {
+1200                    return (null);
+1201                }
+1202                Class type = descriptor.getType();
+1203                if (type == null) {
+1204                    return (null);
+1205                } else if (type.isArray()) {
+1206                    return (type.getComponentType());
+1207                } else {
+1208                    return (type);
+1209                }
+1210            }
+1211    
+1212            PropertyDescriptor descriptor =
+1213                    getPropertyDescriptor(bean, name);
+1214            if (descriptor == null) {
+1215                return (null);
+1216            } else if (descriptor instanceof IndexedPropertyDescriptor) {
+1217                return (((IndexedPropertyDescriptor) descriptor).
+1218                        getIndexedPropertyType());
+1219            } else if (descriptor instanceof MappedPropertyDescriptor) {
+1220                return (((MappedPropertyDescriptor) descriptor).
+1221                        getMappedPropertyType());
+1222            } else {
+1223                return (descriptor.getPropertyType());
+1224            }
+1225    
+1226        }
+1227    
+1228    
+1229        /**
+1230         * <p>Return an accessible property getter method for this property,
+1231         * if there is one; otherwise return <code>null</code>.</p>
+1232         *
+1233         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+1234         *
+1235         * @param descriptor Property descriptor to return a getter for
+1236         * @return The read method
+1237         */
+1238        public Method getReadMethod(PropertyDescriptor descriptor) {
+1239    
+1240            return (MethodUtils.getAccessibleMethod(descriptor.getReadMethod()));
+1241    
+1242        }
+1243    
+1244    
+1245        /**
+1246         * <p>Return an accessible property getter method for this property,
+1247         * if there is one; otherwise return <code>null</code>.</p>
+1248         *
+1249         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+1250         *
+1251         * @param clazz The class of the read method will be invoked on
+1252         * @param descriptor Property descriptor to return a getter for
+1253         * @return The read method
+1254         */
+1255        Method getReadMethod(Class clazz, PropertyDescriptor descriptor) {
+1256            return (MethodUtils.getAccessibleMethod(clazz, descriptor.getReadMethod()));
+1257        }
+1258    
+1259    
+1260        /**
+1261         * Return the value of the specified simple property of the specified
+1262         * bean, with no type conversions.
+1263         *
+1264         * @param bean Bean whose property is to be extracted
+1265         * @param name Name of the property to be extracted
+1266         * @return The property value
+1267         *
+1268         * @exception IllegalAccessException if the caller does not have
+1269         *  access to the property accessor method
+1270         * @exception IllegalArgumentException if <code>bean</code> or
+1271         *  <code>name</code> is null
+1272         * @exception IllegalArgumentException if the property name
+1273         *  is nested or indexed
+1274         * @exception InvocationTargetException if the property accessor method
+1275         *  throws an exception
+1276         * @exception NoSuchMethodException if an accessor method for this
+1277         *  propety cannot be found
+1278         */
+1279        public Object getSimpleProperty(Object bean, String name)
+1280                throws IllegalAccessException, InvocationTargetException,
+1281                NoSuchMethodException {
+1282    
+1283            if (bean == null) {
+1284                throw new IllegalArgumentException("No bean specified");
+1285            }
+1286            if (name == null) {
+1287                throw new IllegalArgumentException("No name specified for bean class '" +
+1288                        bean.getClass() + "'");
+1289            }
+1290    
+1291            // Validate the syntax of the property name
+1292            if (resolver.hasNested(name)) {
+1293                throw new IllegalArgumentException
+1294                        ("Nested property names are not allowed: Property '" +
+1295                        name + "' on bean class '" + bean.getClass() + "'");
+1296            } else if (resolver.isIndexed(name)) {
+1297                throw new IllegalArgumentException
+1298                        ("Indexed property names are not allowed: Property '" +
+1299                        name + "' on bean class '" + bean.getClass() + "'");
+1300            } else if (resolver.isMapped(name)) {
+1301                throw new IllegalArgumentException
+1302                        ("Mapped property names are not allowed: Property '" +
+1303                        name + "' on bean class '" + bean.getClass() + "'");
+1304            }
+1305    
+1306            // Handle DynaBean instances specially
+1307            if (bean instanceof DynaBean) {
+1308                DynaProperty descriptor =
+1309                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+1310                if (descriptor == null) {
+1311                    throw new NoSuchMethodException("Unknown property '" +
+1312                            name + "' on dynaclass '" + 
+1313                            ((DynaBean) bean).getDynaClass() + "'" );
+1314                }
+1315                return (((DynaBean) bean).get(name));
+1316            }
+1317    
+1318            // Retrieve the property getter method for the specified property
+1319            PropertyDescriptor descriptor =
+1320                    getPropertyDescriptor(bean, name);
+1321            if (descriptor == null) {
+1322                throw new NoSuchMethodException("Unknown property '" +
+1323                        name + "' on class '" + bean.getClass() + "'" );
+1324            }
+1325            Method readMethod = getReadMethod(bean.getClass(), descriptor);
+1326            if (readMethod == null) {
+1327                throw new NoSuchMethodException("Property '" + name +
+1328                        "' has no getter method in class '" + bean.getClass() + "'");
+1329            }
+1330    
+1331            // Call the property getter and return the value
+1332            Object value = invokeMethod(readMethod, bean, EMPTY_OBJECT_ARRAY);
+1333            return (value);
+1334    
+1335        }
+1336    
+1337    
+1338        /**
+1339         * <p>Return an accessible property setter method for this property,
+1340         * if there is one; otherwise return <code>null</code>.</p>
+1341         *
+1342         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+1343         *
+1344         * @param descriptor Property descriptor to return a setter for
+1345         * @return The write method
+1346         */
+1347        public Method getWriteMethod(PropertyDescriptor descriptor) {
+1348    
+1349            return (MethodUtils.getAccessibleMethod(descriptor.getWriteMethod()));
+1350    
+1351        }
+1352    
+1353    
+1354        /**
+1355         * <p>Return an accessible property setter method for this property,
+1356         * if there is one; otherwise return <code>null</code>.</p>
+1357         *
+1358         * <p><strong>FIXME</strong> - Does not work with DynaBeans.</p>
+1359         *
+1360         * @param clazz The class of the read method will be invoked on
+1361         * @param descriptor Property descriptor to return a setter for
+1362         * @return The write method
+1363         */
+1364        Method getWriteMethod(Class clazz, PropertyDescriptor descriptor) {
+1365            return (MethodUtils.getAccessibleMethod(clazz, descriptor.getWriteMethod()));
+1366        }
+1367    
+1368    
+1369        /**
+1370         * <p>Return <code>true</code> if the specified property name identifies
+1371         * a readable property on the specified bean; otherwise, return
+1372         * <code>false</code>.
+1373         *
+1374         * @param bean Bean to be examined (may be a {@link DynaBean}
+1375         * @param name Property name to be evaluated
+1376         * @return <code>true</code> if the property is readable,
+1377         * otherwise <code>false</code>
+1378         *
+1379         * @exception IllegalArgumentException if <code>bean</code>
+1380         *  or <code>name</code> is <code>null</code>
+1381         *
+1382         * @since BeanUtils 1.6
+1383         */
+1384        public boolean isReadable(Object bean, String name) {
+1385    
+1386            // Validate method parameters
+1387            if (bean == null) {
+1388                throw new IllegalArgumentException("No bean specified");
+1389            }
+1390            if (name == null) {
+1391                throw new IllegalArgumentException("No name specified for bean class '" +
+1392                        bean.getClass() + "'");
+1393            }
+1394    
+1395            // Resolve nested references
+1396            while (resolver.hasNested(name)) {
+1397                String next = resolver.next(name);
+1398                Object nestedBean = null; 
+1399                try {
+1400                    nestedBean = getProperty(bean, next);
+1401                } catch (IllegalAccessException e) {
+1402                    return false;
+1403                } catch (InvocationTargetException e) {
+1404                    return false;
+1405                } catch (NoSuchMethodException e) {
+1406                    return false;
+1407                }
+1408                if (nestedBean == null) {
+1409                    throw new NestedNullException
+1410                            ("Null property value for '" + next +
+1411                            "' on bean class '" + bean.getClass() + "'");
+1412                }
+1413                bean = nestedBean;
+1414                name = resolver.remove(name);
+1415            }
+1416    
+1417            // Remove any subscript from the final name value
+1418            name = resolver.getProperty(name);
+1419    
+1420            // Treat WrapDynaBean as special case - may be a write-only property
+1421            // (see Jira issue# BEANUTILS-61)
+1422            if (bean instanceof WrapDynaBean) {
+1423                bean = ((WrapDynaBean)bean).getInstance();
+1424            }
+1425    
+1426            // Return the requested result
+1427            if (bean instanceof DynaBean) {
+1428                // All DynaBean properties are readable
+1429                return (((DynaBean) bean).getDynaClass().getDynaProperty(name) != null);
+1430            } else {
+1431                try {
+1432                    PropertyDescriptor desc =
+1433                        getPropertyDescriptor(bean, name);
+1434                    if (desc != null) {
+1435                        Method readMethod = getReadMethod(bean.getClass(), desc);
+1436                        if (readMethod == null) {
+1437                            if (desc instanceof IndexedPropertyDescriptor) {
+1438                                readMethod = ((IndexedPropertyDescriptor) desc).getIndexedReadMethod();
+1439                            } else if (desc instanceof MappedPropertyDescriptor) {
+1440                                readMethod = ((MappedPropertyDescriptor) desc).getMappedReadMethod();
+1441                            }
+1442                            readMethod = MethodUtils.getAccessibleMethod(bean.getClass(), readMethod);
+1443                        }
+1444                        return (readMethod != null);
+1445                    } else {
+1446                        return (false);
+1447                    }
+1448                } catch (IllegalAccessException e) {
+1449                    return (false);
+1450                } catch (InvocationTargetException e) {
+1451                    return (false);
+1452                } catch (NoSuchMethodException e) {
+1453                    return (false);
+1454                }
+1455            }
+1456    
+1457        }
+1458    
+1459    
+1460        /**
+1461         * <p>Return <code>true</code> if the specified property name identifies
+1462         * a writeable property on the specified bean; otherwise, return
+1463         * <code>false</code>.
+1464         *
+1465         * @param bean Bean to be examined (may be a {@link DynaBean}
+1466         * @param name Property name to be evaluated
+1467         * @return <code>true</code> if the property is writeable,
+1468         * otherwise <code>false</code>
+1469         *
+1470         * @exception IllegalArgumentException if <code>bean</code>
+1471         *  or <code>name</code> is <code>null</code>
+1472         *
+1473         * @since BeanUtils 1.6
+1474         */
+1475        public boolean isWriteable(Object bean, String name) {
+1476    
+1477            // Validate method parameters
+1478            if (bean == null) {
+1479                throw new IllegalArgumentException("No bean specified");
+1480            }
+1481            if (name == null) {
+1482                throw new IllegalArgumentException("No name specified for bean class '" +
+1483                        bean.getClass() + "'");
+1484            }
+1485    
+1486            // Resolve nested references
+1487            while (resolver.hasNested(name)) {
+1488                String next = resolver.next(name);
+1489                Object nestedBean = null; 
+1490                try {
+1491                    nestedBean = getProperty(bean, next);
+1492                } catch (IllegalAccessException e) {
+1493                    return false;
+1494                } catch (InvocationTargetException e) {
+1495                    return false;
+1496                } catch (NoSuchMethodException e) {
+1497                    return false;
+1498                }
+1499                if (nestedBean == null) {
+1500                    throw new NestedNullException
+1501                            ("Null property value for '" + next +
+1502                            "' on bean class '" + bean.getClass() + "'");
+1503                }
+1504                bean = nestedBean;
+1505                name = resolver.remove(name);
+1506            }
+1507    
+1508            // Remove any subscript from the final name value
+1509            name = resolver.getProperty(name);
+1510    
+1511            // Treat WrapDynaBean as special case - may be a read-only property
+1512            // (see Jira issue# BEANUTILS-61)
+1513            if (bean instanceof WrapDynaBean) {
+1514                bean = ((WrapDynaBean)bean).getInstance();
+1515            }
+1516    
+1517            // Return the requested result
+1518            if (bean instanceof DynaBean) {
+1519                // All DynaBean properties are writeable
+1520                return (((DynaBean) bean).getDynaClass().getDynaProperty(name) != null);
+1521            } else {
+1522                try {
+1523                    PropertyDescriptor desc =
+1524                        getPropertyDescriptor(bean, name);
+1525                    if (desc != null) {
+1526                        Method writeMethod = getWriteMethod(bean.getClass(), desc);
+1527                        if (writeMethod == null) {
+1528                            if (desc instanceof IndexedPropertyDescriptor) {
+1529                                writeMethod = ((IndexedPropertyDescriptor) desc).getIndexedWriteMethod();
+1530                            } else if (desc instanceof MappedPropertyDescriptor) {
+1531                                writeMethod = ((MappedPropertyDescriptor) desc).getMappedWriteMethod();
+1532                            }
+1533                            writeMethod = MethodUtils.getAccessibleMethod(bean.getClass(), writeMethod);
+1534                        }
+1535                        return (writeMethod != null);
+1536                    } else {
+1537                        return (false);
+1538                    }
+1539                } catch (IllegalAccessException e) {
+1540                    return (false);
+1541                } catch (InvocationTargetException e) {
+1542                    return (false);
+1543                } catch (NoSuchMethodException e) {
+1544                    return (false);
+1545                }
+1546            }
+1547    
+1548        }
+1549    
+1550    
+1551        /**
+1552         * Set the value of the specified indexed property of the specified
+1553         * bean, with no type conversions.  The zero-relative index of the
+1554         * required value must be included (in square brackets) as a suffix to
+1555         * the property name, or <code>IllegalArgumentException</code> will be
+1556         * thrown.  In addition to supporting the JavaBeans specification, this
+1557         * method has been extended to support <code>List</code> objects as well.
+1558         *
+1559         * @param bean Bean whose property is to be modified
+1560         * @param name <code>propertyname[index]</code> of the property value
+1561         *  to be modified
+1562         * @param value Value to which the specified property element
+1563         *  should be set
+1564         *
+1565         * @exception IndexOutOfBoundsException if the specified index
+1566         *  is outside the valid range for the underlying property
+1567         * @exception IllegalAccessException if the caller does not have
+1568         *  access to the property accessor method
+1569         * @exception IllegalArgumentException if <code>bean</code> or
+1570         *  <code>name</code> is null
+1571         * @exception InvocationTargetException if the property accessor method
+1572         *  throws an exception
+1573         * @exception NoSuchMethodException if an accessor method for this
+1574         *  propety cannot be found
+1575         */
+1576        public void setIndexedProperty(Object bean, String name,
+1577                                              Object value)
+1578                throws IllegalAccessException, InvocationTargetException,
+1579                NoSuchMethodException {
+1580    
+1581            if (bean == null) {
+1582                throw new IllegalArgumentException("No bean specified");
+1583            }
+1584            if (name == null) {
+1585                throw new IllegalArgumentException("No name specified for bean class '" +
+1586                        bean.getClass() + "'");
+1587            }
+1588    
+1589            // Identify the index of the requested individual property
+1590            int index = -1;
+1591            try {
+1592                index = resolver.getIndex(name);
+1593            } catch (IllegalArgumentException e) {
+1594                throw new IllegalArgumentException("Invalid indexed property '" +
+1595                        name + "' on bean class '" + bean.getClass() + "'");
+1596            }
+1597            if (index < 0) {
+1598                throw new IllegalArgumentException("Invalid indexed property '" +
+1599                        name + "' on bean class '" + bean.getClass() + "'");
+1600            }
+1601    
+1602            // Isolate the name
+1603            name = resolver.getProperty(name);
+1604    
+1605            // Set the specified indexed property value
+1606            setIndexedProperty(bean, name, index, value);
+1607    
+1608        }
+1609    
+1610    
+1611        /**
+1612         * Set the value of the specified indexed property of the specified
+1613         * bean, with no type conversions.  In addition to supporting the JavaBeans
+1614         * specification, this method has been extended to support
+1615         * <code>List</code> objects as well.
+1616         *
+1617         * @param bean Bean whose property is to be set
+1618         * @param name Simple property name of the property value to be set
+1619         * @param index Index of the property value to be set
+1620         * @param value Value to which the indexed property element is to be set
+1621         *
+1622         * @exception IndexOutOfBoundsException if the specified index
+1623         *  is outside the valid range for the underlying property
+1624         * @exception IllegalAccessException if the caller does not have
+1625         *  access to the property accessor method
+1626         * @exception IllegalArgumentException if <code>bean</code> or
+1627         *  <code>name</code> is null
+1628         * @exception InvocationTargetException if the property accessor method
+1629         *  throws an exception
+1630         * @exception NoSuchMethodException if an accessor method for this
+1631         *  propety cannot be found
+1632         */
+1633        public void setIndexedProperty(Object bean, String name,
+1634                                              int index, Object value)
+1635                throws IllegalAccessException, InvocationTargetException,
+1636                NoSuchMethodException {
+1637    
+1638            if (bean == null) {
+1639                throw new IllegalArgumentException("No bean specified");
+1640            }
+1641            if (name == null || name.length() == 0) {
+1642                if (bean.getClass().isArray()) {
+1643                    Array.set(bean, index, value);
+1644                    return;
+1645                } else if (bean instanceof List) {
+1646                    ((List)bean).set(index, value);   
+1647                    return;
+1648                }
+1649            }
+1650            if (name == null) {
+1651                throw new IllegalArgumentException("No name specified for bean class '" +
+1652                        bean.getClass() + "'");
+1653            }
+1654    
+1655            // Handle DynaBean instances specially
+1656            if (bean instanceof DynaBean) {
+1657                DynaProperty descriptor =
+1658                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+1659                if (descriptor == null) {
+1660                    throw new NoSuchMethodException("Unknown property '" +
+1661                            name + "' on bean class '" + bean.getClass() + "'");
+1662                }
+1663                ((DynaBean) bean).set(name, index, value);
+1664                return;
+1665            }
+1666    
+1667            // Retrieve the property descriptor for the specified property
+1668            PropertyDescriptor descriptor =
+1669                    getPropertyDescriptor(bean, name);
+1670            if (descriptor == null) {
+1671                throw new NoSuchMethodException("Unknown property '" +
+1672                        name + "' on bean class '" + bean.getClass() + "'");
+1673            }
+1674    
+1675            // Call the indexed setter method if there is one
+1676            if (descriptor instanceof IndexedPropertyDescriptor) {
+1677                Method writeMethod = ((IndexedPropertyDescriptor) descriptor).
+1678                        getIndexedWriteMethod();
+1679                writeMethod = MethodUtils.getAccessibleMethod(bean.getClass(), writeMethod);
+1680                if (writeMethod != null) {
+1681                    Object[] subscript = new Object[2];
+1682                    subscript[0] = new Integer(index);
+1683                    subscript[1] = value;
+1684                    try {
+1685                        if (log.isTraceEnabled()) {
+1686                            String valueClassName =
+1687                                value == null ? "<null>" 
+1688                                              : value.getClass().getName();
+1689                            log.trace("setSimpleProperty: Invoking method "
+1690                                      + writeMethod +" with index=" + index
+1691                                      + ", value=" + value
+1692                                      + " (class " + valueClassName+ ")");
+1693                        }
+1694                        invokeMethod(writeMethod, bean, subscript);
+1695                    } catch (InvocationTargetException e) {
+1696                        if (e.getTargetException() instanceof
+1697                                IndexOutOfBoundsException) {
+1698                            throw (IndexOutOfBoundsException)
+1699                                    e.getTargetException();
+1700                        } else {
+1701                            throw e;
+1702                        }
+1703                    }
+1704                    return;
+1705                }
+1706            }
+1707    
+1708            // Otherwise, the underlying property must be an array or a list
+1709            Method readMethod = getReadMethod(bean.getClass(), descriptor);
+1710            if (readMethod == null) {
+1711                throw new NoSuchMethodException("Property '" + name +
+1712                        "' has no getter method on bean class '" + bean.getClass() + "'");
+1713            }
+1714    
+1715            // Call the property getter to get the array or list
+1716            Object array = invokeMethod(readMethod, bean, EMPTY_OBJECT_ARRAY);
+1717            if (!array.getClass().isArray()) {
+1718                if (array instanceof List) {
+1719                    // Modify the specified value in the List
+1720                    ((List) array).set(index, value);
+1721                } else {
+1722                    throw new IllegalArgumentException("Property '" + name +
+1723                            "' is not indexed on bean class '" + bean.getClass() + "'");
+1724                }
+1725            } else {
+1726                // Modify the specified value in the array
+1727                Array.set(array, index, value);
+1728            }
+1729    
+1730        }
+1731    
+1732    
+1733        /**
+1734         * Set the value of the specified mapped property of the
+1735         * specified bean, with no type conversions.  The key of the
+1736         * value to set must be included (in brackets) as a suffix to
+1737         * the property name, or <code>IllegalArgumentException</code> will be
+1738         * thrown.
+1739         *
+1740         * @param bean Bean whose property is to be set
+1741         * @param name <code>propertyname(key)</code> of the property value
+1742         *  to be set
+1743         * @param value The property value to be set
+1744         *
+1745         * @exception IllegalAccessException if the caller does not have
+1746         *  access to the property accessor method
+1747         * @exception InvocationTargetException if the property accessor method
+1748         *  throws an exception
+1749         * @exception NoSuchMethodException if an accessor method for this
+1750         *  propety cannot be found
+1751         */
+1752        public void setMappedProperty(Object bean, String name,
+1753                                             Object value)
+1754                throws IllegalAccessException, InvocationTargetException,
+1755                NoSuchMethodException {
+1756    
+1757            if (bean == null) {
+1758                throw new IllegalArgumentException("No bean specified");
+1759            }
+1760            if (name == null) {
+1761                throw new IllegalArgumentException("No name specified for bean class '" +
+1762                        bean.getClass() + "'");
+1763            }
+1764    
+1765            // Identify the key of the requested individual property
+1766            String key  = null;
+1767            try {
+1768                key = resolver.getKey(name);
+1769            } catch (IllegalArgumentException e) {
+1770                throw new IllegalArgumentException
+1771                        ("Invalid mapped property '" + name + 
+1772                        "' on bean class '" + bean.getClass() + "'");
+1773            }
+1774            if (key == null) {
+1775                throw new IllegalArgumentException
+1776                        ("Invalid mapped property '" + name + 
+1777                        "' on bean class '" + bean.getClass() + "'");
+1778            }
+1779    
+1780            // Isolate the name
+1781            name = resolver.getProperty(name);
+1782    
+1783            // Request the specified indexed property value
+1784            setMappedProperty(bean, name, key, value);
+1785    
+1786        }
+1787    
+1788    
+1789        /**
+1790         * Set the value of the specified mapped property of the specified
+1791         * bean, with no type conversions.
+1792         *
+1793         * @param bean Bean whose property is to be set
+1794         * @param name Mapped property name of the property value to be set
+1795         * @param key Key of the property value to be set
+1796         * @param value The property value to be set
+1797         *
+1798         * @exception IllegalAccessException if the caller does not have
+1799         *  access to the property accessor method
+1800         * @exception InvocationTargetException if the property accessor method
+1801         *  throws an exception
+1802         * @exception NoSuchMethodException if an accessor method for this
+1803         *  propety cannot be found
+1804         */
+1805        public void setMappedProperty(Object bean, String name,
+1806                                             String key, Object value)
+1807                throws IllegalAccessException, InvocationTargetException,
+1808                NoSuchMethodException {
+1809    
+1810            if (bean == null) {
+1811                throw new IllegalArgumentException("No bean specified");
+1812            }
+1813            if (name == null) {
+1814                throw new IllegalArgumentException("No name specified for bean class '" +
+1815                        bean.getClass() + "'");
+1816            }
+1817            if (key == null) {
+1818                throw new IllegalArgumentException("No key specified for property '" +
+1819                        name + "' on bean class '" + bean.getClass() + "'");
+1820            }
+1821    
+1822            // Handle DynaBean instances specially
+1823            if (bean instanceof DynaBean) {
+1824                DynaProperty descriptor =
+1825                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+1826                if (descriptor == null) {
+1827                    throw new NoSuchMethodException("Unknown property '" +
+1828                            name + "' on bean class '" + bean.getClass() + "'");
+1829                }
+1830                ((DynaBean) bean).set(name, key, value);
+1831                return;
+1832            }
+1833    
+1834            // Retrieve the property descriptor for the specified property
+1835            PropertyDescriptor descriptor =
+1836                    getPropertyDescriptor(bean, name);
+1837            if (descriptor == null) {
+1838                throw new NoSuchMethodException("Unknown property '" +
+1839                        name + "' on bean class '" + bean.getClass() + "'");
+1840            }
+1841    
+1842            if (descriptor instanceof MappedPropertyDescriptor) {
+1843                // Call the keyed setter method if there is one
+1844                Method mappedWriteMethod =
+1845                        ((MappedPropertyDescriptor) descriptor).
+1846                        getMappedWriteMethod();
+1847                mappedWriteMethod = MethodUtils.getAccessibleMethod(bean.getClass(), mappedWriteMethod);
+1848                if (mappedWriteMethod != null) {
+1849                    Object[] params = new Object[2];
+1850                    params[0] = key;
+1851                    params[1] = value;
+1852                    if (log.isTraceEnabled()) {
+1853                        String valueClassName =
+1854                            value == null ? "<null>" : value.getClass().getName();
+1855                        log.trace("setSimpleProperty: Invoking method "
+1856                                  + mappedWriteMethod + " with key=" + key
+1857                                  + ", value=" + value
+1858                                  + " (class " + valueClassName +")");
+1859                    }
+1860                    invokeMethod(mappedWriteMethod, bean, params);
+1861                } else {
+1862                    throw new NoSuchMethodException
+1863                        ("Property '" + name + "' has no mapped setter method" +
+1864                         "on bean class '" + bean.getClass() + "'");
+1865                }
+1866            } else {
+1867              /* means that the result has to be retrieved from a map */
+1868              Method readMethod = getReadMethod(bean.getClass(), descriptor);
+1869              if (readMethod != null) {
+1870                Object invokeResult = invokeMethod(readMethod, bean, EMPTY_OBJECT_ARRAY);
+1871                /* test and fetch from the map */
+1872                if (invokeResult instanceof java.util.Map) {
+1873                  ((java.util.Map)invokeResult).put(key, value);
+1874                }
+1875              } else {
+1876                throw new NoSuchMethodException("Property '" + name +
+1877                        "' has no mapped getter method on bean class '" +
+1878                        bean.getClass() + "'");
+1879              }
+1880            }
+1881    
+1882        }
+1883    
+1884    
+1885        /**
+1886         * Set the value of the (possibly nested) property of the specified
+1887         * name, for the specified bean, with no type conversions.
+1888         * <p>
+1889         * Example values for parameter "name" are:
+1890         * <ul>
+1891         * <li> "a" -- sets the value of property a of the specified bean </li>
+1892         * <li> "a.b" -- gets the value of property a of the specified bean,
+1893         * then on that object sets the value of property b.</li>
+1894         * <li> "a(key)" -- sets a value of mapped-property a on the specified
+1895         * bean. This effectively means bean.setA("key").</li>
+1896         * <li> "a[3]" -- sets a value of indexed-property a on the specified
+1897         * bean. This effectively means bean.setA(3).</li>
+1898         * </ul>
+1899         *
+1900         * @param bean Bean whose property is to be modified
+1901         * @param name Possibly nested name of the property to be modified
+1902         * @param value Value to which the property is to be set
+1903         *
+1904         * @exception IllegalAccessException if the caller does not have
+1905         *  access to the property accessor method
+1906         * @exception IllegalArgumentException if <code>bean</code> or
+1907         *  <code>name</code> is null
+1908         * @exception IllegalArgumentException if a nested reference to a
+1909         *  property returns null
+1910         * @exception InvocationTargetException if the property accessor method
+1911         *  throws an exception
+1912         * @exception NoSuchMethodException if an accessor method for this
+1913         *  propety cannot be found
+1914         */
+1915        public void setNestedProperty(Object bean,
+1916                                             String name, Object value)
+1917                throws IllegalAccessException, InvocationTargetException,
+1918                NoSuchMethodException {
+1919    
+1920            if (bean == null) {
+1921                throw new IllegalArgumentException("No bean specified");
+1922            }
+1923            if (name == null) {
+1924                throw new IllegalArgumentException("No name specified for bean class '" +
+1925                        bean.getClass() + "'");
+1926            }
+1927    
+1928            // Resolve nested references
+1929            while (resolver.hasNested(name)) {
+1930                String next = resolver.next(name);
+1931                Object nestedBean = null;
+1932                if (bean instanceof Map) {
+1933                    nestedBean = getPropertyOfMapBean((Map)bean, next);
+1934                } else if (resolver.isMapped(next)) {
+1935                    nestedBean = getMappedProperty(bean, next);
+1936                } else if (resolver.isIndexed(next)) {
+1937                    nestedBean = getIndexedProperty(bean, next);
+1938                } else {
+1939                    nestedBean = getSimpleProperty(bean, next);
+1940                }
+1941                if (nestedBean == null) {
+1942                    throw new NestedNullException
+1943                            ("Null property value for '" + name +
+1944                             "' on bean class '" + bean.getClass() + "'");
+1945                }
+1946                bean = nestedBean;
+1947                name = resolver.remove(name);
+1948            }
+1949    
+1950            if (bean instanceof Map) {
+1951                setPropertyOfMapBean((Map) bean, name, value);
+1952            } else if (resolver.isMapped(name)) {
+1953                setMappedProperty(bean, name, value);
+1954            } else if (resolver.isIndexed(name)) {
+1955                setIndexedProperty(bean, name, value);
+1956            } else {
+1957                setSimpleProperty(bean, name, value);
+1958            }
+1959    
+1960        }
+1961    
+1962        /**
+1963         * This method is called by method setNestedProperty when the current bean
+1964         * is found to be a Map object, and defines how to deal with setting
+1965         * a property on a Map.
+1966         * <p>
+1967         * The standard implementation here is to:
+1968         * <ul>
+1969         * <li>call bean.set(propertyName) for all propertyName values.</li>
+1970         * <li>throw an IllegalArgumentException if the property specifier
+1971         * contains MAPPED_DELIM or INDEXED_DELIM, as Map entries are essentially
+1972         * simple properties; mapping and indexing operations do not make sense
+1973         * when accessing a map (even thought the returned object may be a Map
+1974         * or an Array).</li>
+1975         * </ul>
+1976         * <p>
+1977         * The default behaviour of beanutils 1.7.1 or later is for assigning to
+1978         * "a.b" to mean a.put(b, obj) always. However the behaviour of beanutils 
+1979         * version 1.6.0, 1.6.1, 1.7.0 was for "a.b" to mean a.setB(obj) if such
+1980         * a method existed, and a.put(b, obj) otherwise. In version 1.5 it meant
+1981         * a.put(b, obj) always (ie the same as the behaviour in the current version).
+1982         * In versions prior to 1.5 it meant a.setB(obj) always. [yes, this is 
+1983         * all <i>very</i> unfortunate]
+1984         * <p>
+1985         * Users who would like to customise the meaning of "a.b" in method 
+1986         * setNestedProperty when a is a Map can create a custom subclass of
+1987         * this class and override this method to implement the behaviour of 
+1988         * their choice, such as restoring the pre-1.4 behaviour of this class
+1989         * if they wish. When overriding this method, do not forget to deal 
+1990         * with MAPPED_DELIM and INDEXED_DELIM characters in the propertyName.
+1991         * <p>
+1992         * Note, however, that the recommended solution for objects that
+1993         * implement Map but want their simple properties to come first is
+1994         * for <i>those</i> objects to override their get/put methods to implement
+1995         * that behaviour, and <i>not</i> to solve the problem by modifying the
+1996         * default behaviour of the PropertyUtilsBean class by overriding this
+1997         * method.
+1998         *
+1999         * @param bean Map bean
+2000         * @param propertyName The property name
+2001         * @param value the property value
+2002         * 
+2003         * @throws IllegalArgumentException when the propertyName is regarded as
+2004         * being invalid.
+2005         * 
+2006         * @throws IllegalAccessException just in case subclasses override this
+2007         * method to try to access real setter methods and find permission is denied.
+2008         * 
+2009         * @throws InvocationTargetException just in case subclasses override this
+2010         * method to try to access real setter methods, and find it throws an
+2011         * exception when invoked.
+2012         * 
+2013         * @throws NoSuchMethodException just in case subclasses override this
+2014         * method to try to access real setter methods, and want to fail if
+2015         * no simple method is available.
+2016         * @since 1.8.0
+2017         */
+2018        protected void setPropertyOfMapBean(Map bean, String propertyName, Object value)
+2019            throws IllegalArgumentException, IllegalAccessException, 
+2020            InvocationTargetException, NoSuchMethodException {
+2021    
+2022            if (resolver.isMapped(propertyName)) {
+2023                String name = resolver.getProperty(propertyName);
+2024                if (name == null || name.length() == 0) {
+2025                    propertyName = resolver.getKey(propertyName);
+2026                }
+2027            }
+2028    
+2029            if (resolver.isIndexed(propertyName) ||
+2030                resolver.isMapped(propertyName)) {
+2031                throw new IllegalArgumentException(
+2032                        "Indexed or mapped properties are not supported on"
+2033                        + " objects of type Map: " + propertyName);
+2034            }
+2035    
+2036            bean.put(propertyName, value);
+2037        }
+2038    
+2039    
+2040    
+2041        /**
+2042         * Set the value of the specified property of the specified bean,
+2043         * no matter which property reference format is used, with no
+2044         * type conversions.
+2045         *
+2046         * @param bean Bean whose property is to be modified
+2047         * @param name Possibly indexed and/or nested name of the property
+2048         *  to be modified
+2049         * @param value Value to which this property is to be set
+2050         *
+2051         * @exception IllegalAccessException if the caller does not have
+2052         *  access to the property accessor method
+2053         * @exception IllegalArgumentException if <code>bean</code> or
+2054         *  <code>name</code> is null
+2055         * @exception InvocationTargetException if the property accessor method
+2056         *  throws an exception
+2057         * @exception NoSuchMethodException if an accessor method for this
+2058         *  propety cannot be found
+2059         */
+2060        public void setProperty(Object bean, String name, Object value)
+2061                throws IllegalAccessException, InvocationTargetException,
+2062                NoSuchMethodException {
+2063    
+2064            setNestedProperty(bean, name, value);
+2065    
+2066        }
+2067    
+2068    
+2069        /**
+2070         * Set the value of the specified simple property of the specified bean,
+2071         * with no type conversions.
+2072         *
+2073         * @param bean Bean whose property is to be modified
+2074         * @param name Name of the property to be modified
+2075         * @param value Value to which the property should be set
+2076         *
+2077         * @exception IllegalAccessException if the caller does not have
+2078         *  access to the property accessor method
+2079         * @exception IllegalArgumentException if <code>bean</code> or
+2080         *  <code>name</code> is null
+2081         * @exception IllegalArgumentException if the property name is
+2082         *  nested or indexed
+2083         * @exception InvocationTargetException if the property accessor method
+2084         *  throws an exception
+2085         * @exception NoSuchMethodException if an accessor method for this
+2086         *  propety cannot be found
+2087         */
+2088        public void setSimpleProperty(Object bean,
+2089                                             String name, Object value)
+2090                throws IllegalAccessException, InvocationTargetException,
+2091                NoSuchMethodException {
+2092    
+2093            if (bean == null) {
+2094                throw new IllegalArgumentException("No bean specified");
+2095            }
+2096            if (name == null) {
+2097                throw new IllegalArgumentException("No name specified for bean class '" +
+2098                        bean.getClass() + "'");
+2099            }
+2100    
+2101            // Validate the syntax of the property name
+2102            if (resolver.hasNested(name)) {
+2103                throw new IllegalArgumentException
+2104                        ("Nested property names are not allowed: Property '" +
+2105                        name + "' on bean class '" + bean.getClass() + "'");
+2106            } else if (resolver.isIndexed(name)) {
+2107                throw new IllegalArgumentException
+2108                        ("Indexed property names are not allowed: Property '" +
+2109                        name + "' on bean class '" + bean.getClass() + "'");
+2110            } else if (resolver.isMapped(name)) {
+2111                throw new IllegalArgumentException
+2112                        ("Mapped property names are not allowed: Property '" +
+2113                        name + "' on bean class '" + bean.getClass() + "'");
+2114            }
+2115    
+2116            // Handle DynaBean instances specially
+2117            if (bean instanceof DynaBean) {
+2118                DynaProperty descriptor =
+2119                        ((DynaBean) bean).getDynaClass().getDynaProperty(name);
+2120                if (descriptor == null) {
+2121                    throw new NoSuchMethodException("Unknown property '" +
+2122                            name + "' on dynaclass '" + 
+2123                            ((DynaBean) bean).getDynaClass() + "'" );
+2124                }
+2125                ((DynaBean) bean).set(name, value);
+2126                return;
+2127            }
+2128    
+2129            // Retrieve the property setter method for the specified property
+2130            PropertyDescriptor descriptor =
+2131                    getPropertyDescriptor(bean, name);
+2132            if (descriptor == null) {
+2133                throw new NoSuchMethodException("Unknown property '" +
+2134                        name + "' on class '" + bean.getClass() + "'" );
+2135            }
+2136            Method writeMethod = getWriteMethod(bean.getClass(), descriptor);
+2137            if (writeMethod == null) {
+2138                throw new NoSuchMethodException("Property '" + name +
+2139                        "' has no setter method in class '" + bean.getClass() + "'");
+2140            }
+2141    
+2142            // Call the property setter method
+2143            Object[] values = new Object[1];
+2144            values[0] = value;
+2145            if (log.isTraceEnabled()) {
+2146                String valueClassName =
+2147                    value == null ? "<null>" : value.getClass().getName();
+2148                log.trace("setSimpleProperty: Invoking method " + writeMethod
+2149                          + " with value " + value + " (class " + valueClassName + ")");
+2150            }
+2151            invokeMethod(writeMethod, bean, values);
+2152    
+2153        }
+2154        
+2155        /** This just catches and wraps IllegalArgumentException. */
+2156        private Object invokeMethod(
+2157                            Method method, 
+2158                            Object bean, 
+2159                            Object[] values) 
+2160                                throws
+2161                                    IllegalAccessException,
+2162                                    InvocationTargetException {
+2163            if(bean == null) {
+2164                throw new IllegalArgumentException("No bean specified " +
+2165                    "- this should have been checked before reaching this method");
+2166            }
+2167    
+2168            try {
+2169                
+2170                return method.invoke(bean, values);
+2171            
+2172            } catch (NullPointerException cause) {
+2173                // JDK 1.3 and JDK 1.4 throw NullPointerException if an argument is
+2174                // null for a primitive value (JDK 1.5+ throw IllegalArgumentException)
+2175                String valueString = "";
+2176                if (values != null) {
+2177                    for (int i = 0; i < values.length; i++) {
+2178                        if (i>0) {
+2179                            valueString += ", " ;
+2180                        }
+2181                        if (values[i] == null) {
+2182                            valueString += "<null>";
+2183                        } else {
+2184                            valueString += (values[i]).getClass().getName();
+2185                        }
+2186                    }
+2187                }
+2188                String expectedString = "";
+2189                Class[] parTypes = method.getParameterTypes();
+2190                if (parTypes != null) {
+2191                    for (int i = 0; i < parTypes.length; i++) {
+2192                        if (i > 0) {
+2193                            expectedString += ", ";
+2194                        }
+2195                        expectedString += parTypes[i].getName();
+2196                    }
+2197                }
+2198                IllegalArgumentException e = new IllegalArgumentException(
+2199                    "Cannot invoke " + method.getDeclaringClass().getName() + "." 
+2200                    + method.getName() + " on bean class '" + bean.getClass() +
+2201                    "' - " + cause.getMessage()
+2202                    // as per https://issues.apache.org/jira/browse/BEANUTILS-224
+2203                    + " - had objects of type \"" + valueString
+2204                    + "\" but expected signature \""
+2205                    +   expectedString + "\""
+2206                    );
+2207                if (!BeanUtils.initCause(e, cause)) {
+2208                    log.error("Method invocation failed", cause);
+2209                }
+2210                throw e;
+2211            } catch (IllegalArgumentException cause) {
+2212                String valueString = "";
+2213                if (values != null) {
+2214                    for (int i = 0; i < values.length; i++) {
+2215                        if (i>0) {
+2216                            valueString += ", " ;
+2217                        }
+2218                        if (values[i] == null) {
+2219                            valueString += "<null>";
+2220                        } else {
+2221                            valueString += (values[i]).getClass().getName();
+2222                        }
+2223                    }
+2224                }
+2225                String expectedString = "";
+2226                Class[] parTypes = method.getParameterTypes();
+2227                if (parTypes != null) {
+2228                    for (int i = 0; i < parTypes.length; i++) {
+2229                        if (i > 0) {
+2230                            expectedString += ", ";
+2231                        }
+2232                        expectedString += parTypes[i].getName();
+2233                    }
+2234                }
+2235                IllegalArgumentException e = new IllegalArgumentException(
+2236                    "Cannot invoke " + method.getDeclaringClass().getName() + "." 
+2237                    + method.getName() + " on bean class '" + bean.getClass() +
+2238                    "' - " + cause.getMessage()
+2239                    // as per https://issues.apache.org/jira/browse/BEANUTILS-224
+2240                    + " - had objects of type \"" + valueString
+2241                    + "\" but expected signature \""
+2242                    +   expectedString + "\""
+2243                    );
+2244                if (!BeanUtils.initCause(e, cause)) {
+2245                    log.error("Method invocation failed", cause);
+2246                }
+2247                throw e;
+2248                
+2249            }
+2250        }
+2251    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetDynaClass.html new file mode 100644 index 0000000..df41d51 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetDynaClass.html @@ -0,0 +1,315 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.sql.ResultSet;
+023    import java.sql.SQLException;
+024    import java.util.Iterator;
+025    
+026    
+027    /**
+028     * <p>Implementation of <code>DynaClass</code> for DynaBeans that wrap the
+029     * <code>java.sql.Row</code> objects of a <code>java.sql.ResultSet</code>.
+030     * The normal usage pattern is something like:</p>
+031     * <pre>
+032     *   ResultSet rs = ...;
+033     *   ResultSetDynaClass rsdc = new ResultSetDynaClass(rs);
+034     *   Iterator rows = rsdc.iterator();
+035     *   while (rows.hasNext())  {
+036     *     DynaBean row = (DynaBean) rows.next();
+037     *     ... process this row ...
+038     *   }
+039     *   rs.close();
+040     * </pre>
+041     *
+042     * <p>Each column in the result set will be represented as a DynaBean
+043     * property of the corresponding name (optionally forced to lower case
+044     * for portability).</p>
+045     *
+046     * <p><strong>WARNING</strong> - Any {@link DynaBean} instance returned by
+047     * this class, or from the <code>Iterator</code> returned by the
+048     * <code>iterator()</code> method, is directly linked to the row that the
+049     * underlying result set is currently positioned at.  This has the following
+050     * implications:</p>
+051     * <ul>
+052     * <li>Once you retrieve a different {@link DynaBean} instance, you should
+053     *     no longer use any previous instance.</li>
+054     * <li>Changing the position of the underlying result set will change the
+055     *     data that the {@link DynaBean} references.</li>
+056     * <li>Once the underlying result set is closed, the {@link DynaBean}
+057     *     instance may no longer be used.</li>
+058     * </ul>
+059     *
+060     * <p>Any database data that you wish to utilize outside the context of the
+061     * current row of an open result set must be copied.  For example, you could
+062     * use the following code to create standalone copies of the information in
+063     * a result set:</p>
+064     * <pre>
+065     *   ArrayList results = new ArrayList(); // To hold copied list
+066     *   ResultSetDynaClass rsdc = ...;
+067     *   DynaProperty[] properties = rsdc.getDynaProperties();
+068     *   BasicDynaClass bdc =
+069     *     new BasicDynaClass("foo", BasicDynaBean.class,
+070     *                        rsdc.getDynaProperties());
+071     *   Iterator rows = rsdc.iterator();
+072     *   while (rows.hasNext()) {
+073     *     DynaBean oldRow = (DynaBean) rows.next();
+074     *     DynaBean newRow = bdc.newInstance();
+075     *     PropertyUtils.copyProperties(newRow, oldRow);
+076     *     results.add(newRow);
+077     *   }
+078     * </pre>
+079     *
+080     * @author Craig R. McClanahan
+081     * @version $Revision: 926685 $ $Date: 2010-03-23 17:59:08 +0000 (Tue, 23 Mar 2010) $
+082     */
+083    
+084    public class ResultSetDynaClass extends JDBCDynaClass implements DynaClass {
+085    
+086    
+087        // ----------------------------------------------------------- Constructors
+088    
+089    
+090        /**
+091         * <p>Construct a new ResultSetDynaClass for the specified
+092         * <code>ResultSet</code>.  The property names corresponding
+093         * to column names in the result set will be lower cased.</p>
+094         *
+095         * @param resultSet The result set to be wrapped
+096         *
+097         * @exception NullPointerException if <code>resultSet</code>
+098         *  is <code>null</code>
+099         * @exception SQLException if the metadata for this result set
+100         *  cannot be introspected
+101         */
+102        public ResultSetDynaClass(ResultSet resultSet) throws SQLException {
+103    
+104            this(resultSet, true);
+105    
+106        }
+107    
+108    
+109        /**
+110         * <p>Construct a new ResultSetDynaClass for the specified
+111         * <code>ResultSet</code>.  The property names corresponding
+112         * to the column names in the result set will be lower cased or not,
+113         * depending on the specified <code>lowerCase</code> value.</p>
+114         *
+115         * <p><strong>WARNING</strong> - If you specify <code>false</code>
+116         * for <code>lowerCase</code>, the returned property names will
+117         * exactly match the column names returned by your JDBC driver.
+118         * Because different drivers might return column names in different
+119         * cases, the property names seen by your application will vary
+120         * depending on which JDBC driver you are using.</p>
+121         *
+122         * @param resultSet The result set to be wrapped
+123         * @param lowerCase Should property names be lower cased?
+124         *
+125         * @exception NullPointerException if <code>resultSet</code>
+126         *  is <code>null</code>
+127         * @exception SQLException if the metadata for this result set
+128         *  cannot be introspected
+129         */
+130        public ResultSetDynaClass(ResultSet resultSet, boolean lowerCase)
+131            throws SQLException {
+132    
+133            this(resultSet, lowerCase, false);
+134    
+135        }
+136    
+137    
+138        /**
+139         * <p>Construct a new ResultSetDynaClass for the specified
+140         * <code>ResultSet</code>.  The property names corresponding
+141         * to the column names in the result set will be lower cased or not,
+142         * depending on the specified <code>lowerCase</code> value.</p>
+143         *
+144         * <p><strong>WARNING</strong> - If you specify <code>false</code>
+145         * for <code>lowerCase</code>, the returned property names will
+146         * exactly match the column names returned by your JDBC driver.
+147         * Because different drivers might return column names in different
+148         * cases, the property names seen by your application will vary
+149         * depending on which JDBC driver you are using.</p>
+150         *
+151         * @param resultSet The result set to be wrapped
+152         * @param lowerCase Should property names be lower cased?
+153         * @param useColumnLabel true if the column label should be used, otherwise false
+154         *
+155         * @exception NullPointerException if <code>resultSet</code>
+156         *  is <code>null</code>
+157         * @exception SQLException if the metadata for this result set
+158         *  cannot be introspected
+159         * @since 1.8.3
+160         */
+161        public ResultSetDynaClass(ResultSet resultSet, boolean lowerCase, boolean useColumnLabel)
+162            throws SQLException {
+163    
+164            if (resultSet == null) {
+165                throw new NullPointerException();
+166            }
+167            this.resultSet = resultSet;
+168            this.lowerCase = lowerCase;
+169            setUseColumnLabel(useColumnLabel);
+170            introspect(resultSet);
+171    
+172        }
+173    
+174    
+175        // ----------------------------------------------------- Instance Variables
+176    
+177    
+178        /**
+179         * <p>The <code>ResultSet</code> we are wrapping.</p>
+180         */
+181        protected ResultSet resultSet = null;
+182    
+183    
+184        // --------------------------------------------------------- Public Methods
+185    
+186    
+187        /**
+188         * <p>Return an <code>Iterator</code> of {@link DynaBean} instances for
+189         * each row of the wrapped <code>ResultSet</code>, in "forward" order.
+190         * Unless the underlying result set supports scrolling, this method
+191         * should be called only once.</p>
+192         * @return An <code>Iterator</code> of {@link DynaBean} instances
+193         */
+194        public Iterator iterator() {
+195    
+196            return (new ResultSetIterator(this));
+197    
+198        }
+199    
+200    
+201        /**
+202         * Get a value from the {@link ResultSet} for the specified
+203         * property name.
+204         *
+205         * @param name The property name
+206         * @return The value
+207         * @throws SQLException if an error occurs
+208         * @since 1.8.0
+209         */
+210        public Object getObjectFromResultSet(String name) throws SQLException {
+211            return getObject(getResultSet(), name);
+212        }
+213    
+214        // -------------------------------------------------------- Package Methods
+215    
+216    
+217        /**
+218         * <p>Return the result set we are wrapping.</p>
+219         */
+220        ResultSet getResultSet() {
+221    
+222            return (this.resultSet);
+223    
+224        }
+225    
+226    
+227        // ------------------------------------------------------ Protected Methods
+228        
+229        /**
+230         * <p>Loads the class of the given name which by default uses the class loader used 
+231         * to load this library.
+232         * Dervations of this class could implement alternative class loading policies such as
+233         * using custom ClassLoader or using the Threads's context class loader etc.
+234         * </p>
+235         * @param className The name of the class to load
+236         * @return The loaded class
+237         * @throws SQLException if the class cannot be loaded
+238         */        
+239        protected Class loadClass(String className) throws SQLException {
+240    
+241            try {
+242                return getClass().getClassLoader().loadClass(className);
+243            } 
+244            catch (Exception e) {
+245                throw new SQLException("Cannot load column class '" +
+246                                       className + "': " + e);
+247            }
+248        }
+249    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetIterator.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetIterator.html new file mode 100644 index 0000000..297eef6 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/ResultSetIterator.html @@ -0,0 +1,422 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.sql.SQLException;
+023    import java.util.Iterator;
+024    import java.util.NoSuchElementException;
+025    
+026    
+027    /**
+028     * <p>Implementation of <code>java.util.Iterator</code> returned by the
+029     * <code>iterator()</code> method of {@link ResultSetDynaClass}.  Each
+030     * object returned by this iterator will be a {@link DynaBean} that
+031     * represents a single row from the result set being wrapped.</p>
+032     *
+033     * @author Craig R. McClanahan
+034     * @version $Revision: 556221 $ $Date: 2007-07-14 05:19:21 +0100 (Sat, 14 Jul 2007) $
+035     */
+036    
+037    public class ResultSetIterator implements DynaBean, Iterator {
+038    
+039    
+040        // ------------------------------------------------------------ Constructor
+041    
+042    
+043        /**
+044         * <p>Construct an <code>Iterator</code> for the result set being wrapped
+045         * by the specified {@link ResultSetDynaClass}.</p>
+046         *
+047         * @param dynaClass The {@link ResultSetDynaClass} wrapping the
+048         *  result set we will iterate over
+049         */
+050        ResultSetIterator(ResultSetDynaClass dynaClass) {
+051    
+052            this.dynaClass = dynaClass;
+053    
+054        }
+055    
+056    
+057        // ----------------------------------------------------- Instance Variables
+058    
+059    
+060    
+061        /**
+062         * <p>Flag indicating whether the result set is currently positioned at a
+063         * row for which we have not yet returned an element in the iteration.</p>
+064         */
+065        protected boolean current = false;
+066    
+067    
+068        /**
+069         * <p>The {@link ResultSetDynaClass} we are associated with.</p>
+070         */
+071        protected ResultSetDynaClass dynaClass = null;
+072    
+073    
+074        /**
+075         * <p>Flag indicating whether the result set has indicated that there are
+076         * no further rows.</p>
+077         */
+078        protected boolean eof = false;
+079    
+080    
+081        // ------------------------------------------------------- DynaBean Methods
+082    
+083    
+084        /**
+085         * Does the specified mapped property contain a value for the specified
+086         * key value?
+087         *
+088         * @param name Name of the property to check
+089         * @param key Name of the key to check
+090         * @return <code>true<code> if the mapped property contains a value for
+091         * the specified key, otherwise <code>false</code>
+092         *
+093         * @exception IllegalArgumentException if there is no property
+094         *  of the specified name
+095         */
+096        public boolean contains(String name, String key) {
+097    
+098            throw new UnsupportedOperationException
+099                ("FIXME - mapped properties not currently supported");
+100    
+101        }
+102    
+103    
+104        /**
+105         * Return the value of a simple property with the specified name.
+106         *
+107         * @param name Name of the property whose value is to be retrieved
+108         * @return The property's value
+109         *
+110         * @exception IllegalArgumentException if there is no property
+111         *  of the specified name
+112         */
+113        public Object get(String name) {
+114    
+115            if (dynaClass.getDynaProperty(name) == null) {
+116                throw new IllegalArgumentException(name);
+117            }
+118            try {
+119                return dynaClass.getObjectFromResultSet(name);
+120            } catch (SQLException e) {
+121                throw new RuntimeException
+122                    ("get(" + name + "): SQLException: " + e);
+123            }
+124    
+125        }
+126    
+127    
+128        /**
+129         * Return the value of an indexed property with the specified name.
+130         *
+131         * @param name Name of the property whose value is to be retrieved
+132         * @param index Index of the value to be retrieved
+133         * @return The indexed property's value
+134         *
+135         * @exception IllegalArgumentException if there is no property
+136         *  of the specified name
+137         * @exception IllegalArgumentException if the specified property
+138         *  exists, but is not indexed
+139         * @exception IndexOutOfBoundsException if the specified index
+140         *  is outside the range of the underlying property
+141         * @exception NullPointerException if no array or List has been
+142         *  initialized for this property
+143         */
+144        public Object get(String name, int index) {
+145    
+146            throw new UnsupportedOperationException
+147                ("FIXME - indexed properties not currently supported");
+148    
+149        }
+150    
+151    
+152        /**
+153         * Return the value of a mapped property with the specified name,
+154         * or <code>null</code> if there is no value for the specified key.
+155         *
+156         * @param name Name of the property whose value is to be retrieved
+157         * @param key Key of the value to be retrieved
+158         * @return The mapped property's value
+159         *
+160         * @exception IllegalArgumentException if there is no property
+161         *  of the specified name
+162         * @exception IllegalArgumentException if the specified property
+163         *  exists, but is not mapped
+164         */
+165        public Object get(String name, String key) {
+166    
+167            throw new UnsupportedOperationException
+168                ("FIXME - mapped properties not currently supported");
+169    
+170        }
+171    
+172    
+173        /**
+174         * Return the <code>DynaClass</code> instance that describes the set of
+175         * properties available for this DynaBean.
+176         *
+177         * @return The associated DynaClass
+178         */
+179        public DynaClass getDynaClass() {
+180    
+181            return (this.dynaClass);
+182    
+183        }
+184    
+185    
+186        /**
+187         * Remove any existing value for the specified key on the
+188         * specified mapped property.
+189         *
+190         * @param name Name of the property for which a value is to
+191         *  be removed
+192         * @param key Key of the value to be removed
+193         *
+194         * @exception IllegalArgumentException if there is no property
+195         *  of the specified name
+196         */
+197        public void remove(String name, String key) {
+198    
+199            throw new UnsupportedOperationException
+200                ("FIXME - mapped operations not currently supported");
+201    
+202        }
+203    
+204    
+205        /**
+206         * Set the value of a simple property with the specified name.
+207         *
+208         * @param name Name of the property whose value is to be set
+209         * @param value Value to which this property is to be set
+210         *
+211         * @exception ConversionException if the specified value cannot be
+212         *  converted to the type required for this property
+213         * @exception IllegalArgumentException if there is no property
+214         *  of the specified name
+215         * @exception NullPointerException if an attempt is made to set a
+216         *  primitive property to null
+217         */
+218        public void set(String name, Object value) {
+219    
+220            if (dynaClass.getDynaProperty(name) == null) {
+221                throw new IllegalArgumentException(name);
+222            }
+223            try {
+224                dynaClass.getResultSet().updateObject(name, value);
+225            } catch (SQLException e) {
+226                throw new RuntimeException
+227                    ("set(" + name + "): SQLException: " + e);
+228            }
+229    
+230        }
+231    
+232    
+233        /**
+234         * Set the value of an indexed property with the specified name.
+235         *
+236         * @param name Name of the property whose value is to be set
+237         * @param index Index of the property to be set
+238         * @param value Value to which this property is to be set
+239         *
+240         * @exception ConversionException if the specified value cannot be
+241         *  converted to the type required for this property
+242         * @exception IllegalArgumentException if there is no property
+243         *  of the specified name
+244         * @exception IllegalArgumentException if the specified property
+245         *  exists, but is not indexed
+246         * @exception IndexOutOfBoundsException if the specified index
+247         *  is outside the range of the underlying property
+248         */
+249        public void set(String name, int index, Object value) {
+250    
+251            throw new UnsupportedOperationException
+252                ("FIXME - indexed properties not currently supported");
+253    
+254        }
+255    
+256    
+257        /**
+258         * Set the value of a mapped property with the specified name.
+259         *
+260         * @param name Name of the property whose value is to be set
+261         * @param key Key of the property to be set
+262         * @param value Value to which this property is to be set
+263         *
+264         * @exception ConversionException if the specified value cannot be
+265         *  converted to the type required for this property
+266         * @exception IllegalArgumentException if there is no property
+267         *  of the specified name
+268         * @exception IllegalArgumentException if the specified property
+269         *  exists, but is not mapped
+270         */
+271        public void set(String name, String key, Object value) {
+272    
+273            throw new UnsupportedOperationException
+274                ("FIXME - mapped properties not currently supported");
+275    
+276        }
+277    
+278    
+279        // ------------------------------------------------------- Iterator Methods
+280    
+281    
+282        /**
+283         * <p>Return <code>true</code> if the iteration has more elements.</p>
+284         *
+285         * @return <code>true</code> if the result set has another
+286         * row, otherwise <code>false</code>
+287         */
+288        public boolean hasNext() {
+289    
+290            try {
+291                advance();
+292                return (!eof);
+293            } catch (SQLException e) {
+294                throw new RuntimeException("hasNext():  SQLException:  " + e);
+295            }
+296    
+297        }
+298    
+299    
+300        /**
+301         * <p>Return the next element in the iteration.</p>
+302         *
+303         * @return advance to the new row and return this
+304         */
+305        public Object next() {
+306    
+307            try {
+308                advance();
+309                if (eof) {
+310                    throw new NoSuchElementException();
+311                }
+312                current = false;
+313                return (this);
+314            } catch (SQLException e) {
+315                throw new RuntimeException("next():  SQLException:  " + e);
+316            }
+317    
+318        }
+319    
+320    
+321        /**
+322         * <p>Remove the current element from the iteration.  This method is
+323         * not supported.</p>
+324         */
+325        public void remove() {
+326    
+327            throw new UnsupportedOperationException("remove()");
+328    
+329        }
+330    
+331    
+332        // ------------------------------------------------------ Protected Methods
+333    
+334    
+335        /**
+336         * <p>Advance the result set to the next row, if there is not a current
+337         * row (and if we are not already at eof).</p>
+338         *
+339         * @exception SQLException if the result set throws an exception
+340         */
+341        protected void advance() throws SQLException {
+342    
+343            if (!current && !eof) {
+344                if (dynaClass.getResultSet().next()) {
+345                    current = true;
+346                    eof = false;
+347                } else {
+348                    current = false;
+349                    eof = true;
+350                }
+351            }
+352    
+353        }
+354    
+355    
+356    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/RowSetDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/RowSetDynaClass.html new file mode 100644 index 0000000..afca702 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/RowSetDynaClass.html @@ -0,0 +1,381 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    
+022    import java.io.Serializable;
+023    import java.sql.ResultSet;
+024    import java.sql.SQLException;
+025    import java.util.ArrayList;
+026    import java.util.List;
+027    
+028    
+029    /**
+030     * <p>Implementation of {@link DynaClass} that creates an in-memory collection
+031     * of {@link DynaBean}s representing the results of an SQL query.  Once the
+032     * {@link DynaClass} instance has been created, the JDBC <code>ResultSet</code>
+033     * and <code>Statement</code> on which it is based can be closed, and the
+034     * underlying <code>Connection</code> can be returned to its connection pool
+035     * (if you are using one).</p>
+036     *
+037     * <p>The normal usage pattern is something like:</p>
+038     * <pre>
+039     *   Connection conn = ...;  // Acquire connection from pool
+040     *   Statement stmt = conn.createStatement();
+041     *   ResultSet rs = stmt.executeQuery("SELECT ...");
+042     *   RowSetDynaClass rsdc = new RowSetDynaClass(rs);
+043     *   rs.close();
+044     *   stmt.close();
+045     *   ...;                    // Return connection to pool
+046     *   List rows = rsdc.getRows();
+047     *   ...;                   // Process the rows as desired
+048     * </pre>
+049     *
+050     * <p>Each column in the result set will be represented as a {@link DynaBean}
+051     * property of the corresponding name (optionally forced to lower case
+052     * for portability).  There will be one {@link DynaBean} in the
+053     * <code>List</code> returned by <code>getRows()</code> for each
+054     * row in the original <code>ResultSet</code>.</p>
+055     *
+056     * <p>In general, instances of {@link RowSetDynaClass} can be serialized
+057     * and deserialized, which will automatically include the list of
+058     * {@link DynaBean}s representing the data content.  The only exception
+059     * to this rule would be when the underlying property values that were
+060     * copied from the <code>ResultSet</code> originally cannot themselves
+061     * be serialized.  Therefore, a {@link RowSetDynaClass} makes a very
+062     * convenient mechanism for transporting data sets to remote Java-based
+063     * application components.</p>
+064     *
+065     * @author Craig R. McClanahan
+066     * @version $Revision: 926685 $ $Date: 2010-03-23 17:59:08 +0000 (Tue, 23 Mar 2010) $
+067     */
+068    
+069    public class RowSetDynaClass extends JDBCDynaClass implements DynaClass, Serializable {
+070    
+071    
+072        // ----------------------------------------------------- Instance variables
+073        
+074        /**
+075         * <p>Limits the size of the returned list.  The call to 
+076         * <code>getRows()</code> will return at most limit number of rows.
+077         * If less than or equal to 0, does not limit the size of the result.
+078         */
+079        protected int limit = -1;
+080    
+081        /**
+082         * <p>The list of {@link DynaBean}s representing the contents of
+083         * the original <code>ResultSet</code> on which this
+084         * {@link RowSetDynaClass} was based.</p>
+085         */
+086        protected List rows = new ArrayList();
+087    
+088        // ----------------------------------------------------------- Constructors
+089    
+090    
+091        /**
+092         * <p>Construct a new {@link RowSetDynaClass} for the specified
+093         * <code>ResultSet</code>.  The property names corresponding
+094         * to column names in the result set will be lower cased.</p>
+095         *
+096         * @param resultSet The result set to be wrapped
+097         *
+098         * @exception NullPointerException if <code>resultSet</code>
+099         *  is <code>null</code>
+100         * @exception SQLException if the metadata for this result set
+101         *  cannot be introspected
+102         */
+103        public RowSetDynaClass(ResultSet resultSet) throws SQLException {
+104    
+105            this(resultSet, true, -1);
+106    
+107        }
+108    
+109        /**
+110         * <p>Construct a new {@link RowSetDynaClass} for the specified
+111         * <code>ResultSet</code>.  The property names corresponding
+112         * to column names in the result set will be lower cased.</p>
+113         * 
+114         * If <code>limit</code> is not less than 0, max <code>limit</code>
+115         * number of rows will be copied into the list. 
+116         *
+117         * @param resultSet The result set to be wrapped
+118         * @param limit The maximum for the size of the result. 
+119         *
+120         * @exception NullPointerException if <code>resultSet</code>
+121         *  is <code>null</code>
+122         * @exception SQLException if the metadata for this result set
+123         *  cannot be introspected
+124         */
+125        public RowSetDynaClass(ResultSet resultSet, int limit) throws SQLException {
+126    
+127            this(resultSet, true, limit);
+128    
+129        }
+130    
+131    
+132        /**
+133         * <p>Construct a new {@link RowSetDynaClass} for the specified
+134         * <code>ResultSet</code>.  The property names corresponding
+135         * to the column names in the result set will be lower cased or not,
+136         * depending on the specified <code>lowerCase</code> value.</p>
+137         *
+138         * If <code>limit</code> is not less than 0, max <code>limit</code>
+139         * number of rows will be copied into the resultset. 
+140         *
+141         *
+142         * @param resultSet The result set to be wrapped
+143         * @param lowerCase Should property names be lower cased?
+144         *
+145         * @exception NullPointerException if <code>resultSet</code>
+146         *  is <code>null</code>
+147         * @exception SQLException if the metadata for this result set
+148         *  cannot be introspected
+149         */
+150        public RowSetDynaClass(ResultSet resultSet, boolean lowerCase)
+151                                                        throws SQLException {
+152            this(resultSet, lowerCase, -1);
+153    
+154        }
+155    
+156        /**
+157         * <p>Construct a new {@link RowSetDynaClass} for the specified
+158         * <code>ResultSet</code>.  The property names corresponding
+159         * to the column names in the result set will be lower cased or not,
+160         * depending on the specified <code>lowerCase</code> value.</p>
+161         *
+162         * <p><strong>WARNING</strong> - If you specify <code>false</code>
+163         * for <code>lowerCase</code>, the returned property names will
+164         * exactly match the column names returned by your JDBC driver.
+165         * Because different drivers might return column names in different
+166         * cases, the property names seen by your application will vary
+167         * depending on which JDBC driver you are using.</p>
+168         *
+169         * @param resultSet The result set to be wrapped
+170         * @param lowerCase Should property names be lower cased?
+171         * @param limit Maximum limit for the <code>List</code> of {@link DynaBean}
+172         *
+173         * @exception NullPointerException if <code>resultSet</code>
+174         *  is <code>null</code>
+175         * @exception SQLException if the metadata for this result set
+176         *  cannot be introspected
+177         */
+178        public RowSetDynaClass(ResultSet resultSet, boolean lowerCase, int limit)
+179                                                                throws SQLException {
+180    
+181            this(resultSet, lowerCase, limit, false);
+182    
+183        }
+184    
+185        /**
+186         * <p>Construct a new {@link RowSetDynaClass} for the specified
+187         * <code>ResultSet</code>.  The property names corresponding
+188         * to the column names in the result set will be lower cased or not,
+189         * depending on the specified <code>lowerCase</code> value.</p>
+190         *
+191         * <p><strong>WARNING</strong> - If you specify <code>false</code>
+192         * for <code>lowerCase</code>, the returned property names will
+193         * exactly match the column names returned by your JDBC driver.
+194         * Because different drivers might return column names in different
+195         * cases, the property names seen by your application will vary
+196         * depending on which JDBC driver you are using.</p>
+197         *
+198         * @param resultSet The result set to be wrapped
+199         * @param lowerCase Should property names be lower cased?
+200         * @param useColumnLabel true if the column label should be used, otherwise false
+201         *
+202         * @exception NullPointerException if <code>resultSet</code>
+203         *  is <code>null</code>
+204         * @exception SQLException if the metadata for this result set
+205         *  cannot be introspected
+206         * @since 1.8.3
+207         */
+208        public RowSetDynaClass(ResultSet resultSet, boolean lowerCase, boolean useColumnLabel)
+209            throws SQLException {
+210            this(resultSet, lowerCase, -1, useColumnLabel);
+211    
+212        }
+213    
+214        /**
+215         * <p>Construct a new {@link RowSetDynaClass} for the specified
+216         * <code>ResultSet</code>.  The property names corresponding
+217         * to the column names in the result set will be lower cased or not,
+218         * depending on the specified <code>lowerCase</code> value.</p>
+219         *
+220         * <p><strong>WARNING</strong> - If you specify <code>false</code>
+221         * for <code>lowerCase</code>, the returned property names will
+222         * exactly match the column names returned by your JDBC driver.
+223         * Because different drivers might return column names in different
+224         * cases, the property names seen by your application will vary
+225         * depending on which JDBC driver you are using.</p>
+226         *
+227         * @param resultSet The result set to be wrapped
+228         * @param lowerCase Should property names be lower cased?
+229         * @param limit Maximum limit for the <code>List</code> of {@link DynaBean}
+230         * @param useColumnLabel true if the column label should be used, otherwise false
+231         *
+232         * @exception NullPointerException if <code>resultSet</code>
+233         *  is <code>null</code>
+234         * @exception SQLException if the metadata for this result set
+235         *  cannot be introspected
+236         * @since 1.8.3
+237         */
+238        public RowSetDynaClass(ResultSet resultSet, boolean lowerCase, int limit, boolean useColumnLabel)
+239                                                                throws SQLException {
+240    
+241            if (resultSet == null) {
+242                throw new NullPointerException();
+243            }
+244            this.lowerCase = lowerCase;
+245            this.limit = limit;
+246            setUseColumnLabel(useColumnLabel);
+247            introspect(resultSet);
+248            copy(resultSet);
+249    
+250        }
+251    
+252        /**
+253         * <p>Return a <code>List</code> containing the {@link DynaBean}s that
+254         * represent the contents of each <code>Row</code> from the
+255         * <code>ResultSet</code> that was the basis of this
+256         * {@link RowSetDynaClass} instance.  These {@link DynaBean}s are
+257         * disconnected from the database itself, so there is no problem with
+258         * modifying the contents of the list, or the values of the properties
+259         * of these {@link DynaBean}s.  However, it is the application's
+260         * responsibility to persist any such changes back to the database,
+261         * if it so desires.</p>
+262         *
+263         * @return A <code>List</code> of {@link DynaBean} instances
+264         */
+265        public List getRows() {
+266    
+267            return (this.rows);
+268    
+269        }
+270    
+271    
+272        // ------------------------------------------------------ Protected Methods
+273    
+274    
+275        /**
+276         * <p>Copy the column values for each row in the specified
+277         * <code>ResultSet</code> into a newly created {@link DynaBean}, and add
+278         * this bean to the list of {@link DynaBean}s that will later by
+279         * returned by a call to <code>getRows()</code>.</p>
+280         *
+281         * @param resultSet The <code>ResultSet</code> whose data is to be
+282         *  copied
+283         *
+284         * @exception SQLException if an error is encountered copying the data
+285         */
+286        protected void copy(ResultSet resultSet) throws SQLException {
+287    
+288            int cnt = 0;
+289            while (resultSet.next() && (limit < 0  || cnt++ < limit) ) {
+290                DynaBean bean = createDynaBean();
+291                for (int i = 0; i < properties.length; i++) {
+292                    String name = properties[i].getName();
+293                    Object value = getObject(resultSet, name);
+294                    bean.set(name, value);
+295                }
+296                rows.add(bean);
+297            }
+298    
+299        }
+300    
+301    
+302        /**
+303         * <p>Create and return a new {@link DynaBean} instance to be used for
+304         * representing a row in the underlying result set.</p>
+305         *
+306         * @return A new <code>DynaBean</code> instance
+307         */
+308        protected DynaBean createDynaBean() {
+309    
+310            return (new BasicDynaBean(this));
+311    
+312        }
+313    
+314    
+315    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaBean.html new file mode 100644 index 0000000..daee8b7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaBean.html @@ -0,0 +1,447 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils;
+020    
+021    import java.io.Serializable;
+022    import java.lang.reflect.InvocationTargetException;
+023    
+024    
+025    /**
+026     * <p>Implementation of <code>DynaBean</code> that wraps a standard JavaBean
+027     * instance, so that DynaBean APIs can be used to access its properties.</p>
+028     *
+029     * <p>
+030     * The most common use cases for this class involve wrapping an existing java bean.
+031     * (This makes it different from the typical use cases for other <code>DynaBean</code>'s.) 
+032     * For example:
+033     * </p>
+034     * <code><pre>
+035     *  Object aJavaBean = ...;
+036     *  ...
+037     *  DynaBean db = new WrapDynaBean(aJavaBean);
+038     *  ...
+039     * </pre></code>
+040     *
+041     * <p><strong>IMPLEMENTATION NOTE</strong> - This implementation does not
+042     * support the <code>contains()</code> and <code>remove()</code> methods.</p>
+043     *
+044     * @author Craig McClanahan
+045     * @version $Revision: 926529 $ $Date: 2010-03-23 11:44:24 +0000 (Tue, 23 Mar 2010) $
+046     */
+047    
+048    public class WrapDynaBean implements DynaBean, Serializable {
+049    
+050    
+051        // ---------------------------------------------------------- Constructors
+052    
+053    
+054        /**
+055         * Construct a new <code>DynaBean</code> associated with the specified
+056         * JavaBean instance.
+057         *
+058         * @param instance JavaBean instance to be wrapped
+059         */
+060        public WrapDynaBean(Object instance) {
+061    
+062            super();
+063            this.instance = instance;
+064            this.dynaClass = (WrapDynaClass)getDynaClass();
+065    
+066        }
+067    
+068    
+069        // ---------------------------------------------------- Instance Variables
+070    
+071    
+072        /**
+073         * The <code>DynaClass</code> "base class" that this DynaBean
+074         * is associated with.
+075         */
+076        protected transient WrapDynaClass dynaClass = null;
+077    
+078    
+079        /**
+080         * The JavaBean instance wrapped by this WrapDynaBean.
+081         */
+082        protected Object instance = null;
+083    
+084    
+085        // ------------------------------------------------------ DynaBean Methods
+086    
+087    
+088        /**
+089         * Does the specified mapped property contain a value for the specified
+090         * key value?
+091         *
+092         * @param name Name of the property to check
+093         * @param key Name of the key to check
+094         * @return <code>true<code> if the mapped property contains a value for
+095         * the specified key, otherwise <code>false</code>
+096         *
+097         * @exception IllegalArgumentException if there is no property
+098         *  of the specified name
+099         */
+100        public boolean contains(String name, String key) {
+101    
+102            throw new UnsupportedOperationException
+103                    ("WrapDynaBean does not support contains()");
+104    
+105        }
+106    
+107    
+108        /**
+109         * Return the value of a simple property with the specified name.
+110         *
+111         * @param name Name of the property whose value is to be retrieved
+112         * @return The property's value
+113         *
+114         * @exception IllegalArgumentException if there is no property
+115         *  of the specified name
+116         */
+117        public Object get(String name) {
+118    
+119            Object value = null;
+120            try {
+121                value = PropertyUtils.getSimpleProperty(instance, name);
+122            } catch (InvocationTargetException ite) {
+123                Throwable cause = ite.getTargetException();
+124                throw new IllegalArgumentException
+125                        ("Error reading property '" + name +
+126                                  "' nested exception - " + cause);
+127            } catch (Throwable t) {
+128                throw new IllegalArgumentException
+129                        ("Error reading property '" + name +
+130                                  "', exception - " + t);
+131            }
+132            return (value);
+133    
+134        }
+135    
+136    
+137        /**
+138         * Return the value of an indexed property with the specified name.
+139         *
+140         * @param name Name of the property whose value is to be retrieved
+141         * @param index Index of the value to be retrieved
+142         * @return The indexed property's value
+143         *
+144         * @exception IllegalArgumentException if there is no property
+145         *  of the specified name
+146         * @exception IllegalArgumentException if the specified property
+147         *  exists, but is not indexed
+148         * @exception IndexOutOfBoundsException if the specified index
+149         *  is outside the range of the underlying property
+150         * @exception NullPointerException if no array or List has been
+151         *  initialized for this property
+152         */
+153        public Object get(String name, int index) {
+154    
+155            Object value = null;
+156            try {
+157                value = PropertyUtils.getIndexedProperty(instance, name, index);
+158            } catch (IndexOutOfBoundsException e) {
+159                throw e;
+160            } catch (InvocationTargetException ite) {
+161                Throwable cause = ite.getTargetException();
+162                throw new IllegalArgumentException
+163                        ("Error reading indexed property '" + name +
+164                                  "' nested exception - " + cause);
+165            } catch (Throwable t) {
+166                throw new IllegalArgumentException
+167                        ("Error reading indexed property '" + name +
+168                                  "', exception - " + t);
+169            }
+170            return (value);
+171    
+172        }
+173    
+174    
+175        /**
+176         * Return the value of a mapped property with the specified name,
+177         * or <code>null</code> if there is no value for the specified key.
+178         *
+179         * @param name Name of the property whose value is to be retrieved
+180         * @param key Key of the value to be retrieved
+181         * @return The mapped property's value
+182         *
+183         * @exception IllegalArgumentException if there is no property
+184         *  of the specified name
+185         * @exception IllegalArgumentException if the specified property
+186         *  exists, but is not mapped
+187         */
+188        public Object get(String name, String key) {
+189    
+190            Object value = null;
+191            try {
+192                value = PropertyUtils.getMappedProperty(instance, name, key);
+193            } catch (InvocationTargetException ite) {
+194                Throwable cause = ite.getTargetException();
+195                throw new IllegalArgumentException
+196                        ("Error reading mapped property '" + name +
+197                                  "' nested exception - " + cause);
+198            } catch (Throwable t) {
+199                throw new IllegalArgumentException
+200                        ("Error reading mapped property '" + name +
+201                                  "', exception - " + t);
+202            }
+203            return (value);
+204    
+205        }
+206    
+207    
+208        /**
+209         * Return the <code>DynaClass</code> instance that describes the set of
+210         * properties available for this DynaBean.
+211         * @return The associated DynaClass
+212         */
+213        public DynaClass getDynaClass() {
+214    
+215            if (dynaClass == null) {
+216                dynaClass = WrapDynaClass.createDynaClass(instance.getClass());
+217            }
+218    
+219            return (this.dynaClass);
+220    
+221        }
+222    
+223    
+224        /**
+225         * Remove any existing value for the specified key on the
+226         * specified mapped property.
+227         *
+228         * @param name Name of the property for which a value is to
+229         *  be removed
+230         * @param key Key of the value to be removed
+231         *
+232         * @exception IllegalArgumentException if there is no property
+233         *  of the specified name
+234         */
+235        public void remove(String name, String key) {
+236    
+237    
+238            throw new UnsupportedOperationException
+239                    ("WrapDynaBean does not support remove()");
+240    
+241        }
+242    
+243    
+244        /**
+245         * Set the value of a simple property with the specified name.
+246         *
+247         * @param name Name of the property whose value is to be set
+248         * @param value Value to which this property is to be set
+249         *
+250         * @exception ConversionException if the specified value cannot be
+251         *  converted to the type required for this property
+252         * @exception IllegalArgumentException if there is no property
+253         *  of the specified name
+254         * @exception NullPointerException if an attempt is made to set a
+255         *  primitive property to null
+256         */
+257        public void set(String name, Object value) {
+258    
+259            try {
+260                PropertyUtils.setSimpleProperty(instance, name, value);
+261            } catch (InvocationTargetException ite) {
+262                Throwable cause = ite.getTargetException();
+263                throw new IllegalArgumentException
+264                        ("Error setting property '" + name +
+265                                  "' nested exception -" + cause);
+266            } catch (Throwable t) {
+267                throw new IllegalArgumentException
+268                        ("Error setting property '" + name +
+269                                  "', exception - " + t);
+270            }
+271    
+272        }
+273    
+274    
+275        /**
+276         * Set the value of an indexed property with the specified name.
+277         *
+278         * @param name Name of the property whose value is to be set
+279         * @param index Index of the property to be set
+280         * @param value Value to which this property is to be set
+281         *
+282         * @exception ConversionException if the specified value cannot be
+283         *  converted to the type required for this property
+284         * @exception IllegalArgumentException if there is no property
+285         *  of the specified name
+286         * @exception IllegalArgumentException if the specified property
+287         *  exists, but is not indexed
+288         * @exception IndexOutOfBoundsException if the specified index
+289         *  is outside the range of the underlying property
+290         */
+291        public void set(String name, int index, Object value) {
+292    
+293            try {
+294                PropertyUtils.setIndexedProperty(instance, name, index, value);
+295            } catch (IndexOutOfBoundsException e) {
+296                throw e;
+297            } catch (InvocationTargetException ite) {
+298                Throwable cause = ite.getTargetException();
+299                throw new IllegalArgumentException
+300                        ("Error setting indexed property '" + name +
+301                                  "' nested exception - " + cause);
+302            } catch (Throwable t) {
+303                throw new IllegalArgumentException
+304                        ("Error setting indexed property '" + name +
+305                                  "', exception - " + t);
+306            }
+307    
+308        }
+309    
+310    
+311        /**
+312         * Set the value of a mapped property with the specified name.
+313         *
+314         * @param name Name of the property whose value is to be set
+315         * @param key Key of the property to be set
+316         * @param value Value to which this property is to be set
+317         *
+318         * @exception ConversionException if the specified value cannot be
+319         *  converted to the type required for this property
+320         * @exception IllegalArgumentException if there is no property
+321         *  of the specified name
+322         * @exception IllegalArgumentException if the specified property
+323         *  exists, but is not mapped
+324         */
+325        public void set(String name, String key, Object value) {
+326    
+327            try {
+328                PropertyUtils.setMappedProperty(instance, name, key, value);
+329            } catch (InvocationTargetException ite) {
+330                Throwable cause = ite.getTargetException();
+331                throw new IllegalArgumentException
+332                        ("Error setting mapped property '" + name +
+333                                  "' nested exception - " + cause);
+334            } catch (Throwable t) {
+335                throw new IllegalArgumentException
+336                        ("Error setting mapped property '" + name +
+337                                  "', exception - " + t);
+338            }
+339    
+340        }
+341    
+342        /** 
+343         * Gets the bean instance wrapped by this DynaBean.
+344         * For most common use cases, 
+345         * this object should already be known 
+346         * and this method safely be ignored.
+347         * But some creators of frameworks using <code>DynaBean</code>'s may 
+348         * find this useful.
+349         *
+350         * @return the java bean Object wrapped by this <code>DynaBean</code>
+351         */
+352        public Object getInstance() {
+353            return instance;
+354        }
+355    
+356    
+357        // ------------------------------------------------------ Protected Methods
+358    
+359    
+360        /**
+361         * Return the property descriptor for the specified property name.
+362         *
+363         * @param name Name of the property for which to retrieve the descriptor
+364         * @return The descriptor for the specified property
+365         *
+366         * @exception IllegalArgumentException if this is not a valid property
+367         *  name for our DynaClass
+368         */
+369        protected DynaProperty getDynaProperty(String name) {
+370    
+371            DynaProperty descriptor = getDynaClass().getDynaProperty(name);
+372            if (descriptor == null) {
+373                throw new IllegalArgumentException
+374                        ("Invalid property name '" + name + "'");
+375            }
+376            return (descriptor);
+377    
+378        }
+379    
+380    
+381    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaClass.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaClass.html new file mode 100644 index 0000000..d825ec0 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/WrapDynaClass.html @@ -0,0 +1,485 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils;
+019    
+020    
+021    import java.beans.PropertyDescriptor;
+022    import java.lang.ref.Reference;
+023    import java.lang.ref.SoftReference;
+024    import java.util.Collection;
+025    import java.util.HashMap;
+026    import java.util.Iterator;
+027    import java.util.Map;
+028    import java.util.Set;
+029    import java.util.WeakHashMap;
+030    
+031    
+032    /**
+033     * <p>Implementation of <code>DynaClass</code> for DynaBeans that wrap
+034     * standard JavaBean instances.</p>
+035     *
+036     * <p>
+037     * It is suggested that this class should not usually need to be used directly
+038     * to create new <code>WrapDynaBean</code> instances. 
+039     * It's usually better to call the <code>WrapDynaBean</code> constructor directly.
+040     * For example:</p>
+041     * <code><pre>
+042     *   Object javaBean = ...;
+043     *   DynaBean wrapper = new WrapDynaBean(javaBean);
+044     * </pre></code>
+045     * <p>
+046     *
+047     * @author Craig McClanahan
+048     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+049     */
+050    
+051    public class WrapDynaClass implements DynaClass {
+052    
+053    
+054        // ----------------------------------------------------------- Constructors
+055    
+056    
+057        /**
+058         * Construct a new WrapDynaClass for the specified JavaBean class.  This
+059         * constructor is private; WrapDynaClass instances will be created as
+060         * needed via calls to the <code>createDynaClass(Class)</code> method.
+061         *
+062         * @param beanClass JavaBean class to be introspected around
+063         */
+064        private WrapDynaClass(Class beanClass) {
+065    
+066            this.beanClassRef = new SoftReference(beanClass);
+067            this.beanClassName = beanClass.getName();
+068            introspect();
+069    
+070        }
+071    
+072    
+073        // ----------------------------------------------------- Instance Variables
+074    
+075        /**
+076         * Name of the JavaBean class represented by this WrapDynaClass.
+077         */
+078        private String beanClassName = null;
+079    
+080        /**
+081         * Reference to the JavaBean class represented by this WrapDynaClass.
+082         */
+083        private Reference beanClassRef = null;
+084    
+085        /**
+086         * The JavaBean <code>Class</code> which is represented by this
+087         * <code>WrapDynaClass</code>.
+088         *
+089         * @deprecated No longer initialized, use getBeanClass() method instead
+090         */
+091        protected Class beanClass = null;
+092    
+093    
+094        /**
+095         * The set of PropertyDescriptors for this bean class.
+096         */
+097        protected PropertyDescriptor[] descriptors = null;
+098    
+099    
+100        /**
+101         * The set of PropertyDescriptors for this bean class, keyed by the
+102         * property name.  Individual descriptor instances will be the same
+103         * instances as those in the <code>descriptors</code> list.
+104         */
+105        protected HashMap descriptorsMap = new HashMap();
+106    
+107    
+108        /**
+109         * The set of dynamic properties that are part of this DynaClass.
+110         */
+111        protected DynaProperty[] properties = null;
+112    
+113    
+114        /**
+115         * The set of dynamic properties that are part of this DynaClass,
+116         * keyed by the property name.  Individual descriptor instances will
+117         * be the same instances as those in the <code>properties</code> list.
+118         */
+119        protected HashMap propertiesMap = new HashMap();
+120    
+121    
+122        // ------------------------------------------------------- Static Variables
+123    
+124    
+125        private static final ContextClassLoaderLocal CLASSLOADER_CACHE = 
+126            new ContextClassLoaderLocal() {
+127                protected Object initialValue() {
+128                    return new WeakHashMap();
+129            }
+130        };
+131    
+132        /**
+133         * Get the wrap dyna classes cache
+134         */
+135        private static Map getDynaClassesMap() {
+136            return (Map)CLASSLOADER_CACHE.get();
+137        }
+138    
+139        /**
+140         * The set of <code>WrapDynaClass</code> instances that have ever been
+141         * created, keyed by the underlying bean Class. The keys to this map
+142         * are Class objects, and the values are corresponding WrapDynaClass
+143         * objects.
+144         * <p>
+145         * This static variable is safe even when this code is deployed via a
+146         * shared classloader because it is keyed via a Class object. The same
+147         * class loaded via two different classloaders will result in different
+148         * entries in this map.
+149         * <p>
+150         * Note, however, that this HashMap can result in a memory leak. When
+151         * this class is in a shared classloader it will retain references to
+152         * classes loaded via a webapp classloader even after the webapp has been
+153         * undeployed. That will prevent the entire classloader and all the classes
+154         * it refers to and all their static members from being freed.
+155         *
+156         ************* !!!!!!!!!!!! PLEASE NOTE !!!!!!!!!!!! *************
+157         *
+158         * THE FOLLOWING IS A NASTY HACK TO SO THAT BEANUTILS REMAINS BINARY
+159         *              COMPATIBLE WITH PREVIOUS RELEASES.
+160         *
+161         * There are two issues here:
+162         * 
+163         * 1) Memory Issues: The static HashMap caused memory problems (See BEANUTILS-59)
+164         *    to resolve this it has been moved into a ContextClassLoaderLocal instance
+165         *    (named CLASSLOADER_CACHE above) which holds one copy per
+166         *    ClassLoader in a WeakHashMap.
+167         * 
+168         * 2) Binary Compatibility: As the "dynaClasses" static HashMap is "protected"
+169         *    removing it breaks BeanUtils binary compatibility with previous versions.
+170         *    To resolve this all the methods have been overriden to delegate to the
+171         *    Map for the ClassLoader in the ContextClassLoaderLocal.
+172         *
+173         * @deprecated The dynaClasses Map will be removed in a subsequent release
+174         */
+175        protected static HashMap dynaClasses = new HashMap() {
+176            public void clear() {
+177                getDynaClassesMap().clear();
+178            }
+179            public boolean containsKey(Object key) {
+180                return getDynaClassesMap().containsKey(key);
+181            }
+182            public boolean containsValue(Object value) {
+183                return getDynaClassesMap().containsValue(value);
+184            }
+185            public Set entrySet() {
+186                return getDynaClassesMap().entrySet();
+187            }
+188            public boolean equals(Object o) {
+189                return getDynaClassesMap().equals(o);
+190            }
+191            public Object get(Object key) {
+192                return getDynaClassesMap().get(key);
+193            }
+194            public int hashCode() {
+195                return getDynaClassesMap().hashCode();
+196            }
+197            public boolean isEmpty() {
+198                return getDynaClassesMap().isEmpty();
+199            }
+200            public Set keySet() {
+201                return getDynaClassesMap().keySet();
+202            }
+203            public Object put(Object key, Object value) {
+204                return getDynaClassesMap().put(key, value);
+205            }
+206            public void putAll(Map m) {
+207                getDynaClassesMap().putAll(m);
+208            }
+209            public Object remove(Object key) {
+210                return getDynaClassesMap().remove(key);
+211            }
+212            public int size() {
+213                return getDynaClassesMap().size();
+214            }
+215            public Collection values() {
+216                return getDynaClassesMap().values();
+217            }
+218        };
+219    
+220    
+221        // ------------------------------------------------------ DynaClass Methods
+222    
+223        /**
+224         * Return the class of the underlying wrapped bean.
+225         *
+226         * @return the class of the underlying wrapped bean
+227         * @since 1.8.0
+228         */
+229        protected Class getBeanClass() {
+230            return (Class)beanClassRef.get();
+231        }
+232    
+233        /**
+234         * Return the name of this DynaClass (analogous to the
+235         * <code>getName()</code> method of <code>java.lang.Class</code), which
+236         * allows the same <code>DynaClass</code> implementation class to support
+237         * different dynamic classes, with different sets of properties.
+238         *
+239         * @return the name of the DynaClass
+240         */
+241        public String getName() {
+242    
+243            return beanClassName;
+244    
+245        }
+246    
+247    
+248        /**
+249         * Return a property descriptor for the specified property, if it exists;
+250         * otherwise, return <code>null</code>.
+251         *
+252         * @param name Name of the dynamic property for which a descriptor
+253         *  is requested
+254         * @return The descriptor for the specified property
+255         *
+256         * @exception IllegalArgumentException if no property name is specified
+257         */
+258        public DynaProperty getDynaProperty(String name) {
+259    
+260            if (name == null) {
+261                throw new IllegalArgumentException
+262                        ("No property name specified");
+263            }
+264            return ((DynaProperty) propertiesMap.get(name));
+265    
+266        }
+267    
+268    
+269        /**
+270         * <p>Return an array of <code>ProperyDescriptors</code> for the properties
+271         * currently defined in this DynaClass.  If no properties are defined, a
+272         * zero-length array will be returned.</p>
+273         *
+274         * <p><strong>FIXME</strong> - Should we really be implementing
+275         * <code>getBeanInfo()</code> instead, which returns property descriptors
+276         * and a bunch of other stuff?</p>
+277         *
+278         * @return the set of properties for this DynaClass
+279         */
+280        public DynaProperty[] getDynaProperties() {
+281    
+282            return (properties);
+283    
+284        }
+285    
+286    
+287        /**
+288         * <p>Instantiates a new standard JavaBean instance associated with
+289         * this DynaClass and return it wrapped in a new WrapDynaBean   
+290         * instance. <strong>NOTE</strong> the JavaBean should have a 
+291         * no argument constructor.</p>
+292         *
+293         * <strong>NOTE</strong> - Most common use cases should not need to use
+294         * this method. It is usually better to create new
+295         * <code>WrapDynaBean</code> instances by calling its constructor.
+296         * For example:</p>
+297         * <code><pre>
+298         *   Object javaBean = ...;
+299         *   DynaBean wrapper = new WrapDynaBean(javaBean);
+300         * </pre></code>
+301         * <p>
+302         * (This method is needed for some kinds of <code>DynaBean</code> framework.)
+303         * </p>
+304         *
+305         * @return A new <code>DynaBean</code> instance
+306         * @exception IllegalAccessException if the Class or the appropriate
+307         *  constructor is not accessible
+308         * @exception InstantiationException if this Class represents an abstract
+309         *  class, an array class, a primitive type, or void; or if instantiation
+310         *  fails for some other reason
+311         */
+312        public DynaBean newInstance()
+313                throws IllegalAccessException, InstantiationException {
+314    
+315            return new WrapDynaBean(getBeanClass().newInstance());
+316    
+317        }
+318    
+319    
+320        // --------------------------------------------------------- Public Methods
+321    
+322    
+323        /**
+324         * Return the PropertyDescriptor for the specified property name, if any;
+325         * otherwise return <code>null</code>.
+326         *
+327         * @param name Name of the property to be retrieved
+328         * @return The descriptor for the specified property
+329         */
+330        public PropertyDescriptor getPropertyDescriptor(String name) {
+331    
+332            return ((PropertyDescriptor) descriptorsMap.get(name));
+333    
+334        }
+335    
+336    
+337        // --------------------------------------------------------- Static Methods
+338    
+339    
+340        /**
+341         * Clear our cache of WrapDynaClass instances.
+342         */
+343        public static void clear() {
+344    
+345            getDynaClassesMap().clear();
+346    
+347        }
+348    
+349    
+350        /**
+351         * Create (if necessary) and return a new <code>WrapDynaClass</code>
+352         * instance for the specified bean class.
+353         *
+354         * @param beanClass Bean class for which a WrapDynaClass is requested
+355         * @return A new <i>Wrap</i> {@link DynaClass}
+356         */
+357        public static WrapDynaClass createDynaClass(Class beanClass) {
+358    
+359                WrapDynaClass dynaClass =
+360                        (WrapDynaClass) getDynaClassesMap().get(beanClass);
+361                if (dynaClass == null) {
+362                    dynaClass = new WrapDynaClass(beanClass);
+363                    getDynaClassesMap().put(beanClass, dynaClass);
+364                }
+365                return (dynaClass);
+366    
+367        }
+368    
+369    
+370        // ------------------------------------------------------ Protected Methods
+371    
+372    
+373        /**
+374         * Introspect our bean class to identify the supported properties.
+375         */
+376        protected void introspect() {
+377    
+378            // Look up the property descriptors for this bean class
+379            Class beanClass = getBeanClass();
+380            PropertyDescriptor[] regulars =
+381                    PropertyUtils.getPropertyDescriptors(beanClass);
+382            if (regulars == null) {
+383                regulars = new PropertyDescriptor[0];
+384            }
+385            Map mappeds =
+386                    PropertyUtils.getMappedPropertyDescriptors(beanClass);
+387            if (mappeds == null) {
+388                mappeds = new HashMap();
+389            }
+390    
+391            // Construct corresponding DynaProperty information
+392            properties = new DynaProperty[regulars.length + mappeds.size()];
+393            for (int i = 0; i < regulars.length; i++) {
+394                descriptorsMap.put(regulars[i].getName(),
+395                        regulars[i]);
+396                properties[i] =
+397                        new DynaProperty(regulars[i].getName(),
+398                                regulars[i].getPropertyType());
+399                propertiesMap.put(properties[i].getName(),
+400                        properties[i]);
+401            }
+402            int j = regulars.length;
+403            Iterator names = mappeds.keySet().iterator();
+404            while (names.hasNext()) {
+405                String name = (String) names.next();
+406                PropertyDescriptor descriptor =
+407                        (PropertyDescriptor) mappeds.get(name);
+408                properties[j] =
+409                        new DynaProperty(descriptor.getName(),
+410                                Map.class);
+411                propertiesMap.put(properties[j].getName(),
+412                        properties[j]);
+413                j++;
+414            }
+415    
+416        }
+417    
+418    
+419    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractArrayConverter.html new file mode 100644 index 0000000..1265ca4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractArrayConverter.html @@ -0,0 +1,282 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.io.IOException;
+023    import java.io.StreamTokenizer;
+024    import java.io.StringReader;
+025    import java.util.ArrayList;
+026    import java.util.List;
+027    import org.apache.commons.beanutils.ConversionException;
+028    import org.apache.commons.beanutils.Converter;
+029    
+030    
+031    
+032    /**
+033     * <p>Convenience base class for converters that translate the String
+034     * representation of an array into a corresponding array of primitives
+035     * object.  This class encapsulates the functionality required to parse
+036     * the String into a list of String elements that can later be
+037     * individually converted to the appropriate primitive type.</p>
+038     *
+039     * <p>The input syntax accepted by the <code>parseElements()</code> method
+040     * is designed to be compatible with the syntax used to initialize arrays
+041     * in a Java source program, except that only String literal values are
+042     * supported.  For maximum flexibility, the surrounding '{' and '}'
+043     * characters are optional, and individual elements may be separated by
+044     * any combination of whitespace and comma characters.</p>
+045     *
+046     * @author Craig R. McClanahan
+047     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+048     * @since 1.4
+049     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+050     */
+051    
+052    public abstract class AbstractArrayConverter implements Converter {
+053    
+054    
+055        // ----------------------------------------------------------- Constructors
+056    
+057    
+058        /**
+059         * Create a {@link Converter} that will throw a {@link ConversionException}
+060         * if a conversion error occurs.
+061         */
+062        public AbstractArrayConverter() {
+063    
+064            this.defaultValue = null;
+065            this.useDefault = false;
+066    
+067        }
+068    
+069        /**
+070         * Create a {@link Converter} that will return the specified default value
+071         * if a conversion error occurs.
+072         *
+073         * @param defaultValue The default value to be returned
+074         * @since 1.8.0
+075         */
+076        public AbstractArrayConverter(Object defaultValue) {
+077    
+078            if (defaultValue == NO_DEFAULT) {
+079                this.useDefault = false;
+080            } else {
+081                this.defaultValue = defaultValue;
+082                this.useDefault = true;
+083            }
+084    
+085        }
+086    
+087        // ------------------------------------------------------- Static Variables
+088    
+089        /**
+090         * This is a special reference that can be passed as the "default object"
+091         * to the constructor to indicate that no default is desired. Note that
+092         * the value 'null' cannot be used for this purpose, as the caller may
+093         * want a null to be returned as the default.
+094         * @since 1.8.0
+095         */
+096        public static final Object NO_DEFAULT = new Object();
+097    
+098        // ----------------------------------------------------- Instance Variables
+099    
+100    
+101        /**
+102         * <p>Model object for string arrays.</p>
+103         */
+104        protected static String[] strings = new String[0];
+105    
+106    
+107        /**
+108         * The default value specified to our Constructor, if any.
+109         */
+110        protected Object defaultValue = null;
+111    
+112    
+113        /**
+114         * Should we return the default value on conversion errors?
+115         */
+116        protected boolean useDefault = true;
+117    
+118    
+119        // --------------------------------------------------------- Public Methods
+120    
+121    
+122        /**
+123         * Convert the specified input object into an output object of the
+124         * specified type.  This method must be implemented by a concrete
+125         * subclass.
+126         *
+127         * @param type Data type to which this value should be converted
+128         * @param value The input value to be converted
+129         * @return The converted value
+130         *
+131         * @exception ConversionException if conversion cannot be performed
+132         *  successfully
+133         */
+134        public abstract Object convert(Class type, Object value);
+135    
+136    
+137        // ------------------------------------------------------ Protected Methods
+138    
+139    
+140        /**
+141         * <p>Parse an incoming String of the form similar to an array initializer
+142         * in the Java language into a <code>List</code> individual Strings
+143         * for each element, according to the following rules.</p>
+144         * <ul>
+145         * <li>The string is expected to be a comma-separated list of values.</li>
+146         * <li>The string may optionally have matching '{' and '}' delimiters
+147         *   around the list.</li>
+148         * <li>Whitespace before and after each element is stripped.</li>
+149         * <li>Elements in the list may be delimited by single or double quotes.
+150         *  Within a quoted elements, the normal Java escape sequences are valid.</li>
+151         * </ul>
+152         *
+153         * @param svalue String value to be parsed
+154         * @return The parsed list of String values
+155         *
+156         * @exception ConversionException if the syntax of <code>svalue</code>
+157         *  is not syntactically valid
+158         * @exception NullPointerException if <code>svalue</code>
+159         *  is <code>null</code>
+160         */
+161        protected List parseElements(String svalue) {
+162    
+163            // Validate the passed argument
+164            if (svalue == null) {
+165                throw new NullPointerException();
+166            }
+167    
+168            // Trim any matching '{' and '}' delimiters
+169            svalue = svalue.trim();
+170            if (svalue.startsWith("{") && svalue.endsWith("}")) {
+171                svalue = svalue.substring(1, svalue.length() - 1);
+172            }
+173    
+174            try {
+175    
+176                // Set up a StreamTokenizer on the characters in this String
+177                StreamTokenizer st =
+178                    new StreamTokenizer(new StringReader(svalue));
+179                st.whitespaceChars(',',','); // Commas are delimiters
+180                st.ordinaryChars('0', '9');  // Needed to turn off numeric flag
+181                st.ordinaryChars('.', '.');
+182                st.ordinaryChars('-', '-');
+183                st.wordChars('0', '9');      // Needed to make part of tokens
+184                st.wordChars('.', '.');
+185                st.wordChars('-', '-');
+186    
+187                // Split comma-delimited tokens into a List
+188                ArrayList list = new ArrayList();
+189                while (true) {
+190                    int ttype = st.nextToken();
+191                    if ((ttype == StreamTokenizer.TT_WORD) ||
+192                        (ttype > 0)) {
+193                        list.add(st.sval);
+194                    } else if (ttype == StreamTokenizer.TT_EOF) {
+195                        break;
+196                    } else {
+197                        throw new ConversionException
+198                            ("Encountered token of type " + ttype);
+199                    }
+200                }
+201    
+202                // Return the completed list
+203                return (list);
+204    
+205            } catch (IOException e) {
+206    
+207                throw new ConversionException(e);
+208    
+209            }
+210    
+211    
+212    
+213        }
+214    
+215    
+216    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractConverter.html new file mode 100644 index 0000000..e9c263e --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/AbstractConverter.html @@ -0,0 +1,524 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.lang.reflect.Array;
+020    import java.util.Collection;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    import org.apache.commons.beanutils.BeanUtils;
+024    import org.apache.commons.beanutils.ConversionException;
+025    import org.apache.commons.beanutils.Converter;
+026    
+027    /**
+028     * Base {@link Converter} implementation that provides the structure
+029     * for handling conversion <b>to</b> and <b>from</b> a specified type.
+030     * <p>
+031     * This implementation provides the basic structure for
+032     * converting to/from a specified type optionally using a default
+033     * value or throwing a {@link ConversionException} if a
+034     * conversion error occurs.
+035     * <p>
+036     * Implementations should provide conversion to the specified
+037     * type and from the specified type to a <code>String</code> value
+038     * by implementing the following methods:
+039     * <ul>
+040     *     <li><code>convertToString(value)</code> - convert to a String
+041     *        (default implementation uses the objects <code>toString()</code>
+042     *        method).</li>
+043     *     <li><code>convertToType(Class, value)</code> - convert
+044     *         to the specified type</li>
+045     * </ul>
+046     *
+047     * @version $Revision: 640131 $ $Date: 2008-03-23 02:10:31 +0000 (Sun, 23 Mar 2008) $
+048     * @since 1.8.0
+049     */
+050    public abstract class AbstractConverter implements Converter {
+051    
+052        /** Debug logging message to indicate default value configuration */
+053        private static final String DEFAULT_CONFIG_MSG =
+054            "(N.B. Converters can be configured to use default values to avoid throwing exceptions)";
+055    
+056        /** Current package name */
+057        //    getPackage() below returns null on some platforms/jvm versions during the unit tests.
+058    //    private static final String PACKAGE = AbstractConverter.class.getPackage().getName() + ".";
+059        private static final String PACKAGE = "org.apache.commons.beanutils.converters.";
+060    
+061        /**
+062         * Logging for this instance.
+063         */
+064        private transient Log log;
+065    
+066        /**
+067         * Should we return the default value on conversion errors?
+068         */
+069        private boolean useDefault = false;
+070    
+071        /**
+072         * The default value specified to our Constructor, if any.
+073         */
+074        private Object defaultValue = null;
+075    
+076        // ----------------------------------------------------------- Constructors
+077    
+078        /**
+079         * Construct a <i>Converter</i> that throws a
+080         * <code>ConversionException</code> if an error occurs.
+081         */
+082        public AbstractConverter() {
+083        }
+084    
+085        /**
+086         * Construct a <i>Converter</i> that returns a default
+087         * value if an error occurs.
+088         *
+089         * @param defaultValue The default value to be returned
+090         * if the value to be converted is missing or an error
+091         * occurs converting the value.
+092         */
+093        public AbstractConverter(Object defaultValue) {
+094            setDefaultValue(defaultValue);
+095        }
+096    
+097        // --------------------------------------------------------- Public Methods
+098    
+099        /**
+100         * Indicates whether a default value will be returned or exception
+101         * thrown in the event of a conversion error.
+102         *
+103         * @return <code>true</code> if a default value will be returned for
+104         * conversion errors or <code>false</code> if a {@link ConversionException}
+105         * will be thrown.
+106         */
+107        public boolean isUseDefault() {
+108            return useDefault;
+109        }
+110    
+111        /**
+112         * Convert the input object into an output object of the
+113         * specified type.
+114         *
+115         * @param type Data type to which this value should be converted
+116         * @param value The input value to be converted
+117         * @return The converted value.
+118         * @throws ConversionException if conversion cannot be performed
+119         * successfully and no default is specified.
+120         */
+121        public Object convert(Class type, Object value) {
+122    
+123            Class sourceType  = value == null ? null : value.getClass();
+124            Class targetType  = primitive(type  == null ? getDefaultType() : type);
+125    
+126            if (log().isDebugEnabled()) {
+127                log().debug("Converting"
+128                        + (value == null ? "" : " '" + toString(sourceType) + "'")
+129                        + " value '" + value + "' to type '" + toString(targetType) + "'");
+130            }
+131    
+132            value = convertArray(value);
+133    
+134            // Missing Value
+135            if (value == null) {
+136                return handleMissing(targetType);
+137            }
+138    
+139            sourceType = value.getClass();
+140    
+141            try {
+142                // Convert --> String
+143                if (targetType.equals(String.class)) {
+144                    return convertToString(value);
+145    
+146                // No conversion necessary
+147                } else if (targetType.equals(sourceType)) {
+148                    if (log().isDebugEnabled()) {
+149                        log().debug("    No conversion required, value is already a "
+150                                        + toString(targetType));
+151                    }
+152                    return value;
+153    
+154                // Convert --> Type
+155                } else {
+156                    Object result = convertToType(targetType, value);
+157                    if (log().isDebugEnabled()) {
+158                        log().debug("    Converted to " + toString(targetType) +
+159                                       " value '" + result + "'");
+160                    }
+161                    return result;
+162                }
+163            } catch (Throwable t) {
+164                return handleError(targetType, value, t);
+165            }
+166    
+167        }
+168    
+169        /**
+170         * Convert the input object into a String.
+171         * <p>
+172         * <b>N.B.</b>This implementation simply uses the value's
+173         * <code>toString()</code> method and should be overriden if a
+174         * more sophisticated mechanism for <i>conversion to a String</i>
+175         * is required.
+176         *
+177         * @param value The input value to be converted.
+178         * @return the converted String value.
+179         * @throws Throwable if an error occurs converting to a String
+180         */
+181        protected String convertToString(Object value) throws Throwable {
+182            return value.toString();
+183        }
+184    
+185        /**
+186         * Convert the input object into an output object of the
+187         * specified type.
+188         * <p>
+189         * Typical implementations will provide a minimum of
+190         * <code>String --> type</code> conversion.
+191         *
+192         * @param type Data type to which this value should be converted.
+193         * @param value The input value to be converted.
+194         * @return The converted value.
+195         * @throws Throwable if an error occurs converting to the specified type
+196         */
+197        protected abstract Object convertToType(Class type, Object value) throws Throwable;
+198    
+199        /**
+200         * Return the first element from an Array (or Collection)
+201         * or the value unchanged if not an Array (or Collection).
+202         *
+203         * N.B. This needs to be overriden for array/Collection converters.
+204         *
+205         * @param value The value to convert
+206         * @return The first element in an Array (or Collection)
+207         * or the value unchanged if not an Array (or Collection)
+208         */
+209        protected Object convertArray(Object value) {
+210            if (value == null) {
+211                return null;
+212            }
+213            if (value.getClass().isArray()) {
+214                if (Array.getLength(value) > 0) {
+215                    return Array.get(value, 0);
+216                } else {
+217                    return null;
+218                }
+219            }
+220            if (value instanceof Collection) {
+221                Collection collection = (Collection)value;
+222                if (collection.size() > 0) {
+223                    return collection.iterator().next();
+224                } else {
+225                    return null;
+226                }
+227            }
+228            return value;
+229        }
+230    
+231        /**
+232         * Handle Conversion Errors.
+233         * <p>
+234         * If a default value has been specified then it is returned
+235         * otherwise a ConversionException is thrown.
+236         *
+237         * @param type Data type to which this value should be converted.
+238         * @param value The input value to be converted
+239         * @param cause The exception thrown by the <code>convert</code> method
+240         * @return The default value.
+241         * @throws ConversionException if no default value has been
+242         * specified for this {@link Converter}.
+243         */
+244        protected Object handleError(Class type, Object value, Throwable cause) {
+245            if (log().isDebugEnabled()) {
+246                if (cause instanceof ConversionException) {
+247                    log().debug("    Conversion threw ConversionException: " + cause.getMessage());
+248                } else {
+249                    log().debug("    Conversion threw " + cause);
+250                }
+251            }
+252    
+253            if (useDefault) {
+254                return handleMissing(type);
+255            }
+256    
+257            ConversionException cex = null;
+258            if (cause instanceof ConversionException) {
+259                cex = (ConversionException)cause;
+260                if (log().isDebugEnabled()) {
+261                    log().debug("    Re-throwing ConversionException: " + cex.getMessage());
+262                    log().debug("    " + DEFAULT_CONFIG_MSG);
+263                }
+264            } else {
+265                String msg = "Error converting from '" + toString(value.getClass()) +
+266                        "' to '" + toString(type) + "' " + cause.getMessage();
+267                cex = new ConversionException(msg, cause);
+268                if (log().isDebugEnabled()) {
+269                    log().debug("    Throwing ConversionException: " + msg);
+270                    log().debug("    " + DEFAULT_CONFIG_MSG);
+271                }
+272                BeanUtils.initCause(cex, cause);
+273            }
+274    
+275            throw cex;
+276    
+277        }
+278    
+279        /**
+280         * Handle missing values.
+281         * <p>
+282         * If a default value has been specified then it is returned
+283         * otherwise a ConversionException is thrown.
+284         *
+285         * @param type Data type to which this value should be converted.
+286         * @return The default value.
+287         * @throws ConversionException if no default value has been
+288         * specified for this {@link Converter}.
+289         */
+290        protected Object handleMissing(Class type) {
+291    
+292            if (useDefault || type.equals(String.class)) {
+293                Object value = getDefault(type);
+294                if (useDefault && value != null && !(type.equals(value.getClass()))) {
+295                    try {
+296                        value = convertToType(type, defaultValue);
+297                    } catch (Throwable t) {
+298                        log().error("    Default conversion to " + toString(type)
+299                                + "failed: " + t);
+300                    }
+301                }
+302                if (log().isDebugEnabled()) {
+303                    log().debug("    Using default "
+304                            + (value == null ? "" : toString(value.getClass()) + " ")
+305                            + "value '" + defaultValue + "'");
+306                }
+307                return value;
+308            }
+309    
+310            ConversionException cex =  new ConversionException("No value specified for '" +
+311                    toString(type) + "'");
+312            if (log().isDebugEnabled()) {
+313                log().debug("    Throwing ConversionException: " + cex.getMessage());
+314                log().debug("    " + DEFAULT_CONFIG_MSG);
+315            }
+316            throw cex;
+317    
+318        }
+319    
+320        /**
+321         * Set the default value, converting as required.
+322         * <p>
+323         * If the default value is different from the type the
+324         * <code>Converter</code> handles, it will be converted
+325         * to the handled type.
+326         *
+327         * @param defaultValue The default value to be returned
+328         * if the value to be converted is missing or an error
+329         * occurs converting the value.
+330         * @throws ConversionException if an error occurs converting
+331         * the default value
+332         */
+333        protected void setDefaultValue(Object defaultValue) {
+334            useDefault = false;
+335            if (log().isDebugEnabled()) {
+336                log().debug("Setting default value: " + defaultValue);
+337            }
+338            if (defaultValue == null) {
+339               this.defaultValue  = null;
+340            } else {
+341               this.defaultValue  = convert(getDefaultType(), defaultValue);
+342            }
+343            useDefault = true;
+344        }
+345    
+346        /**
+347         * Return the default type this <code>Converter</code> handles.
+348         *
+349         * @return The default type this <code>Converter</code> handles.
+350         */
+351        protected abstract Class getDefaultType();
+352    
+353        /**
+354         * Return the default value for conversions to the specified
+355         * type.
+356         * @param type Data type to which this value should be converted.
+357         * @return The default value for the specified type.
+358         */
+359        protected Object getDefault(Class type) {
+360            if (type.equals(String.class)) {
+361                return null;
+362            } else {
+363                return defaultValue;
+364            }
+365        }
+366        
+367        /**
+368         * Provide a String representation of this converter.
+369         *
+370         * @return A String representation of this converter
+371         */
+372        public String toString() {
+373            return toString(getClass()) + "[UseDefault=" + useDefault + "]";
+374        }
+375    
+376        // ----------------------------------------------------------- Package Methods
+377    
+378        /**
+379         * Accessor method for Log instance.
+380         * <p>
+381         * The Log instance variable is transient and
+382         * accessing it through this method ensures it
+383         * is re-initialized when this instance is
+384         * de-serialized.
+385         *
+386         * @return The Log instance.
+387         */
+388        Log log() {
+389            if (log == null) {
+390                log = LogFactory.getLog(getClass());
+391            }
+392            return log;
+393        }
+394    
+395        /**
+396         * Change primitve Class types to the associated wrapper class.
+397         * @param type The class type to check.
+398         * @return The converted type.
+399         */
+400         Class primitive(Class type) {
+401            if (type == null || !type.isPrimitive()) {
+402                return type;
+403            }
+404    
+405            if (type == Integer.TYPE) {
+406                return Integer.class;
+407            } else if (type == Double.TYPE) {
+408                return Double.class;
+409            } else if (type == Long.TYPE) {
+410                return Long.class;
+411            } else if (type == Boolean.TYPE) {
+412                return Boolean.class;
+413            } else if (type == Float.TYPE) {
+414                return Float.class;
+415            } else if (type == Short.TYPE) {
+416                return Short.class;
+417            } else if (type == Byte.TYPE) {
+418                return Byte.class;
+419            } else if (type == Character.TYPE) {
+420                return Character.class;
+421            } else {
+422                return type;
+423            }
+424        }
+425    
+426        /**
+427         * Provide a String representation of a <code>java.lang.Class</code>.
+428         * @param type The <code>java.lang.Class</code>.
+429         * @return The String representation.
+430         */
+431        String toString(Class type) {
+432            String typeName = null;
+433            if (type == null) {
+434                typeName = "null";
+435            } else if (type.isArray()) {
+436                Class elementType = type.getComponentType();
+437                int count = 1;
+438                while (elementType.isArray()) {
+439                    elementType = elementType .getComponentType();
+440                    count++;
+441                }
+442                typeName = elementType.getName();
+443                for (int i = 0; i < count; i++) {
+444                    typeName += "[]";
+445                }
+446            } else {
+447                typeName = type.getName();
+448            }
+449            if (typeName.startsWith("java.lang.") ||
+450                typeName.startsWith("java.util.") ||
+451                typeName.startsWith("java.math.")) {
+452                typeName = typeName.substring("java.lang.".length());
+453            } else if (typeName.startsWith(PACKAGE)) {
+454                typeName = typeName.substring(PACKAGE.length());
+455            }
+456            return typeName;
+457        }
+458    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ArrayConverter.html new file mode 100644 index 0000000..379721b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ArrayConverter.html @@ -0,0 +1,550 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.util.Collections;
+020    import java.util.List;
+021    import java.util.ArrayList;
+022    import java.util.Iterator;
+023    import java.util.Collection;
+024    import java.io.StreamTokenizer;
+025    import java.io.StringReader;
+026    import java.io.IOException;
+027    import java.lang.reflect.Array;
+028    import org.apache.commons.beanutils.ConversionException;
+029    import org.apache.commons.beanutils.Converter;
+030    
+031    /**
+032     * Generic {@link Converter} implementaion that handles conversion
+033     * to and from <b>array</b> objects.
+034     * <p>
+035     * Can be configured to either return a <i>default value</i> or throw a
+036     * <code>ConversionException</code> if a conversion error occurs.
+037     * <p>
+038     * The main features of this implementation are:
+039     * <ul>
+040     *     <li><b>Element Conversion</b> - delegates to a {@link Converter},
+041     *         appropriate for the type, to convert individual elements
+042     *         of the array. This leverages the power of existing converters
+043     *         without having to replicate their functionality for converting
+044     *         to the element type and removes the need to create a specifc
+045     *         array type converters.</li>
+046     *     <li><b>Arrays or Collections</b> - can convert from either arrays or
+047     *         Collections to an array, limited only by the capability
+048     *         of the delegate {@link Converter}.</li>
+049     *     <li><b>Delimited Lists</b> - can Convert <b>to</b> and <b>from</b> a
+050     *         delimited list in String format.</li>
+051     *     <li><b>Conversion to String</b> - converts an array to a 
+052     *         <code>String</code> in one of two ways: as a <i>delimited list</i>
+053     *         or by converting the first element in the array to a String - this
+054     *         is controlled by the {@link ArrayConverter#setOnlyFirstToString(boolean)}
+055     *         parameter.</li>
+056     *     <li><b>Multi Dimensional Arrays</b> - its possible to convert a <code>String</code>
+057     *         to a multi-dimensional arrays, by embedding {@link ArrayConverter}
+058     *         within each other - see example below.</li>
+059     *     <li><b>Default Value</b></li>
+060     *         <ul>
+061     *             <li><b><i>No Default</b></i> - use the 
+062     *                 {@link ArrayConverter#ArrayConverter(Class, Converter)}
+063     *                 constructor to create a converter which throws a
+064     *                 {@link ConversionException} if the value is missing or
+065     *                 invalid.</li>
+066     *             <li><b><i>Default values</b></i> - use the 
+067     *                 {@link ArrayConverter#ArrayConverter(Class, Converter, int)}
+068     *                 constructor to create a converter which returns a <i>default
+069     *                 value</i>. The <i>defaultSize</i> parameter controls the 
+070     *                 <i>default value</i> in the following way:</li>
+071     *                 <ul>
+072     *                    <li><i>defaultSize &lt; 0</i> - default is <code>null</code></li>
+073     *                    <li><i>defaultSize = 0</i> - default is an array of length zero</li>
+074     *                    <li><i>defaultSize &gt; 0</i> - default is an array with a
+075     *                        length specified by <code>defaultSize</code> (N.B. elements
+076     *                        in the array will be <code>null</code>)</li>
+077     *                 </ul>
+078     *         </ul>
+079     * </ul>
+080     *
+081     * <h3>Parsing Delimited Lists</h3>
+082     * This implementation can convert a delimited list in <code>String</code> format
+083     * into an array of the appropriate type. By default, it uses a comma as the delimiter
+084     * but the following methods can be used to configure parsing:
+085     * <ul>
+086     *     <li><code>setDelimiter(char)</code> - allows the character used as
+087     *         the delimiter to be configured [default is a comma].</li>
+088     *     <li><code>setAllowedChars(char[])</code> - adds additional characters
+089     *         (to the default alphabetic/numeric) to those considered to be
+090     *         valid token characters.
+091     * </ul>
+092     *
+093     * <h3>Multi Dimensional Arrays</h3>
+094     * It is possible to convert a <code>String</code> to mulit-dimensional arrays by using
+095     * {@link ArrayConverter} as the element {@link Converter}
+096     * within another {@link ArrayConverter}.
+097     * <p>
+098     * For example, the following code demonstrates how to construct a {@link Converter}
+099     * to convert a delimited <code>String</code> into a two dimensional integer array:
+100     * <p>
+101     * <pre>
+102     *    // Construct an Integer Converter
+103     *    IntegerConverter integerConverter = new IntegerConverter();
+104     *
+105     *    // Construct an array Converter for an integer array (i.e. int[]) using
+106     *    // an IntegerConverter as the element converter.
+107     *    // N.B. Uses the default comma (i.e. ",") as the delimiter between individual numbers
+108     *    ArrayConverter arrayConverter = new ArrayConverter(int[].class, integerConverter);
+109     *
+110     *    // Construct a "Matrix" Converter which converts arrays of integer arrays using
+111     *    // the pre-ceeding ArrayConverter as the element Converter.
+112     *    // N.B. Uses a semi-colon (i.e. ";") as the delimiter to separate the different sets of numbers.
+113     *    //      Also the delimiter used by the first ArrayConverter needs to be added to the
+114     *    //      "allowed characters" for this one.
+115     *    ArrayConverter matrixConverter = new ArrayConverter(int[][].class, arrayConverter);
+116     *    matrixConverter.setDelimiter(';');
+117     *    matrixConverter.setAllowedChars(new char[] {','});
+118     *
+119     *    // Do the Conversion
+120     *    String matrixString = "11,12,13 ; 21,22,23 ; 31,32,33 ; 41,42,43";
+121     *    int[][] result = (int[][])matrixConverter.convert(int[][].class, matrixString);
+122     * </pre>
+123     *
+124     * @version $Revision: 640131 $ $Date: 2008-03-23 02:10:31 +0000 (Sun, 23 Mar 2008) $
+125     * @since 1.8.0
+126     */
+127    public class ArrayConverter extends AbstractConverter {
+128    
+129        private Object defaultTypeInstance;
+130        private Converter elementConverter;
+131        private int defaultSize;
+132        private char delimiter    = ',';
+133        private char[] allowedChars = new char[] {'.', '-'};
+134        private boolean onlyFirstToString = true;
+135    
+136        // ----------------------------------------------------------- Constructors
+137    
+138        /**
+139         * Construct an <b>array</b> <code>Converter</code> with the specified
+140         * <b>component</b> <code>Converter</code> that throws a
+141         * <code>ConversionException</code> if an error occurs.
+142         *
+143         * @param defaultType The default array type this
+144         *  <code>Converter</code> handles
+145         * @param elementConverter Converter used to convert
+146         *  individual array elements.
+147         */
+148        public ArrayConverter(Class defaultType, Converter elementConverter) {
+149            super();
+150            if (defaultType == null) {
+151                throw new IllegalArgumentException("Default type is missing");
+152            }
+153            if (!defaultType.isArray()) {
+154                throw new IllegalArgumentException("Default type must be an array.");
+155            }
+156            if (elementConverter == null) {
+157                throw new IllegalArgumentException("Component Converter is missing.");
+158            }
+159            this.defaultTypeInstance = Array.newInstance(defaultType.getComponentType(), 0);
+160            this.elementConverter = elementConverter;
+161        }
+162    
+163        /**
+164         * Construct an <b>array</b> <code>Converter</code> with the specified
+165         * <b>component</b> <code>Converter</code> that returns a default
+166         * array of the specified size (or <code>null</code>) if an error occurs.
+167         *
+168         * @param defaultType The default array type this
+169         *  <code>Converter</code> handles
+170         * @param elementConverter Converter used to convert
+171         *  individual array elements.
+172         * @param defaultSize Specifies the size of the default array value or if less
+173         *  than zero indicates that a <code>null</code> default value should be used.
+174         */
+175        public ArrayConverter(Class defaultType, Converter elementConverter, int defaultSize) {
+176            this(defaultType, elementConverter);
+177            this.defaultSize = defaultSize;
+178            Object defaultValue = null;
+179            if (defaultSize >= 0) {
+180                defaultValue = Array.newInstance(defaultType.getComponentType(), defaultSize);
+181            }
+182            setDefaultValue(defaultValue);
+183        }
+184    
+185        /**
+186         * Set the delimiter to be used for parsing a delimited String.
+187         *
+188         * @param delimiter The delimiter [default ',']
+189         */
+190        public void setDelimiter(char delimiter) {
+191            this.delimiter = delimiter;
+192        }
+193    
+194        /**
+195         * Set the allowed characters to be used for parsing a delimited String.
+196         *
+197         * @param allowedChars Characters which are to be considered as part of
+198         * the tokens when parsing a delimited String [default is '.' and '-']
+199         */
+200        public void setAllowedChars(char[] allowedChars) {
+201            this.allowedChars = allowedChars;
+202        }
+203    
+204        /**
+205         * Indicates whether converting to a String should create
+206         * a delimited list or just convert the first value.
+207         *
+208         * @param onlyFirstToString <code>true</code> converts only
+209         * the first value in the array to a String, <code>false</code>
+210         * converts all values in the array into a delimited list (default
+211         * is <code>true</code> 
+212         */
+213        public void setOnlyFirstToString(boolean onlyFirstToString) {
+214            this.onlyFirstToString = onlyFirstToString;
+215        }
+216    
+217        /**
+218         * Return the default type this <code>Converter</code> handles.
+219         *
+220         * @return The default type this <code>Converter</code> handles.
+221         */
+222        protected Class getDefaultType() {
+223            return defaultTypeInstance.getClass();
+224        }
+225    
+226        /**
+227         * Handles conversion to a String.
+228         *
+229         * @param value The value to be converted.
+230         * @return the converted String value.
+231         * @throws Throwable if an error occurs converting to a String
+232         */
+233        protected String convertToString(Object value) throws Throwable {
+234    
+235            int size = 0;
+236            Iterator iterator = null;
+237            Class type = value.getClass();
+238            if (type.isArray()) {
+239                size = Array.getLength(value);
+240            } else {
+241                Collection collection = convertToCollection(type, value);
+242                size = collection.size();
+243                iterator = collection.iterator();
+244            }
+245    
+246            if (size == 0) {
+247                return (String)getDefault(String.class);
+248            }
+249    
+250            if (onlyFirstToString) {
+251                size = 1;
+252            }
+253    
+254            // Create a StringBuffer containing a delimited list of the values
+255            StringBuffer buffer = new StringBuffer();
+256            for (int i = 0; i < size; i++) {
+257                if (i > 0) {
+258                    buffer.append(delimiter);
+259                }
+260                Object element = iterator == null ? Array.get(value, i) : iterator.next();
+261                element = elementConverter.convert(String.class, element);
+262                if (element != null) {
+263                    buffer.append(element);
+264                }
+265            }
+266    
+267            return buffer.toString();
+268    
+269        }
+270    
+271        /**
+272         * Handles conversion to an array of the specified type.
+273         *
+274         * @param type The type to which this value should be converted.
+275         * @param value The input value to be converted.
+276         * @return The converted value.
+277         * @throws Throwable if an error occurs converting to the specified type
+278         */
+279        protected Object convertToType(Class type, Object value) throws Throwable {
+280    
+281            if (!type.isArray()) {
+282                throw new ConversionException(toString(getClass())
+283                        + " cannot handle conversion to '"
+284                        + toString(type) + "' (not an array).");
+285            }
+286    
+287            // Handle the source
+288            int size = 0;
+289            Iterator iterator = null;
+290            if (value.getClass().isArray()) {
+291                size = Array.getLength(value);
+292            } else {
+293                Collection collection = convertToCollection(type, value);
+294                size = collection.size();
+295                iterator = collection.iterator();
+296            }
+297    
+298            // Allocate a new Array
+299            Class componentType = type.getComponentType();
+300            Object newArray = Array.newInstance(componentType, size);
+301    
+302            // Convert and set each element in the new Array
+303            for (int i = 0; i < size; i++) {
+304                Object element = iterator == null ? Array.get(value, i) : iterator.next();
+305                // TODO - probably should catch conversion errors and throw
+306                //        new exception providing better info back to the user
+307                element = elementConverter.convert(componentType, element);
+308                Array.set(newArray, i, element);
+309            }
+310    
+311            return newArray;
+312        }
+313    
+314        /**
+315         * Returns the value unchanged.
+316         *
+317         * @param value The value to convert
+318         * @return The value unchanged
+319         */
+320        protected Object convertArray(Object value) {
+321            return value;
+322        }
+323    
+324        /**
+325         * Converts non-array values to a Collection prior
+326         * to being converted either to an array or a String.
+327         * </p>
+328         * <ul>
+329         *   <li>{@link Collection} values are returned unchanged</li>
+330         *   <li>{@link Number}, {@link Boolean}  and {@link java.util.Date} 
+331         *       values returned as a the only element in a List.</li>
+332         *   <li>All other types are converted to a String and parsed
+333         *       as a delimited list.</li>
+334         * </ul>
+335         *
+336         * <strong>N.B.</strong> The method is called by both the
+337         * {@link ArrayConverter#convertToType(Class, Object)} and
+338         * {@link ArrayConverter#convertToString(Object)} methods for
+339         * <i>non-array</i> types.
+340         *
+341         * @param type The type to convert the value to
+342         * @param value value to be converted
+343         * @return Collection elements.
+344         */
+345        protected Collection convertToCollection(Class type, Object value) {
+346            if (value instanceof Collection) {
+347                return (Collection)value;
+348            }
+349            if (value instanceof Number ||
+350                value instanceof Boolean ||
+351                value instanceof java.util.Date) {
+352                List list = new ArrayList(1);
+353                list.add(value);
+354                return list;
+355            }
+356            
+357            return parseElements(type, value.toString());
+358        }
+359    
+360        /**
+361         * Return the default value for conversions to the specified
+362         * type.
+363         * @param type Data type to which this value should be converted.
+364         * @return The default value for the specified type.
+365         */
+366        protected Object getDefault(Class type) {
+367            if (type.equals(String.class)) {
+368                return null;
+369            }
+370    
+371            Object defaultValue = super.getDefault(type);
+372            if (defaultValue == null) {
+373                return null;
+374            }
+375    
+376            if (defaultValue.getClass().equals(type)) {
+377                return defaultValue;
+378            } else {
+379                return Array.newInstance(type.getComponentType(), defaultSize);
+380            }
+381    
+382        }
+383    
+384        /**
+385         * Provide a String representation of this array converter.
+386         *
+387         * @return A String representation of this array converter
+388         */
+389        public String toString() {
+390            StringBuffer buffer = new StringBuffer();
+391            buffer.append(toString(getClass()));
+392            buffer.append("[UseDefault=");
+393            buffer.append(isUseDefault());
+394            buffer.append(", ");
+395            buffer.append(elementConverter.toString());
+396            buffer.append(']');
+397            return buffer.toString();
+398        }
+399    
+400        /**
+401         * <p>Parse an incoming String of the form similar to an array initializer
+402         * in the Java language into a <code>List</code> individual Strings
+403         * for each element, according to the following rules.</p>
+404         * <ul>
+405         * <li>The string is expected to be a comma-separated list of values.</li>
+406         * <li>The string may optionally have matching '{' and '}' delimiters
+407         *   around the list.</li>
+408         * <li>Whitespace before and after each element is stripped.</li>
+409         * <li>Elements in the list may be delimited by single or double quotes.
+410         *  Within a quoted elements, the normal Java escape sequences are valid.</li>
+411         * </ul>
+412         *
+413         * @param type The type to convert the value to
+414         * @param value String value to be parsed
+415         * @return List of parsed elements.
+416         *
+417         * @throws ConversionException if the syntax of <code>svalue</code>
+418         *  is not syntactically valid
+419         * @throws NullPointerException if <code>svalue</code>
+420         *  is <code>null</code>
+421         */
+422        private List parseElements(Class type, String value) {
+423    
+424            if (log().isDebugEnabled()) {
+425                log().debug("Parsing elements, delimiter=[" + delimiter + "], value=[" + value + "]");
+426            }
+427    
+428            // Trim any matching '{' and '}' delimiters
+429            value = value.trim();
+430            if (value.startsWith("{") && value.endsWith("}")) {
+431                value = value.substring(1, value.length() - 1);
+432            }
+433    
+434            try {
+435    
+436                // Set up a StreamTokenizer on the characters in this String
+437                StreamTokenizer st = new StreamTokenizer(new StringReader(value));
+438                st.whitespaceChars(delimiter , delimiter); // Set the delimiters
+439                st.ordinaryChars('0', '9');  // Needed to turn off numeric flag
+440                st.wordChars('0', '9');      // Needed to make part of tokens
+441                for (int i = 0; i < allowedChars.length; i++) {
+442                    st.ordinaryChars(allowedChars[i], allowedChars[i]);
+443                    st.wordChars(allowedChars[i], allowedChars[i]);
+444                }
+445    
+446                // Split comma-delimited tokens into a List
+447                List list = null;
+448                while (true) {
+449                    int ttype = st.nextToken();
+450                    if ((ttype == StreamTokenizer.TT_WORD) || (ttype > 0)) {
+451                        if (st.sval != null) {
+452                            if (list == null) {
+453                                list = new ArrayList();
+454                            }
+455                            list.add(st.sval);
+456                        }
+457                    } else if (ttype == StreamTokenizer.TT_EOF) {
+458                        break;
+459                    } else {
+460                        throw new ConversionException("Encountered token of type "
+461                            + ttype + " parsing elements to '" + toString(type) + ".");
+462                    }
+463                }
+464    
+465                if (list == null) {
+466                    list = Collections.EMPTY_LIST;
+467                }
+468                if (log().isDebugEnabled()) {
+469                    log().debug(list.size() + " elements parsed");
+470                }
+471    
+472                // Return the completed list
+473                return (list);
+474    
+475            } catch (IOException e) {
+476    
+477                throw new ConversionException("Error converting from String to '"
+478                        + toString(type) + "': " + e.getMessage(), e);
+479    
+480            }
+481    
+482        }
+483    
+484    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigDecimalConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigDecimalConverter.html new file mode 100644 index 0000000..31fb473 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigDecimalConverter.html @@ -0,0 +1,135 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.math.BigDecimal;
+020    
+021    /**
+022     * {@link NumberConverter} implementation that handles conversion to
+023     * and from <b>java.math.BigDecimal</b> objects.
+024     * <p>
+025     * This implementation can be configured to handle conversion either
+026     * by using BigDecimal's default String conversion, or by using a Locale's pattern
+027     * or by specifying a format pattern. See the {@link NumberConverter}
+028     * documentation for further details.
+029     * <p>
+030     * Can be configured to either return a <i>default value</i> or throw a
+031     * <code>ConversionException</code> if a conversion error occurs.
+032     *
+033     * @author Craig R. McClanahan
+034     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+035     * @since 1.3
+036     */
+037    public final class BigDecimalConverter extends NumberConverter {
+038    
+039        /**
+040         * Construct a <b>java.math.BigDecimal</b> <i>Converter</i> that throws
+041         * a <code>ConversionException</code> if an error occurs.
+042         */
+043        public BigDecimalConverter() {
+044            super(true);
+045        }
+046    
+047        /**
+048         * Construct a <b>java.math.BigDecimal</b> <i>Converter</i> that returns
+049         * a default value if an error occurs.
+050         *
+051         * @param defaultValue The default value to be returned
+052         * if the value to be converted is missing or an error
+053         * occurs converting the value.
+054         */
+055        public BigDecimalConverter(Object defaultValue) {
+056            super(true, defaultValue);
+057        }
+058    
+059        /**
+060         * Return the default type this <code>Converter</code> handles.
+061         *
+062         * @return The default type this <code>Converter</code> handles.
+063         * @since 1.8.0
+064         */
+065        protected Class getDefaultType() {
+066            return BigDecimal.class;
+067        }
+068    
+069    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigIntegerConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigIntegerConverter.html new file mode 100644 index 0000000..21d657c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BigIntegerConverter.html @@ -0,0 +1,135 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.math.BigInteger;
+020    
+021    /**
+022     * {@link NumberConverter} implementation that handles conversion to
+023     * and from <b>java.math.BigInteger</b> objects.
+024     * <p>
+025     * This implementation can be configured to handle conversion either
+026     * by using BigInteger's default String conversion, or by using a Locale's pattern
+027     * or by specifying a format pattern. See the {@link NumberConverter}
+028     * documentation for further details.
+029     * <p>
+030     * Can be configured to either return a <i>default value</i> or throw a
+031     * <code>ConversionException</code> if a conversion error occurs.
+032     *
+033     * @author Craig R. McClanahan
+034     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+035     * @since 1.3
+036     */
+037    public final class BigIntegerConverter extends NumberConverter {
+038    
+039        /**
+040         * Construct a <b>java.math.BigInteger</b> <i>Converter</i> that throws
+041         * a <code>ConversionException</code> if an error occurs.
+042         */
+043        public BigIntegerConverter() {
+044            super(false);
+045        }
+046    
+047        /**
+048         * Construct a <b>java.math.BigInteger</b> <i>Converter</i> that returns
+049         * a default value if an error occurs.
+050         *
+051         * @param defaultValue The default value to be returned
+052         * if the value to be converted is missing or an error
+053         * occurs converting the value.
+054         */
+055        public BigIntegerConverter(Object defaultValue) {
+056            super(false, defaultValue);
+057        }
+058    
+059        /**
+060         * Return the default type this <code>Converter</code> handles.
+061         *
+062         * @return The default type this <code>Converter</code> handles.
+063         * @since 1.8.0
+064         */
+065        protected Class getDefaultType() {
+066            return BigInteger.class;
+067        }
+068    
+069    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanArrayConverter.html new file mode 100644 index 0000000..104e40a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanArrayConverter.html @@ -0,0 +1,311 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of boolean.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * <p>By default, the values to be converted are expected to be those
+033     * recognised by a default instance of BooleanConverter. A customised
+034     * BooleanConverter can be provided in order to recognise alternative values
+035     * as true/false. </p>
+036     *
+037     * @author Craig R. McClanahan
+038     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+039     * @since 1.4
+040     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+041     */
+042    
+043    public final class BooleanArrayConverter extends AbstractArrayConverter {
+044    
+045    
+046        // ----------------------------------------------------------- Constructors
+047    
+048    
+049        /**
+050         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+051         * a {@link ConversionException} if a conversion error occurs.
+052         *
+053         * <p>Conversion of strings to boolean values will be done via a default
+054         * instance of class BooleanConverter.</p>
+055         */
+056        public BooleanArrayConverter() {
+057    
+058            super();
+059            this.booleanConverter = DEFAULT_CONVERTER;
+060    
+061        }
+062    
+063    
+064        /**
+065         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+066         * the specified default value if a conversion error occurs.
+067         *
+068         * <p>Conversion of strings to boolean values will be done via a default
+069         * instance of class BooleanConverter.</p>
+070         *
+071         * @param defaultValue The default value to be returned
+072         */
+073        public BooleanArrayConverter(Object defaultValue) {
+074    
+075            super(defaultValue);
+076            this.booleanConverter = DEFAULT_CONVERTER;
+077    
+078        }
+079    
+080    
+081        /**
+082         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+083         * the specified default value if a conversion error occurs.
+084         *
+085         * <p>Conversion of strings to boolean values will be done via the
+086         * specified converter.</p>
+087         *
+088         * @param converter is the converter object that will be used to
+089         *  convert each input string-value into a boolean.
+090         *
+091         * @param defaultValue is the default value to be returned by method
+092         * convert if conversion fails; null is a valid default value. See the
+093         * documentation for method "convert" for more information.
+094         * The value BooleanArrayConverter.NO_DEFAULT may be passed here to
+095         * specify that an exception should be thrown on conversion failure.
+096         *  
+097         */
+098        public BooleanArrayConverter(BooleanConverter converter, Object defaultValue) {
+099    
+100            super(defaultValue);
+101            this.booleanConverter = converter;
+102    
+103        }
+104    
+105        // ------------------------------------------------------- Static Variables
+106    
+107        /**
+108         * Type which this class converts its input to. This value can be
+109         * used as a parameter to the ConvertUtils.register method.
+110         * @since 1.8.0
+111         */
+112        public static final Class MODEL = new boolean[0].getClass();
+113    
+114        /**
+115         * The converter that all instances of this class will use to
+116         * do individual string->boolean conversions, unless overridden
+117         * in the constructor.
+118         */
+119        private static final BooleanConverter DEFAULT_CONVERTER
+120            = new BooleanConverter();
+121    
+122        // ---------------------------------------------------- Instance Variables
+123    
+124        /**
+125         * This object is used to perform the conversion of individual strings
+126         * into Boolean/boolean values.
+127         */
+128        protected final BooleanConverter booleanConverter;
+129    
+130        // --------------------------------------------------------- Public Methods
+131    
+132    
+133        /**
+134         * Convert the specified input object into an output object of type
+135         * array-of-boolean.
+136         * 
+137         * <p>If the input value is null, then the default value specified in the
+138         * constructor is returned. If no such value was provided, then a
+139         * ConversionException is thrown instead.</p>
+140         *
+141         * <p>If the input value is of type String[] then the returned array shall
+142         * be of the same size as this array, with a true or false value in each
+143         * array element depending on the result of applying method
+144         * BooleanConverter.convert to each string.</p>
+145         *
+146         * <p>For all other types of value, the object's toString method is
+147         * expected to return a string containing a comma-separated list of
+148         * values, eg "true, false, true". See the documentation for
+149         * {@link AbstractArrayConverter#parseElements} for more information on
+150         * the exact formats supported.</p>
+151         *
+152         * <p>If the result of value.toString() cannot be split into separate
+153         * words, then the default value is also returned (or an exception thrown).
+154         * </p>
+155         *
+156         * <p>If any of the elements in the value array (or the elements resulting
+157         * from splitting up value.toString) are not recognised by the
+158         * BooleanConverter associated with this object, then what happens depends
+159         * on whether that BooleanConverter has a default value or not: if it does, 
+160         * then that unrecognised element is converted into the BooleanConverter's
+161         * default value. If the BooleanConverter does <i>not</i> have a default
+162         * value, then the default value for this object is returned as the
+163         * <i>complete</i> conversion result (not just for the element), or an 
+164         * exception is thrown if this object has no default value defined.</p>
+165         *
+166         * @param type is the type to which this value should be converted. In the
+167         *  case of this BooleanArrayConverter class, this value is ignored.
+168         *
+169         * @param value is the input value to be converted.
+170         *
+171         * @return an object of type boolean[], or the default value if there was
+172         *  any sort of error during conversion and the constructor
+173         *  was provided with a default value.
+174         *
+175         * @exception ConversionException if conversion cannot be performed
+176         *  successfully and the constructor was not provided with a default
+177         *  value to return on conversion failure.
+178         *
+179         * @exception NullPointerException if value is an array, and any of the
+180         * array elements are null.
+181         */
+182        public Object convert(Class type, Object value) {
+183    
+184            // Deal with a null value
+185            if (value == null) {
+186                if (useDefault) {
+187                    return (defaultValue);
+188                } else {
+189                    throw new ConversionException("No value specified");
+190                }
+191            }
+192    
+193            // Deal with the no-conversion-needed case
+194            if (MODEL == value.getClass()) {
+195                return (value);
+196            }
+197    
+198            // Deal with input value as a String array
+199            //
+200            // TODO: use if (value.getClass().isArray() instead...
+201            //  this requires casting to Object[], then using values[i].toString()
+202            if (strings.getClass() == value.getClass()) {
+203                try {
+204                    String[] values = (String[]) value;
+205                    boolean[] results = new boolean[values.length];
+206                    for (int i = 0; i < values.length; i++) {
+207                        String stringValue = values[i];
+208                        Object result = booleanConverter.convert(Boolean.class, stringValue);
+209                        results[i] = ((Boolean) result).booleanValue();
+210                    }
+211                    return (results);
+212                } catch (Exception e) {
+213                    if (useDefault) {
+214                        return (defaultValue);
+215                    } else {
+216                        throw new ConversionException(value.toString(), e);
+217                    }
+218                }
+219            }
+220    
+221            // We only get here if the input value is not of type String[].
+222            // In this case, we assume value.toString() returns a comma-separated
+223            // sequence of values; see method AbstractArrayConverter.parseElements
+224            // for more information.
+225            try {
+226                List list = parseElements(value.toString());
+227                boolean[] results = new boolean[list.size()];
+228                for (int i = 0; i < results.length; i++) {
+229                    String stringValue = (String) list.get(i);
+230                    Object result = booleanConverter.convert(Boolean.class, stringValue);
+231                    results[i] = ((Boolean) result).booleanValue();
+232                }
+233                return (results);
+234            } catch (Exception e) {
+235                if (useDefault) {
+236                    return (defaultValue);
+237                } else {
+238                    throw new ConversionException(value.toString(), e);
+239                }
+240            }
+241    
+242        }
+243    
+244    
+245    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanConverter.html new file mode 100644 index 0000000..efbfc4b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/BooleanConverter.html @@ -0,0 +1,307 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import org.apache.commons.beanutils.ConversionException;
+020    
+021    /**
+022     * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion
+023     * to and from <b>Boolean</b> objects.
+024     * {@link org.apache.commons.beanutils.Converter} implementaion that
+025     * handles conversion to and from <b>java.lang.Boolean</b> objects.
+026     * <p>
+027     * Can be configured to either return a <i>default value</i> or throw a
+028     * <code>ConversionException</code> if a conversion error occurs.
+029     * <p>
+030     * By default any object whose string representation is one of the values
+031     * {"yes", "y", "true", "on", "1"} is converted to Boolean.TRUE, and 
+032     * string representations {"no", "n", "false", "off", "0"} are converted
+033     * to Boolean.FALSE. The recognised true/false strings can be changed by:
+034     * <pre>
+035     *  String[] trueStrings = {"oui", "o", "1"};
+036     *  String[] falseStrings = {"non", "n", "0"};
+037     *  Converter bc = new BooleanConverter(trueStrings, falseStrings);
+038     *  ConvertUtils.register(bc, Boolean.class);
+039     *  ConvertUtils.register(bc, Boolean.TYPE);
+040     * </pre>
+041     * In addition, it is recommended that the BooleanArrayConverter also be
+042     * modified to recognise the same set of values:
+043     * <pre>
+044     *   Converter bac = new BooleanArrayConverter(bc, BooleanArrayConverter.NO_DEFAULT);
+045     *   ConvertUtils.register(bac, bac.MODEL);
+046     * </pre>
+047     * </p>
+048     * 
+049     * <p>Case is ignored when converting values to true or false.</p>
+050     *
+051     * @author Craig R. McClanahan
+052     * @version $Revision: 801644 $ $Date: 2009-08-06 14:38:56 +0100 (Thu, 06 Aug 2009) $
+053     * @since 1.3
+054     */
+055    public final class BooleanConverter extends AbstractConverter {
+056    
+057    
+058        // ----------------------------------------------------------- Constructors
+059    
+060    
+061        /**
+062         * Create a {@link org.apache.commons.beanutils.Converter} that will throw a {@link ConversionException}
+063         * if a conversion error occurs, ie the string value being converted is
+064         * not one of the known true strings, nor one of the known false strings.
+065         */
+066        public BooleanConverter() {
+067            super();
+068        }
+069    
+070    
+071        /**
+072         * Create a {@link org.apache.commons.beanutils.Converter} that will return the specified default value
+073         * if a conversion error occurs, ie the string value being converted is
+074         * not one of the known true strings, nor one of the known false strings.
+075         *
+076         * @param defaultValue The default value to be returned if the value
+077         *  being converted is not recognised. This value may be null, in which
+078         *  case null will be returned on conversion failure. When non-null, it is
+079         *  expected that this value will be either Boolean.TRUE or Boolean.FALSE.
+080         *  The special value BooleanConverter.NO_DEFAULT can also be passed here,
+081         *  in which case this constructor acts like the no-argument one.
+082         */
+083        public BooleanConverter(Object defaultValue) {
+084            super();
+085            if (defaultValue != NO_DEFAULT) {
+086                setDefaultValue(defaultValue);
+087            }
+088        }
+089    
+090        /**
+091         * Create a {@link org.apache.commons.beanutils.Converter} that will throw a {@link ConversionException}
+092         * if a conversion error occurs, ie the string value being converted is
+093         * not one of the known true strings, nor one of the known false strings.
+094         * <p>
+095         * The provided string arrays are copied, so that changes to the elements
+096         * of the array after this call is made do not affect this object.
+097         *
+098         * @param trueStrings is the set of strings which should convert to the
+099         *  value Boolean.TRUE. The value null must not be present. Case is
+100         *  ignored.
+101         *
+102         * @param falseStrings is the set of strings which should convert to the
+103         *  value Boolean.TRUE. The value null must not be present. Case is
+104         *  ignored.
+105         * @since 1.8.0
+106         */
+107        public BooleanConverter(String[] trueStrings, String[] falseStrings) {
+108            super();
+109            this.trueStrings = copyStrings(trueStrings);
+110            this.falseStrings = copyStrings(falseStrings);
+111        }
+112    
+113        /**
+114         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+115         * the specified default value if a conversion error occurs.
+116         * <p>
+117         * The provided string arrays are copied, so that changes to the elements
+118         * of the array after this call is made do not affect this object.
+119         *
+120         * @param trueStrings is the set of strings which should convert to the
+121         *  value Boolean.TRUE. The value null must not be present. Case is
+122         *  ignored.
+123         *
+124         * @param falseStrings is the set of strings which should convert to the
+125         *  value Boolean.TRUE. The value null must not be present. Case is
+126         *  ignored.
+127         *
+128         * @param defaultValue The default value to be returned if the value
+129         *  being converted is not recognised. This value may be null, in which
+130         *  case null will be returned on conversion failure. When non-null, it is
+131         *  expected that this value will be either Boolean.TRUE or Boolean.FALSE.
+132         *  The special value BooleanConverter.NO_DEFAULT can also be passed here,
+133         *  in which case an exception will be thrown on conversion failure.
+134         * @since 1.8.0
+135         */
+136        public BooleanConverter(String[] trueStrings, String[] falseStrings, 
+137                    Object defaultValue) {
+138            super();
+139            this.trueStrings = copyStrings(trueStrings);
+140            this.falseStrings = copyStrings(falseStrings);
+141            if (defaultValue != NO_DEFAULT) {
+142                setDefaultValue(defaultValue);
+143            }
+144        }
+145    
+146    
+147        // ----------------------------------------------------- Static Variables
+148    
+149    
+150        /**
+151         * This is a special reference that can be passed as the "default object"
+152         * to the constructor to indicate that no default is desired. Note that
+153         * the value 'null' cannot be used for this purpose, as the caller may
+154         * want a null to be returned as the default.
+155         * @deprecated Use constructors without default value.
+156         */
+157        public static final Object NO_DEFAULT = new Object();
+158    
+159    
+160        // ----------------------------------------------------- Instance Variables
+161    
+162        /**
+163         * The set of strings that are known to map to Boolean.TRUE.
+164         */
+165        private String[] trueStrings = {"true", "yes", "y", "on", "1"};
+166    
+167        /**
+168         * The set of strings that are known to map to Boolean.FALSE.
+169         */
+170        private String[] falseStrings = {"false", "no", "n", "off", "0"};
+171    
+172        // --------------------------------------------------------- Protected Methods
+173    
+174        /**
+175         * Return the default type this <code>Converter</code> handles.
+176         *
+177         * @return The default type this <code>Converter</code> handles.
+178         * @since 1.8.0
+179         */
+180        protected Class getDefaultType() {
+181            return Boolean.class;
+182        }
+183    
+184        /**
+185         * Convert the specified input object into an output object of the
+186         * specified type.
+187         *
+188         * @param type is the type to which this value should be converted. In the
+189         *  case of this BooleanConverter class, this value is ignored.
+190         *
+191         * @param value is the input value to be converted. The toString method
+192         *  shall be invoked on this object, and the result compared (ignoring
+193         *  case) against the known "true" and "false" string values.
+194         *
+195         * @return Boolean.TRUE if the value was a recognised "true" value, 
+196         *  Boolean.FALSE if the value was a recognised "false" value, or
+197         *  the default value if the value was not recognised and the constructor
+198         *  was provided with a default value.
+199         *
+200         * @throws Throwable if an error occurs converting to the specified type
+201         * @since 1.8.0
+202         */
+203        protected Object convertToType(Class type, Object value) throws Throwable {
+204    
+205            // All the values in the trueStrings and falseStrings arrays are
+206            // guaranteed to be lower-case. By converting the input value
+207            // to lowercase too, we can use the efficient String.equals method
+208            // instead of the less-efficient String.equalsIgnoreCase method.
+209            String stringValue = value.toString().toLowerCase();
+210    
+211            for(int i=0; i<trueStrings.length; ++i) {
+212                if (trueStrings[i].equals(stringValue)) {
+213                    return Boolean.TRUE;
+214                }
+215            }
+216    
+217            for(int i=0; i<falseStrings.length; ++i) {
+218                if (falseStrings[i].equals(stringValue)) {
+219                    return Boolean.FALSE;
+220                }
+221            }
+222            
+223            throw new ConversionException("Can't convert value '" + value + "' to a Boolean");
+224        }
+225    
+226        /**
+227         * This method creates a copy of the provided array, and ensures that
+228         * all the strings in the newly created array contain only lower-case
+229         * letters.
+230         * <p>
+231         * Using this method to copy string arrays means that changes to the
+232         * src array do not modify the dst array.
+233         */
+234        private static String[] copyStrings(String[] src) {
+235            String[] dst = new String[src.length];
+236            for(int i=0; i<src.length; ++i) {
+237                dst[i] = src[i].toLowerCase();
+238            }
+239            return dst;
+240        }
+241    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteArrayConverter.html new file mode 100644 index 0000000..7f213b5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteArrayConverter.html @@ -0,0 +1,212 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of byte.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class ByteArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will
+046         * throw a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public ByteArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public ByteArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final byte[] MODEL = new byte[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         * @exception ConversionException if conversion cannot be performed
+090         *  successfully
+091         */
+092        public Object convert(Class type, Object value) {
+093    
+094            // Deal with a null value
+095            if (value == null) {
+096                if (useDefault) {
+097                    return (defaultValue);
+098                } else {
+099                    throw new ConversionException("No value specified");
+100                }
+101            }
+102    
+103            // Deal with the no-conversion-needed case
+104            if (MODEL.getClass() == value.getClass()) {
+105                return (value);
+106            }
+107    
+108            // Deal with input value as a String array
+109            if (strings.getClass() == value.getClass()) {
+110                try {
+111                    String[] values = (String[]) value;
+112                    byte[] results = new byte[values.length];
+113                    for (int i = 0; i < values.length; i++) {
+114                        results[i] = Byte.parseByte(values[i]);
+115                    }
+116                    return (results);
+117                } catch (Exception e) {
+118                    if (useDefault) {
+119                        return (defaultValue);
+120                    } else {
+121                        throw new ConversionException(value.toString(), e);
+122                    }
+123                }
+124            }
+125    
+126            // Parse the input value as a String into elements
+127            // and convert to the appropriate type
+128            try {
+129                List list = parseElements(value.toString());
+130                byte[] results = new byte[list.size()];
+131                for (int i = 0; i < results.length; i++) {
+132                    results[i] = Byte.parseByte((String) list.get(i));
+133                }
+134                return (results);
+135            } catch (Exception e) {
+136                if (useDefault) {
+137                    return (defaultValue);
+138                } else {
+139                    throw new ConversionException(value.toString(), e);
+140                }
+141            }
+142    
+143        }
+144    
+145    
+146    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteConverter.html new file mode 100644 index 0000000..901a1ad --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ByteConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link NumberConverter} implementation that handles conversion to
+021     * and from <b>java.lang.Byte</b> objects.
+022     * <p>
+023     * This implementation can be configured to handle conversion either
+024     * by using Byte's default String conversion, or by using a Locale's pattern
+025     * or by specifying a format pattern. See the {@link NumberConverter}
+026     * documentation for further details.
+027     * <p>
+028     * Can be configured to either return a <i>default value</i> or throw a
+029     * <code>ConversionException</code> if a conversion error occurs.
+030     *
+031     * @author Craig R. McClanahan
+032     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+033     * @since 1.3
+034     */
+035    public final class ByteConverter extends NumberConverter {
+036    
+037        /**
+038         * Construct a <b>java.lang.Byte</b> <i>Converter</i> that throws
+039         * a <code>ConversionException</code> if an error occurs.
+040         */
+041        public ByteConverter() {
+042            super(false);
+043        }
+044    
+045        /**
+046         * Construct a <b>java.lang.Byte</b> <i>Converter</i> that returns
+047         * a default value if an error occurs.
+048         *
+049         * @param defaultValue The default value to be returned
+050         * if the value to be converted is missing or an error
+051         * occurs converting the value.
+052         */
+053        public ByteConverter(Object defaultValue) {
+054            super(false, defaultValue);
+055        }
+056    
+057        /**
+058         * Return the default type this <code>Converter</code> handles.
+059         *
+060         * @return The default type this <code>Converter</code> handles.
+061         * @since 1.8.0
+062         */
+063        protected Class getDefaultType() {
+064            return Byte.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CalendarConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CalendarConverter.html new file mode 100644 index 0000000..3fdfc00 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CalendarConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.util.Calendar;
+020    
+021    /**
+022     * {@link DateTimeConverter} implementation that handles conversion to
+023     * and from <b>java.util.Calendar</b> objects.
+024     * <p>
+025     * This implementation can be configured to handle conversion either
+026     * by using a Locale's default format or by specifying a set of format
+027     * patterns (note, there is no default String conversion for Calendar).
+028     * See the {@link DateTimeConverter} documentation for further details.
+029     * <p>
+030     * Can be configured to either return a <i>default value</i> or throw a
+031     * <code>ConversionException</code> if a conversion error occurs.
+032     *
+033     * @version $Revision: 640131 $
+034     * @since 1.8.0
+035     */
+036    public final class CalendarConverter extends DateTimeConverter {
+037    
+038        /**
+039         * Construct a <b>java.util.Calendar</b> <i>Converter</i> that throws
+040         * a <code>ConversionException</code> if an error occurs.
+041         */
+042        public CalendarConverter() {
+043            super();
+044        }
+045    
+046        /**
+047         * Construct a <b>java.util.Calendar</b> <i>Converter</i> that returns
+048         * a default value if an error occurs.
+049         *
+050         * @param defaultValue The default value to be returned
+051         * if the value to be converted is missing or an error
+052         * occurs converting the value.
+053         */
+054        public CalendarConverter(Object defaultValue) {
+055            super(defaultValue);
+056        }
+057    
+058        /**
+059         * Return the default type this <code>Converter</code> handles.
+060         *
+061         * @return The default type this <code>Converter</code> handles.
+062         */
+063        protected Class getDefaultType() {
+064            return Calendar.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterArrayConverter.html new file mode 100644 index 0000000..f421c50 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterArrayConverter.html @@ -0,0 +1,213 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of char.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class CharacterArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+046         * a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public CharacterArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public CharacterArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final char[] MODEL = new char[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         *
+090         * @exception ConversionException if conversion cannot be performed
+091         *  successfully
+092         */
+093        public Object convert(Class type, Object value) {
+094    
+095            // Deal with a null value
+096            if (value == null) {
+097                if (useDefault) {
+098                    return (defaultValue);
+099                } else {
+100                    throw new ConversionException("No value specified");
+101                }
+102            }
+103    
+104            // Deal with the no-conversion-needed case
+105            if (MODEL.getClass() == value.getClass()) {
+106                return (value);
+107            }
+108    
+109            // Deal with input value as a String array
+110            if (strings.getClass() == value.getClass()) {
+111                try {
+112                    String[] values = (String[]) value;
+113                    char[] results = new char[values.length];
+114                    for (int i = 0; i < values.length; i++) {
+115                        results[i] = values[i].charAt(0);
+116                    }
+117                    return (results);
+118                } catch (Exception e) {
+119                    if (useDefault) {
+120                        return (defaultValue);
+121                    } else {
+122                        throw new ConversionException(value.toString(), e);
+123                    }
+124                }
+125            }
+126    
+127            // Parse the input value as a String into elements
+128            // and convert to the appropriate type
+129            try {
+130                List list = parseElements(value.toString());
+131                char[] results = new char[list.size()];
+132                for (int i = 0; i < results.length; i++) {
+133                    results[i] = ((String) list.get(i)).charAt(0);
+134                }
+135                return (results);
+136            } catch (Exception e) {
+137                if (useDefault) {
+138                    return (defaultValue);
+139                } else {
+140                    throw new ConversionException(value.toString(), e);
+141                }
+142            }
+143    
+144        }
+145    
+146    
+147    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterConverter.html new file mode 100644 index 0000000..d159a34 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/CharacterConverter.html @@ -0,0 +1,153 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion
+021     * to and from <b>java.lang.Character</b> objects.
+022     * <p>
+023     * Can be configured to either return a <i>default value</i> or throw a
+024     * <code>ConversionException</code> if a conversion error occurs.
+025     *
+026     * @author Craig R. McClanahan
+027     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+028     * @since 1.3
+029     */
+030    public final class CharacterConverter extends AbstractConverter {
+031    
+032        /**
+033         * Construct a <b>java.lang.Character</b> <i>Converter</i> that throws
+034         * a <code>ConversionException</code> if an error occurs.
+035         */
+036        public CharacterConverter() {
+037            super();
+038        }
+039    
+040        /**
+041         * Construct a <b>java.lang.Character</b> <i>Converter</i> that returns
+042         * a default value if an error occurs.
+043         *
+044         * @param defaultValue The default value to be returned
+045         * if the value to be converted is missing or an error
+046         * occurs converting the value.
+047         */
+048        public CharacterConverter(Object defaultValue) {
+049            super(defaultValue);
+050        }
+051    
+052        /**
+053         * Return the default type this <code>Converter</code> handles.
+054         *
+055         * @return The default type this <code>Converter</code> handles.
+056         * @since 1.8.0
+057         */
+058        protected Class getDefaultType() {
+059            return Character.class;
+060        }
+061    
+062        /**
+063         * <p>Convert a java.lang.Class or object into a String.</p>
+064         *
+065         * @param value The input value to be converted
+066         * @return the converted String value.
+067         * @since 1.8.0
+068         */
+069        protected String convertToString(Object value) {
+070            String strValue = value.toString();
+071            return strValue.length() == 0 ? "" : strValue.substring(0, 1);
+072        }
+073    
+074        /**
+075         * <p>Convert the input object into a java.lang.Character.</p>
+076         *
+077         * @param type Data type to which this value should be converted.
+078         * @param value The input value to be converted.
+079         * @return The converted value.
+080         * @throws Exception if conversion cannot be performed successfully
+081         * @since 1.8.0
+082         */
+083        protected Object convertToType(Class type, Object value) throws Exception {
+084            return new Character(value.toString().charAt(0));
+085        }
+086    
+087    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ClassConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ClassConverter.html new file mode 100644 index 0000000..46a1625 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ClassConverter.html @@ -0,0 +1,169 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion
+021     * to and from <b>java.lang.Class</b> objects.
+022     * <p>
+023     * The class will be loaded from the thread context class
+024     * loader (if it exists); otherwise the class loader that loaded this class
+025     * will be used.
+026     * <p>
+027     * Can be configured to either return a <i>default value</i> or throw a
+028     * <code>ConversionException</code> if a conversion error occurs.
+029     *
+030     * @author Tomas Viberg
+031     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+032     * @since 1.4
+033     */
+034    public final class ClassConverter extends AbstractConverter {
+035    
+036        /**
+037         * Construct a <b>java.lang.Class</b> <i>Converter</i> that throws
+038         * a <code>ConversionException</code> if an error occurs.
+039         */
+040        public ClassConverter() {
+041            super();
+042        }
+043    
+044        /**
+045         * Construct a <b>java.lang.Class</b> <i>Converter</i> that returns
+046         * a default value if an error occurs.
+047         *
+048         * @param defaultValue The default value to be returned
+049         * if the value to be converted is missing or an error
+050         * occurs converting the value.
+051         */
+052        public ClassConverter(Object defaultValue) {
+053            super(defaultValue);
+054        }
+055    
+056        /**
+057         * Return the default type this <code>Converter</code> handles.
+058         *
+059         * @return The default type this <code>Converter</code> handles.
+060         * @since 1.8.0
+061         */
+062        protected Class getDefaultType() {
+063            return Class.class;
+064        }
+065    
+066        /**
+067         * <p>Convert a java.lang.Class or object into a String.</p>
+068         *
+069         * @param value The input value to be converted
+070         * @return the converted String value.
+071         * @since 1.8.0
+072         */
+073        protected String convertToString(Object value) {
+074            return (value instanceof Class) ? ((Class)value).getName() : value.toString();
+075        }
+076    
+077        /**
+078         * <p>Convert the input object into a java.lang.Class.</p>
+079         *
+080         * @param type Data type to which this value should be converted.
+081         * @param value The input value to be converted.
+082         * @return The converted value.
+083         * @throws Throwable if an error occurs converting to the specified type
+084         * @since 1.8.0
+085         */
+086        protected Object convertToType(Class type, Object value) throws Throwable {
+087            ClassLoader classLoader =
+088                Thread.currentThread().getContextClassLoader();
+089            if (classLoader != null) {
+090                try {
+091                    return (classLoader.loadClass(value.toString()));
+092                } catch (ClassNotFoundException ex) {
+093                    // Don't fail, carry on and try this class's class loader
+094                    // (see issue# BEANUTILS-263)
+095                }
+096            }
+097    
+098            // Try this class's class loader
+099            classLoader = ClassConverter.class.getClassLoader();
+100            return (classLoader.loadClass(value.toString()));
+101        }
+102    
+103    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ConverterFacade.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ConverterFacade.html new file mode 100644 index 0000000..00f39fb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ConverterFacade.html @@ -0,0 +1,140 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import org.apache.commons.beanutils.Converter;
+020    
+021    /**
+022     * Provides a facade for {@link Converter} implementations
+023     * preventing access to any public API in the implementation,
+024     * other than that specified by {@link Converter}.
+025     * <p />
+026     * This implementation can be used to prevent registered {@link Converter}
+027     * implementations that provide configuration options from being
+028     * retrieved and modified.
+029     *
+030     * @version $Revision: 552084 $ $Date: 2007-06-30 04:04:13 +0100 (Sat, 30 Jun 2007) $
+031     * @since 1.8.0
+032     */
+033    public final class ConverterFacade implements Converter {
+034    
+035        private final Converter converter;
+036    
+037        /**
+038         * Construct a converter which delegates to the specified
+039         * {@link Converter} implementation.
+040         *
+041         * @param converter The converter to delegate to
+042         */
+043        public ConverterFacade(Converter converter) {
+044            if (converter == null) {
+045                throw new IllegalArgumentException("Converter is missing");
+046            }
+047            this.converter = converter;
+048        }
+049    
+050        /**
+051         * Convert the input object into an output object of the
+052         * specified type by delegating to the underlying {@link Converter}
+053         * implementation.
+054         *
+055         * @param type Data type to which this value should be converted
+056         * @param value The input value to be converted
+057         * @return The converted value.
+058         */
+059        public Object convert(Class type, Object value) {
+060            return converter.convert(type, value);
+061        }
+062    
+063        /**
+064         * Provide a String representation of this facade implementation
+065         * sand the underlying {@link Converter} it delegates to.
+066         *
+067         * @return A String representation of this facade implementation
+068         * sand the underlying {@link Converter} it delegates to
+069         */
+070        public String toString() {
+071            return "ConverterFacade[" + converter.toString() + "]";
+072        }
+073    
+074    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateConverter.html new file mode 100644 index 0000000..03a5bbc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.util.Date;
+020    
+021    /**
+022     * {@link DateTimeConverter} implementation that handles conversion to
+023     * and from <b>java.util.Date</b> objects.
+024     * <p>
+025     * This implementation can be configured to handle conversion either
+026     * by using a Locale's default format or by specifying a set of format
+027     * patterns (note, there is no default String conversion for Date).
+028     * See the {@link DateTimeConverter} documentation for further details.
+029     * <p>
+030     * Can be configured to either return a <i>default value</i> or throw a
+031     * <code>ConversionException</code> if a conversion error occurs.
+032     *
+033     * @version $Revision: 640131 $
+034     * @since 1.8.0
+035     */
+036    public final class DateConverter extends DateTimeConverter {
+037    
+038        /**
+039         * Construct a <b>java.util.Date</b> <i>Converter</i> that throws
+040         * a <code>ConversionException</code> if an error occurs.
+041         */
+042        public DateConverter() {
+043            super();
+044        }
+045    
+046        /**
+047         * Construct a <b>java.util.Date</b> <i>Converter</i> that returns
+048         * a default value if an error occurs.
+049         *
+050         * @param defaultValue The default value to be returned
+051         * if the value to be converted is missing or an error
+052         * occurs converting the value.
+053         */
+054        public DateConverter(Object defaultValue) {
+055            super(defaultValue);
+056        }
+057    
+058        /**
+059         * Return the default type this <code>Converter</code> handles.
+060         *
+061         * @return The default type this <code>Converter</code> handles.
+062         */
+063        protected Class getDefaultType() {
+064            return Date.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateTimeConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateTimeConverter.html new file mode 100644 index 0000000..6e5d502 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DateTimeConverter.html @@ -0,0 +1,694 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.util.Date;
+020    import java.util.Locale;
+021    import java.util.Calendar;
+022    import java.util.TimeZone;
+023    import java.text.DateFormat;
+024    import java.text.SimpleDateFormat;
+025    import java.text.ParsePosition;
+026    import org.apache.commons.beanutils.ConversionException;
+027    
+028    /**
+029     * {@link org.apache.commons.beanutils.Converter} implementaion
+030     * that handles conversion to and from <b>date/time</b> objects.
+031     * <p>
+032     * This implementation handles conversion for the following
+033     * <i>date/time</i> types.
+034     * <ul>
+035     *     <li><code>java.util.Date</code></li>
+036     *     <li><code>java.util.Calendar</code></li>
+037     *     <li><code>java.sql.Date</code></li>
+038     *     <li><code>java.sql.Time</code></li>
+039     *     <li><code>java.sql.Timestamp</code></li>
+040     * </ul>
+041     *
+042     * <h3>String Conversions (to and from)</h3>
+043     * This class provides a number of ways in which date/time
+044     * conversions to/from Strings can be achieved:
+045     * <ul>
+046     *    <li>Using the SHORT date format for the default Locale, configure using:</li>
+047     *        <ul>
+048     *           <li><code>setUseLocaleFormat(true)</code></li>
+049     *        </ul>
+050     *    <li>Using the SHORT date format for a specified Locale, configure using:</li>
+051     *        <ul>
+052     *           <li><code>setLocale(Locale)</code></li>
+053     *        </ul>
+054     *    <li>Using the specified date pattern(s) for the default Locale, configure using:</li>
+055     *        <ul>
+056     *           <li>Either <code>setPattern(String)</code> or
+057     *                      <code>setPatterns(String[])</code></li>
+058     *        </ul>
+059     *    <li>Using the specified date pattern(s) for a specified Locale, configure using:</li>
+060     *        <ul>
+061     *           <li><code>setPattern(String)</code> or
+062     *                    <code>setPatterns(String[]) and...</code></li>
+063     *           <li><code>setLocale(Locale)</code></li>
+064     *        </ul>
+065     *    <li>If none of the above are configured the
+066     *        <code>toDate(String)</code> method is used to convert
+067     *        from String to Date and the Dates's
+068     *        <code>toString()</code> method used to convert from
+069     *        Date to String.</li>
+070     * </ul>
+071     *
+072     * <p>
+073     * The <b>Time Zone</b> to use with the date format can be specified
+074     * using the <code>setTimeZone()</code> method.
+075     *
+076     * @version $Revision: 640131 $ $Date: 2008-03-23 02:10:31 +0000 (Sun, 23 Mar 2008) $
+077     * @since 1.8.0
+078     */
+079    public abstract class DateTimeConverter extends AbstractConverter {
+080    
+081        private String[] patterns;
+082        private String displayPatterns;
+083        private Locale locale;
+084        private TimeZone timeZone;
+085        private boolean useLocaleFormat;
+086    
+087    
+088        // ----------------------------------------------------------- Constructors
+089    
+090        /**
+091         * Construct a Date/Time <i>Converter</i> that throws a
+092         * <code>ConversionException</code> if an error occurs.
+093         */
+094        public DateTimeConverter() {
+095            super();
+096        }
+097    
+098        /**
+099         * Construct a Date/Time <i>Converter</i> that returns a default
+100         * value if an error occurs.
+101         *
+102         * @param defaultValue The default value to be returned
+103         * if the value to be converted is missing or an error
+104         * occurs converting the value.
+105         */
+106        public DateTimeConverter(Object defaultValue) {
+107            super(defaultValue);
+108        }
+109    
+110    
+111        // --------------------------------------------------------- Public Methods
+112    
+113        /**
+114         * Indicate whether conversion should use a format/pattern or not.
+115         *
+116         * @param useLocaleFormat <code>true</code> if the format
+117         * for the locale should be used, otherwise <code>false</code>
+118         */
+119        public void setUseLocaleFormat(boolean useLocaleFormat) {
+120            this.useLocaleFormat = useLocaleFormat;
+121        }
+122    
+123        /**
+124         * Return the Time Zone to use when converting dates
+125         * (or <code>null</code> if none specified.
+126         *
+127         * @return The Time Zone.
+128         */
+129        public TimeZone getTimeZone() {
+130            return timeZone;
+131        }
+132    
+133        /**
+134         * Set the Time Zone to use when converting dates.
+135         *
+136         * @param timeZone The Time Zone.
+137         */
+138        public void setTimeZone(TimeZone timeZone) {
+139            this.timeZone = timeZone;
+140        }
+141    
+142        /**
+143         * Return the Locale for the <i>Converter</i>
+144         * (or <code>null</code> if none specified).
+145         *
+146         * @return The locale to use for conversion
+147         */
+148        public Locale getLocale() {
+149            return locale;
+150        }
+151    
+152        /**
+153         * Set the Locale for the <i>Converter</i>.
+154         *
+155         * @param locale The Locale.
+156         */
+157        public void setLocale(Locale locale) {
+158            this.locale = locale;
+159            setUseLocaleFormat(true);
+160        }
+161    
+162        /**
+163         * Set a date format pattern to use to convert
+164         * dates to/from a <code>java.lang.String</code>.
+165         *
+166         * @see SimpleDateFormat
+167         * @param pattern The format pattern.
+168         */
+169        public void setPattern(String pattern) {
+170            setPatterns(new String[] {pattern});
+171        }
+172    
+173        /**
+174         * Return the date format patterns used to convert
+175         * dates to/from a <code>java.lang.String</code>
+176         * (or <code>null</code> if none specified).
+177         *
+178         * @see SimpleDateFormat
+179         * @return Array of format patterns.
+180         */
+181        public String[] getPatterns() {
+182            return patterns; 
+183        }
+184    
+185        /**
+186         * Set the date format patterns to use to convert
+187         * dates to/from a <code>java.lang.String</code>.
+188         *
+189         * @see SimpleDateFormat
+190         * @param patterns Array of format patterns.
+191         */
+192        public void setPatterns(String[] patterns) {
+193            this.patterns = patterns;
+194            if (patterns != null && patterns.length > 1) {
+195                StringBuffer buffer = new StringBuffer();
+196                for (int i = 0; i < patterns.length; i++) {
+197                    if (i > 0) {
+198                        buffer.append(", ");
+199                    }
+200                    buffer.append(patterns[i]);
+201                }
+202                displayPatterns = buffer.toString();
+203            }
+204            setUseLocaleFormat(true);
+205        }
+206    
+207        // ------------------------------------------------------ Protected Methods
+208    
+209        /**
+210         * Convert an input Date/Calendar object into a String.
+211         * <p>
+212         * <b>N.B.</b>If the converter has been configured to with
+213         * one or more patterns (using <code>setPatterns()</code>), then
+214         * the first pattern will be used to format the date into a String.
+215         * Otherwise the default <code>DateFormat</code> for the default locale
+216         * (and <i>style</i> if configured) will be used.
+217         *
+218         * @param value The input value to be converted
+219         * @return the converted String value.
+220         * @throws Throwable if an error occurs converting to a String
+221         */
+222        protected String convertToString(Object value) throws Throwable {
+223    
+224            Date date = null;
+225            if (value instanceof Date) {
+226                date = (Date)value;
+227            } else if (value instanceof Calendar) {
+228                date = ((Calendar)value).getTime();
+229            } else if (value instanceof Long) {
+230                date = new Date(((Long)value).longValue());
+231            }
+232    
+233            String result = null;
+234            if (useLocaleFormat && date != null) {
+235                DateFormat format = null;
+236                if (patterns != null && patterns.length > 0) {
+237                    format = getFormat(patterns[0]);
+238                } else {
+239                    format = getFormat(locale, timeZone);
+240                }
+241                logFormat("Formatting", format);
+242                result = format.format(date);
+243                if (log().isDebugEnabled()) {
+244                    log().debug("    Converted  to String using format '" + result + "'");
+245                }
+246            } else {
+247                result = value.toString();
+248                if (log().isDebugEnabled()) {
+249                    log().debug("    Converted  to String using toString() '" + result + "'");
+250                 }
+251            }
+252            return result;
+253        }
+254    
+255        /**
+256         * Convert the input object into a Date object of the
+257         * specified type.
+258         * <p>
+259         * This method handles conversions between the following
+260         * types:
+261         * <ul>
+262         *     <li><code>java.util.Date</code></li>
+263         *     <li><code>java.util.Calendar</code></li>
+264         *     <li><code>java.sql.Date</code></li>
+265         *     <li><code>java.sql.Time</code></li>
+266         *     <li><code>java.sql.Timestamp</code></li>
+267         * </ul>
+268         *
+269         * It also handles conversion from a <code>String</code> to
+270         * any of the above types.
+271         * <p>
+272         *
+273         * For <code>String</code> conversion, if the converter has been configured
+274         * with one or more patterns (using <code>setPatterns()</code>), then
+275         * the conversion is attempted with each of the specified patterns.
+276         * Otherwise the default <code>DateFormat</code> for the default locale
+277         * (and <i>style</i> if configured) will be used.
+278         *
+279         * @param targetType Data type to which this value should be converted.
+280         * @param value The input value to be converted.
+281         * @return The converted value.
+282         * @throws Exception if conversion cannot be performed successfully
+283         */
+284        protected Object convertToType(Class targetType, Object value) throws Exception {
+285    
+286            Class sourceType = value.getClass();
+287    
+288            // Handle java.sql.Timestamp
+289            if (value instanceof java.sql.Timestamp) {
+290    
+291                // ---------------------- JDK 1.3 Fix ----------------------
+292                // N.B. Prior to JDK 1.4 the Timestamp's getTime() method
+293                //      didn't include the milliseconds. The following code
+294                //      ensures it works consistently accross JDK versions
+295                java.sql.Timestamp timestamp = (java.sql.Timestamp)value;
+296                long timeInMillis = ((timestamp.getTime() / 1000) * 1000);
+297                timeInMillis += timestamp.getNanos() / 1000000;
+298                // ---------------------- JDK 1.3 Fix ----------------------
+299                return toDate(targetType, timeInMillis);
+300            }
+301    
+302            // Handle Date (includes java.sql.Date & java.sql.Time)
+303            if (value instanceof Date) {
+304                Date date = (Date)value;
+305                return toDate(targetType, date.getTime());
+306            }
+307    
+308            // Handle Calendar
+309            if (value instanceof Calendar) {
+310                Calendar calendar = (Calendar)value;
+311                return toDate(targetType, calendar.getTime().getTime());
+312            }
+313    
+314            // Handle Long
+315            if (value instanceof Long) {
+316                Long longObj = (Long)value;
+317                return toDate(targetType, longObj.longValue());
+318            }
+319    
+320            // Convert all other types to String & handle
+321            String stringValue = value.toString().trim();
+322            if (stringValue.length() == 0) {
+323                return handleMissing(targetType);
+324            }
+325    
+326            // Parse the Date/Time
+327            if (useLocaleFormat) {
+328                Calendar calendar = null;
+329                if (patterns != null && patterns.length > 0) {
+330                    calendar = parse(sourceType, targetType, stringValue);
+331                } else {
+332                    DateFormat format = getFormat(locale, timeZone);
+333                    calendar = parse(sourceType, targetType, stringValue, format);
+334                }
+335                if (Calendar.class.isAssignableFrom(targetType)) {
+336                    return calendar;
+337                } else {
+338                    return toDate(targetType, calendar.getTime().getTime());
+339                }
+340            }
+341    
+342            // Default String conversion
+343            return toDate(targetType, stringValue);
+344    
+345        }
+346    
+347        /**
+348         * Convert a long value to the specified Date type for this
+349         * <i>Converter</i>.
+350         * <p>
+351         *
+352         * This method handles conversion to the following types:
+353         * <ul>
+354         *     <li><code>java.util.Date</code></li>
+355         *     <li><code>java.util.Calendar</code></li>
+356         *     <li><code>java.sql.Date</code></li>
+357         *     <li><code>java.sql.Time</code></li>
+358         *     <li><code>java.sql.Timestamp</code></li>
+359         * </ul>
+360         *
+361         * @param type The Date type to convert to
+362         * @param value The long value to convert.
+363         * @return The converted date value.
+364         */
+365        private Object toDate(Class type, long value) {
+366    
+367            // java.util.Date
+368            if (type.equals(Date.class)) {
+369                return new Date(value);
+370            }
+371    
+372            // java.sql.Date
+373            if (type.equals(java.sql.Date.class)) {
+374                return new java.sql.Date(value);
+375            }
+376    
+377            // java.sql.Time
+378            if (type.equals(java.sql.Time.class)) {
+379                return new java.sql.Time(value);
+380            }
+381    
+382            // java.sql.Timestamp
+383            if (type.equals(java.sql.Timestamp.class)) {
+384                return new java.sql.Timestamp(value);
+385            }
+386    
+387            // java.util.Calendar
+388            if (type.equals(Calendar.class)) {
+389                Calendar calendar = null;
+390                if (locale == null && timeZone == null) {
+391                    calendar = Calendar.getInstance();
+392                } else if (locale == null) {
+393                    calendar = Calendar.getInstance(timeZone);
+394                } else if (timeZone == null) {
+395                    calendar = Calendar.getInstance(locale);
+396                } else {
+397                    calendar = Calendar.getInstance(timeZone, locale);
+398                }
+399                calendar.setTime(new Date(value));
+400                calendar.setLenient(false);
+401                return calendar;
+402            }
+403    
+404            String msg = toString(getClass()) + " cannot handle conversion to '"
+405                       + toString(type) + "'";
+406            if (log().isWarnEnabled()) {
+407                log().warn("    " + msg);
+408            }
+409            throw new ConversionException(msg);
+410        }
+411    
+412        /**
+413         * Default String to Date conversion.
+414         * <p>
+415         * This method handles conversion from a String to the following types:
+416         * <ul>
+417         *     <li><code>java.sql.Date</code></li>
+418         *     <li><code>java.sql.Time</code></li>
+419         *     <li><code>java.sql.Timestamp</code></li>
+420         * </ul>
+421         * <p>
+422         * <strong>N.B.</strong> No default String conversion
+423         * mechanism is provided for <code>java.util.Date</code>
+424         * and <code>java.util.Calendar</code> type.
+425         *
+426         * @param type The Number type to convert to
+427         * @param value The String value to convert.
+428         * @return The converted Number value.
+429         */
+430        private Object toDate(Class type, String value) {
+431            // java.sql.Date
+432            if (type.equals(java.sql.Date.class)) {
+433                try {
+434                    return java.sql.Date.valueOf(value);
+435                } catch (IllegalArgumentException e) {
+436                    throw new ConversionException(
+437                            "String must be in JDBC format [yyyy-MM-dd] to create a java.sql.Date");
+438                }
+439            }
+440    
+441            // java.sql.Time
+442            if (type.equals(java.sql.Time.class)) {
+443                try {
+444                    return java.sql.Time.valueOf(value);
+445                } catch (IllegalArgumentException e) {
+446                    throw new ConversionException(
+447                            "String must be in JDBC format [HH:mm:ss] to create a java.sql.Time");
+448                }
+449            }
+450    
+451            // java.sql.Timestamp
+452            if (type.equals(java.sql.Timestamp.class)) {
+453                try {
+454                    return java.sql.Timestamp.valueOf(value);
+455                } catch (IllegalArgumentException e) {
+456                    throw new ConversionException(
+457                            "String must be in JDBC format [yyyy-MM-dd HH:mm:ss.fffffffff] " +
+458                            "to create a java.sql.Timestamp");
+459                }
+460            }
+461    
+462            String msg = toString(getClass()) + " does not support default String to '"
+463                       + toString(type) + "' conversion.";
+464            if (log().isWarnEnabled()) {
+465                log().warn("    " + msg);
+466                log().warn("    (N.B. Re-configure Converter or use alternative implementation)");
+467            }
+468            throw new ConversionException(msg);
+469        }
+470    
+471        /**
+472         * Return a <code>DateFormat<code> for the Locale.
+473         * @param locale The Locale to create the Format with (may be null)
+474         * @param timeZone The Time Zone create the Format with (may be null)
+475         *
+476         * @return A Date Format.
+477         */
+478        protected DateFormat getFormat(Locale locale, TimeZone timeZone) {
+479            DateFormat format = null;
+480            if (locale == null) {
+481                format = DateFormat.getDateInstance(DateFormat.SHORT);
+482            } else {
+483                format = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+484            }
+485            if (timeZone != null) {
+486                format.setTimeZone(timeZone);
+487            }
+488            return format;
+489        }
+490    
+491        /**
+492         * Create a date format for the specified pattern.
+493         *
+494         * @param pattern The date pattern
+495         * @return The DateFormat
+496         */
+497        private DateFormat getFormat(String pattern) {
+498            DateFormat format = new SimpleDateFormat(pattern);
+499            if (timeZone != null) {
+500                format.setTimeZone(timeZone);
+501            }
+502            return format;
+503        }
+504    
+505        /**
+506         * Parse a String date value using the set of patterns.
+507         *
+508         * @param sourceType The type of the value being converted
+509         * @param targetType The type to convert the value to.
+510         * @param value The String date value.
+511         *
+512         * @return The converted Date object.
+513         * @throws Exception if an error occurs parsing the date.
+514         */
+515        private Calendar parse(Class sourceType, Class targetType, String value) throws Exception {
+516            Exception firstEx = null;
+517            for (int i = 0; i < patterns.length; i++) {
+518                try {
+519                    DateFormat format = getFormat(patterns[i]);
+520                    Calendar calendar = parse(sourceType, targetType, value, format);
+521                    return calendar;
+522                } catch (Exception ex) {
+523                    if (firstEx == null) {
+524                        firstEx = ex;
+525                    }
+526                }
+527            }
+528            if (patterns.length > 1) {
+529                throw new ConversionException("Error converting '" + toString(sourceType) + "' to '" + toString(targetType)
+530                        + "' using  patterns '" + displayPatterns + "'");
+531            } else {
+532                throw firstEx;
+533            }
+534        }
+535    
+536        /**
+537         * Parse a String into a <code>Calendar</code> object
+538         * using the specified <code>DateFormat</code>.
+539         *
+540         * @param sourceType The type of the value being converted
+541         * @param targetType The type to convert the value to
+542         * @param value The String date value.
+543         * @param format The DateFormat to parse the String value.
+544         *
+545         * @return The converted Calendar object.
+546         * @throws ConversionException if the String cannot be converted.
+547         */
+548        private Calendar parse(Class sourceType, Class targetType, String value, DateFormat format) {
+549            logFormat("Parsing", format);
+550            format.setLenient(false);
+551            ParsePosition pos = new ParsePosition(0);
+552            Date parsedDate = format.parse(value, pos); // ignore the result (use the Calendar)
+553            if (pos.getErrorIndex() >= 0 || pos.getIndex() != value.length() || parsedDate == null) {
+554                String msg = "Error converting '" + toString(sourceType) + "' to '" + toString(targetType) + "'";
+555                if (format instanceof SimpleDateFormat) {
+556                    msg += " using pattern '" + ((SimpleDateFormat)format).toPattern() + "'";
+557                }
+558                if (log().isDebugEnabled()) {
+559                    log().debug("    " + msg);
+560                }
+561                throw new ConversionException(msg);
+562            }
+563            Calendar calendar = format.getCalendar();
+564            return calendar;
+565        }
+566    
+567        /**
+568         * Provide a String representation of this date/time converter.
+569         *
+570         * @return A String representation of this date/time converter
+571         */
+572        public String toString() {
+573            StringBuffer buffer = new StringBuffer();
+574            buffer.append(toString(getClass()));
+575            buffer.append("[UseDefault=");
+576            buffer.append(isUseDefault());
+577            buffer.append(", UseLocaleFormat=");
+578            buffer.append(useLocaleFormat);
+579            if (displayPatterns != null) {
+580                buffer.append(", Patterns={");
+581                buffer.append(displayPatterns);
+582                buffer.append('}');
+583            }
+584            if (locale != null) {
+585                buffer.append(", Locale=");
+586                buffer.append(locale);
+587            }
+588            if (timeZone != null) {
+589                buffer.append(", TimeZone=");
+590                buffer.append(timeZone);
+591            }
+592            buffer.append(']');
+593            return buffer.toString();
+594        }
+595    
+596        /**
+597         * Log the <code>DateFormat<code> creation.
+598         * @param action The action the format is being used for
+599         * @param format The Date format
+600         */
+601        private void logFormat(String action, DateFormat format) {
+602            if (log().isDebugEnabled()) {
+603                StringBuffer buffer = new StringBuffer(45);
+604                buffer.append("    ");
+605                buffer.append(action);
+606                buffer.append(" with Format");
+607                if (format instanceof SimpleDateFormat) {
+608                    buffer.append("[");
+609                    buffer.append(((SimpleDateFormat)format).toPattern());
+610                    buffer.append("]");
+611                }
+612                buffer.append(" for ");
+613                if (locale == null) {
+614                    buffer.append("default locale");
+615                } else {
+616                    buffer.append("locale[");
+617                    buffer.append(locale);
+618                    buffer.append("]");
+619                }
+620                if (timeZone != null) {
+621                    buffer.append(", TimeZone[");
+622                    buffer.append(timeZone);
+623                    buffer.append("]");
+624                }
+625                log().debug(buffer.toString());
+626            }
+627        }
+628    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleArrayConverter.html new file mode 100644 index 0000000..7bacb01 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleArrayConverter.html @@ -0,0 +1,212 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of double.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class DoubleArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+046         * a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public DoubleArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public DoubleArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final double[] MODEL = new double[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         * @exception ConversionException if conversion cannot be performed
+090         *  successfully
+091         */
+092        public Object convert(Class type, Object value) {
+093    
+094            // Deal with a null value
+095            if (value == null) {
+096                if (useDefault) {
+097                    return (defaultValue);
+098                } else {
+099                    throw new ConversionException("No value specified");
+100                }
+101            }
+102    
+103            // Deal with the no-conversion-needed case
+104            if (MODEL.getClass() == value.getClass()) {
+105                return (value);
+106            }
+107    
+108            // Deal with input value as a String array
+109            if (strings.getClass() == value.getClass()) {
+110                try {
+111                    String[] values = (String[]) value;
+112                    double[] results = new double[values.length];
+113                    for (int i = 0; i < values.length; i++) {
+114                        results[i] = Double.parseDouble(values[i]);
+115                    }
+116                    return (results);
+117                } catch (Exception e) {
+118                    if (useDefault) {
+119                        return (defaultValue);
+120                    } else {
+121                        throw new ConversionException(value.toString(), e);
+122                    }
+123                }
+124            }
+125    
+126            // Parse the input value as a String into elements
+127            // and convert to the appropriate type
+128            try {
+129                List list = parseElements(value.toString());
+130                double[] results = new double[list.size()];
+131                for (int i = 0; i < results.length; i++) {
+132                    results[i] = Double.parseDouble((String) list.get(i));
+133                }
+134                return (results);
+135            } catch (Exception e) {
+136                if (useDefault) {
+137                    return (defaultValue);
+138                } else {
+139                    throw new ConversionException(value.toString(), e);
+140                }
+141            }
+142    
+143        }
+144    
+145    
+146    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleConverter.html new file mode 100644 index 0000000..754f487 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/DoubleConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link NumberConverter} implementation that handles conversion to
+021     * and from <b>java.lang.Double</b> objects.
+022     * <p>
+023     * This implementation can be configured to handle conversion either
+024     * by using Double's default String conversion, or by using a Locale's pattern
+025     * or by specifying a format pattern. See the {@link NumberConverter}
+026     * documentation for further details.
+027     * <p>
+028     * Can be configured to either return a <i>default value</i> or throw a
+029     * <code>ConversionException</code> if a conversion error occurs.
+030     *
+031     * @author Craig R. McClanahan
+032     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+033     * @since 1.3
+034     */
+035    public final class DoubleConverter extends NumberConverter {
+036    
+037        /**
+038         * Construct a <b>java.lang.Double</b> <i>Converter</i> that throws
+039         * a <code>ConversionException</code> if an error occurs.
+040         */
+041        public DoubleConverter() {
+042            super(true);
+043        }
+044    
+045        /**
+046         * Construct a <b>java.lang.Double</b> <i>Converter</i> that returns
+047         * a default value if an error occurs.
+048         *
+049         * @param defaultValue The default value to be returned
+050         * if the value to be converted is missing or an error
+051         * occurs converting the value.
+052         */
+053        public DoubleConverter(Object defaultValue) {
+054            super(true, defaultValue);
+055        }
+056    
+057        /**
+058         * Return the default type this <code>Converter</code> handles.
+059         *
+060         * @return The default type this <code>Converter</code> handles.
+061         * @since 1.8.0
+062         */
+063        protected Class getDefaultType() {
+064            return Double.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FileConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FileConverter.html new file mode 100644 index 0000000..13ce530 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FileConverter.html @@ -0,0 +1,142 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.io.File;
+020    
+021    /**
+022     * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion
+023     * to and from <b>java.io.File</b> objects.
+024     * <p>
+025     * Can be configured to either return a <i>default value</i> or throw a
+026     * <code>ConversionException</code> if a conversion error occurs.
+027     *
+028     * @author James Strachan
+029     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+030     * @since 1.6
+031     */
+032    public final class FileConverter extends AbstractConverter {
+033    
+034        /**
+035         * Construct a <b>java.io.File</b> <i>Converter</i> that throws
+036         * a <code>ConversionException</code> if an error occurs.
+037         */
+038        public FileConverter() {
+039            super();
+040        }
+041    
+042        /**
+043         * Construct a <b>java.io.File</b> <i>Converter</i> that returns
+044         * a default value if an error occurs.
+045         *
+046         * @param defaultValue The default value to be returned
+047         * if the value to be converted is missing or an error
+048         * occurs converting the value.
+049         */
+050        public FileConverter(Object defaultValue) {
+051            super(defaultValue);
+052        }
+053    
+054        /**
+055         * Return the default type this <code>Converter</code> handles.
+056         *
+057         * @return The default type this <code>Converter</code> handles.
+058         * @since 1.8.0
+059         */
+060        protected Class getDefaultType() {
+061            return File.class;
+062        }
+063    
+064        /**
+065         * <p>Convert the input object into a java.io.File.</p>
+066         *
+067         * @param type Data type to which this value should be converted.
+068         * @param value The input value to be converted.
+069         * @return The converted value.
+070         * @throws Throwable if an error occurs converting to the specified type
+071         * @since 1.8.0
+072         */
+073        protected Object convertToType(Class type, Object value) throws Throwable {
+074            return new File(value.toString());
+075        }
+076    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatArrayConverter.html new file mode 100644 index 0000000..31264f2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatArrayConverter.html @@ -0,0 +1,213 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of float.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class FloatArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+046         * a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public FloatArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public FloatArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final float[] MODEL = new float[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         *
+090         * @exception ConversionException if conversion cannot be performed
+091         *  successfully
+092         */
+093        public Object convert(Class type, Object value) {
+094    
+095            // Deal with a null value
+096            if (value == null) {
+097                if (useDefault) {
+098                    return (defaultValue);
+099                } else {
+100                    throw new ConversionException("No value specified");
+101                }
+102            }
+103    
+104            // Deal with the no-conversion-needed case
+105            if (MODEL.getClass() == value.getClass()) {
+106                return (value);
+107            }
+108    
+109            // Deal with input value as a String array
+110            if (strings.getClass() == value.getClass()) {
+111                try {
+112                    String[] values = (String[]) value;
+113                    float[] results = new float[values.length];
+114                    for (int i = 0; i < values.length; i++) {
+115                        results[i] = Float.parseFloat(values[i]);
+116                    }
+117                    return (results);
+118                } catch (Exception e) {
+119                    if (useDefault) {
+120                        return (defaultValue);
+121                    } else {
+122                        throw new ConversionException(value.toString(), e);
+123                    }
+124                }
+125            }
+126    
+127            // Parse the input value as a String into elements
+128            // and convert to the appropriate type
+129            try {
+130                List list = parseElements(value.toString());
+131                float[] results = new float[list.size()];
+132                for (int i = 0; i < results.length; i++) {
+133                    results[i] = Float.parseFloat((String) list.get(i));
+134                }
+135                return (results);
+136            } catch (Exception e) {
+137                if (useDefault) {
+138                    return (defaultValue);
+139                } else {
+140                    throw new ConversionException(value.toString(), e);
+141                }
+142            }
+143    
+144        }
+145    
+146    
+147    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatConverter.html new file mode 100644 index 0000000..c14d3cd --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/FloatConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link NumberConverter} implementation that handles conversion to
+021     * and from <b>java.lang.Float</b> objects.
+022     * <p>
+023     * This implementation can be configured to handle conversion either
+024     * by using Float's default String conversion, or by using a Locale's pattern
+025     * or by specifying a format pattern. See the {@link NumberConverter}
+026     * documentation for further details.
+027     * <p>
+028     * Can be configured to either return a <i>default value</i> or throw a
+029     * <code>ConversionException</code> if a conversion error occurs.
+030     *
+031     * @author Craig R. McClanahan
+032     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+033     * @since 1.3
+034     */
+035    public final class FloatConverter extends NumberConverter {
+036    
+037        /**
+038         * Construct a <b>java.lang.Float</b> <i>Converter</i> that throws
+039         * a <code>ConversionException</code> if an error occurs.
+040         */
+041        public FloatConverter() {
+042            super(true);
+043        }
+044    
+045        /**
+046         * Construct a <b>java.lang.Float</b> <i>Converter</i> that returns
+047         * a default value if an error occurs.
+048         *
+049         * @param defaultValue The default value to be returned
+050         * if the value to be converted is missing or an error
+051         * occurs converting the value.
+052         */
+053        public FloatConverter(Object defaultValue) {
+054            super(true, defaultValue);
+055        }
+056    
+057        /**
+058         * Return the default type this <code>Converter</code> handles.
+059         *
+060         * @return The default type this <code>Converter</code> handles.
+061         * @since 1.8.0
+062         */
+063        protected Class getDefaultType() {
+064            return Float.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerArrayConverter.html new file mode 100644 index 0000000..2905b7b --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerArrayConverter.html @@ -0,0 +1,213 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of int.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class IntegerArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+046         * a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public IntegerArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public IntegerArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final int[] MODEL = new int[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         *
+090         * @exception ConversionException if conversion cannot be performed
+091         *  successfully
+092         */
+093        public Object convert(Class type, Object value) {
+094    
+095            // Deal with a null value
+096            if (value == null) {
+097                if (useDefault) {
+098                    return (defaultValue);
+099                } else {
+100                    throw new ConversionException("No value specified");
+101                }
+102            }
+103    
+104            // Deal with the no-conversion-needed case
+105            if (MODEL.getClass() == value.getClass()) {
+106                return (value);
+107            }
+108    
+109            // Deal with input value as a String array
+110            if (strings.getClass() == value.getClass()) {
+111                try {
+112                    String[] values = (String[]) value;
+113                    int[] results = new int[values.length];
+114                    for (int i = 0; i < values.length; i++) {
+115                        results[i] = Integer.parseInt(values[i]);
+116                    }
+117                    return (results);
+118                } catch (Exception e) {
+119                    if (useDefault) {
+120                        return (defaultValue);
+121                    } else {
+122                        throw new ConversionException(value.toString(), e);
+123                    }
+124                }
+125            }
+126    
+127            // Parse the input value as a String into elements
+128            // and convert to the appropriate type
+129            try {
+130                List list = parseElements(value.toString());
+131                int[] results = new int[list.size()];
+132                for (int i = 0; i < results.length; i++) {
+133                    results[i] = Integer.parseInt((String) list.get(i));
+134                }
+135                return (results);
+136            } catch (Exception e) {
+137                if (useDefault) {
+138                    return (defaultValue);
+139                } else {
+140                    throw new ConversionException(value.toString(), e);
+141                }
+142            }
+143    
+144        }
+145    
+146    
+147    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerConverter.html new file mode 100644 index 0000000..8cf064c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/IntegerConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link NumberConverter} implementation that handles conversion to
+021     * and from <b>java.lang.Integer</b> objects.
+022     * <p>
+023     * This implementation can be configured to handle conversion either
+024     * by using Integer's default String conversion, or by using a Locale's pattern
+025     * or by specifying a format pattern. See the {@link NumberConverter}
+026     * documentation for further details.
+027     * <p>
+028     * Can be configured to either return a <i>default value</i> or throw a
+029     * <code>ConversionException</code> if a conversion error occurs.
+030     *
+031     * @author Craig R. McClanahan
+032     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+033     * @since 1.3
+034     */
+035    public final class IntegerConverter extends NumberConverter {
+036    
+037        /**
+038         * Construct a <b>java.lang.Integer</b> <i>Converter</i> that throws
+039         * a <code>ConversionException</code> if an error occurs.
+040         */
+041        public IntegerConverter() {
+042            super(false);
+043        }
+044    
+045        /**
+046         * Construct a <b>java.lang.Integer</b> <i>Converter</i> that returns
+047         * a default value if an error occurs.
+048         *
+049         * @param defaultValue The default value to be returned
+050         * if the value to be converted is missing or an error
+051         * occurs converting the value.
+052         */
+053        public IntegerConverter(Object defaultValue) {
+054            super(false, defaultValue);
+055        }
+056    
+057        /**
+058         * Return the default type this <code>Converter</code> handles.
+059         *
+060         * @return The default type this <code>Converter</code> handles.
+061         * @since 1.8.0
+062         */
+063        protected Class getDefaultType() {
+064            return Integer.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongArrayConverter.html new file mode 100644 index 0000000..812b99a --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongArrayConverter.html @@ -0,0 +1,213 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of long.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class LongArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+046         * a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public LongArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public LongArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final long[] MODEL = new long[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         *
+090         * @exception ConversionException if conversion cannot be performed
+091         *  successfully
+092         */
+093        public Object convert(Class type, Object value) {
+094    
+095            // Deal with a null value
+096            if (value == null) {
+097                if (useDefault) {
+098                    return (defaultValue);
+099                } else {
+100                    throw new ConversionException("No value specified");
+101                }
+102            }
+103    
+104            // Deal with the no-conversion-needed case
+105            if (MODEL.getClass() == value.getClass()) {
+106                return (value);
+107            }
+108    
+109            // Deal with input value as a String array
+110            if (strings.getClass() == value.getClass()) {
+111                try {
+112                    String[] values = (String[]) value;
+113                    long[] results = new long[values.length];
+114                    for (int i = 0; i < values.length; i++) {
+115                        results[i] = Long.parseLong(values[i]);
+116                    }
+117                    return (results);
+118                } catch (Exception e) {
+119                    if (useDefault) {
+120                        return (defaultValue);
+121                    } else {
+122                        throw new ConversionException(value.toString(), e);
+123                    }
+124                }
+125            }
+126    
+127            // Parse the input value as a String into elements
+128            // and convert to the appropriate type
+129            try {
+130                List list = parseElements(value.toString());
+131                long[] results = new long[list.size()];
+132                for (int i = 0; i < results.length; i++) {
+133                    results[i] = Long.parseLong((String) list.get(i));
+134                }
+135                return (results);
+136            } catch (Exception e) {
+137                if (useDefault) {
+138                    return (defaultValue);
+139                } else {
+140                    throw new ConversionException(value.toString(), e);
+141                }
+142            }
+143    
+144        }
+145    
+146    
+147    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongConverter.html new file mode 100644 index 0000000..5da3246 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/LongConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link NumberConverter} implementation that handles conversion to
+021     * and from <b>java.lang.Long</b> objects.
+022     * <p>
+023     * This implementation can be configured to handle conversion either
+024     * by using Long's default String conversion, or by using a Locale's pattern
+025     * or by specifying a format pattern. See the {@link NumberConverter}
+026     * documentation for further details.
+027     * <p>
+028     * Can be configured to either return a <i>default value</i> or throw a
+029     * <code>ConversionException</code> if a conversion error occurs.
+030     *
+031     * @author Craig R. McClanahan
+032     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+033     * @since 1.3
+034     */
+035    public final class LongConverter extends NumberConverter {
+036    
+037        /**
+038         * Construct a <b>java.lang.Long</b> <i>Converter</i> that throws
+039         * a <code>ConversionException</code> if an error occurs.
+040         */
+041        public LongConverter() {
+042            super(false);
+043        }
+044    
+045        /**
+046         * Construct a <b>java.lang.Long</b> <i>Converter</i> that returns
+047         * a default value if an error occurs.
+048         *
+049         * @param defaultValue The default value to be returned
+050         * if the value to be converted is missing or an error
+051         * occurs converting the value.
+052         */
+053        public LongConverter(Object defaultValue) {
+054            super(false, defaultValue);
+055        }
+056    
+057        /**
+058         * Return the default type this <code>Converter</code> handles.
+059         *
+060         * @return The default type this <code>Converter</code> handles.
+061         * @since 1.8.0
+062         */
+063        protected Class getDefaultType() {
+064            return Long.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/NumberConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/NumberConverter.html new file mode 100644 index 0000000..a832af8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/NumberConverter.html @@ -0,0 +1,623 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.util.Calendar;
+020    import java.util.Date;
+021    import java.util.Locale;
+022    import java.math.BigDecimal;
+023    import java.math.BigInteger;
+024    import java.text.NumberFormat;
+025    import java.text.DecimalFormat;
+026    import java.text.DecimalFormatSymbols;
+027    import java.text.ParsePosition;
+028    
+029    import org.apache.commons.beanutils.ConversionException;
+030    
+031    /**
+032     * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion
+033     * to and from <b>java.lang.Number</b> objects.
+034     * <p>
+035     * This implementation handles conversion for the following
+036     * <code>java.lang.Number</code> types.
+037     * <ul>
+038     *     <li><code>java.lang.Byte</code></li>
+039     *     <li><code>java.lang.Short</code></li>
+040     *     <li><code>java.lang.Integer</code></li>
+041     *     <li><code>java.lang.Long</code></li>
+042     *     <li><code>java.lang.Float</code></li>
+043     *     <li><code>java.lang.Double</code></li>
+044     *     <li><code>java.math.BigDecimal</code></li>
+045     *     <li><code>java.math.BigInteger</code></li>
+046     * </ul>
+047     *
+048     * <h3>String Conversions (to and from)</h3>
+049     * This class provides a number of ways in which number
+050     * conversions to/from Strings can be achieved:
+051     * <ul>
+052     *    <li>Using the default format for the default Locale, configure using:</li>
+053     *        <ul>
+054     *           <li><code>setUseLocaleFormat(true)</code></li>
+055     *        </ul>
+056     *    <li>Using the default format for a specified Locale, configure using:</li>
+057     *        <ul>
+058     *           <li><code>setLocale(Locale)</code></li>
+059     *        </ul>
+060     *    <li>Using a specified pattern for the default Locale, configure using:</li>
+061     *        <ul>
+062     *           <li><code>setPattern(String)</code></li>
+063     *        </ul>
+064     *    <li>Using a specified pattern for a specified Locale, configure using:</li>
+065     *        <ul>
+066     *           <li><code>setPattern(String)</code></li>
+067     *           <li><code>setLocale(Locale)</code></li>
+068     *        </ul>
+069     *    <li>If none of the above are configured the
+070     *        <code>toNumber(String)</code> method is used to convert
+071     *        from String to Number and the Number's
+072     *        <code>toString()</code> method used to convert from
+073     *        Number to String.</li>
+074     * </ul>
+075     *
+076     * <p>
+077     * <strong>N.B.</strong>Patterns can only be specified used the <i>standard</i>
+078     * pattern characters and NOT in <i>localized</i> form (see <code>java.text.SimpleDateFormat</code>).
+079     * For example to cater for number styles used in Germany such as <code>0.000,00</code> the pattern
+080     * is specified in the normal form <code>0,000.00</code> and the locale set to <code>Locale.GERMANY</code>.
+081     *
+082     * @version $Revision: 745081 $ $Date: 2009-02-17 14:05:20 +0000 (Tue, 17 Feb 2009) $
+083     * @since 1.8.0
+084     */
+085    public abstract class NumberConverter extends AbstractConverter {
+086    
+087        private static final Integer ZERO = new Integer(0);
+088        private static final Integer ONE  = new Integer(1);
+089    
+090        private String pattern;
+091        private boolean allowDecimals;
+092        private boolean useLocaleFormat;
+093        private Locale locale;
+094    
+095        // ----------------------------------------------------------- Constructors
+096    
+097        /**
+098         * Construct a <b>java.lang.Number</b> <i>Converter</i>
+099         * that throws a <code>ConversionException</code> if a error occurs.
+100         *
+101         * @param allowDecimals Indicates whether decimals are allowed
+102         */
+103        public NumberConverter(boolean allowDecimals) {
+104            super();
+105            this.allowDecimals = allowDecimals;
+106        }
+107    
+108        /**
+109         * Construct a <code>java.lang.Number</code> <i>Converter</i> that returns
+110         * a default value if an error occurs.
+111         *
+112         * @param allowDecimals Indicates whether decimals are allowed
+113         * @param defaultValue The default value to be returned
+114         */
+115        public NumberConverter(boolean allowDecimals, Object defaultValue) {
+116            super();
+117            this.allowDecimals = allowDecimals;
+118            setDefaultValue(defaultValue);
+119        }
+120    
+121        // --------------------------------------------------------- Public Methods
+122    
+123        /**
+124         * Return whether decimals are allowed in the number.
+125         *
+126         * @return Whether decimals are allowed in the number
+127         */
+128        public boolean isAllowDecimals() {
+129            return allowDecimals;
+130        }
+131    
+132        /**
+133         * Set whether a format should be used to convert
+134         * the Number.
+135         *
+136         * @param useLocaleFormat <code>true</code> if a number format
+137         * should be used.
+138         */
+139        public void setUseLocaleFormat(boolean useLocaleFormat) {
+140            this.useLocaleFormat = useLocaleFormat;
+141        }
+142    
+143        /**
+144         * Return the number format pattern used to convert
+145         * Numbers to/from a <code>java.lang.String</code>
+146         * (or <code>null</code> if none specified).
+147         * <p>
+148         * See <code>java.text.SimpleDateFormat</code> for details
+149         * of how to specify the pattern.
+150         *
+151         * @return The format pattern.
+152         */
+153        public String getPattern() {
+154            return pattern;
+155        }
+156    
+157        /**
+158         * Set a number format pattern to use to convert
+159         * Numbers to/from a <code>java.lang.String</code>.
+160         * <p>
+161         * See <code>java.text.SimpleDateFormat</code> for details
+162         * of how to specify the pattern.
+163         *
+164         * @param pattern The format pattern.
+165         */
+166        public void setPattern(String pattern) {
+167            this.pattern = pattern;
+168            setUseLocaleFormat(true);
+169        }
+170    
+171        /**
+172         * Return the Locale for the <i>Converter</i>
+173         * (or <code>null</code> if none specified).
+174         *
+175         * @return The locale to use for conversion
+176         */
+177        public Locale getLocale() {
+178            return locale;
+179        }
+180    
+181        /**
+182         * Set the Locale for the <i>Converter</i>.
+183         *
+184         * @param locale The locale to use for conversion
+185         */
+186        public void setLocale(Locale locale) {
+187            this.locale = locale;
+188            setUseLocaleFormat(true);
+189        }
+190    
+191        // ------------------------------------------------------ Protected Methods
+192    
+193        /**
+194         * Convert an input Number object into a String.
+195         *
+196         * @param value The input value to be converted
+197         * @return the converted String value.
+198         * @throws Throwable if an error occurs converting to a String
+199         */
+200        protected String convertToString(Object value) throws Throwable {
+201    
+202            String result = null;
+203            if (useLocaleFormat && value instanceof Number) {
+204                NumberFormat format = getFormat();
+205                format.setGroupingUsed(false);
+206                result = format.format(value);
+207                if (log().isDebugEnabled()) {
+208                    log().debug("    Converted  to String using format '" + result + "'");
+209                }
+210    
+211            } else {
+212                result = value.toString();
+213                if (log().isDebugEnabled()) {
+214                    log().debug("    Converted  to String using toString() '" + result + "'");
+215                }
+216            }
+217            return result;
+218    
+219        }
+220    
+221        /**
+222         * Convert the input object into a Number object of the
+223         * specified type.
+224         *
+225         * @param targetType Data type to which this value should be converted.
+226         * @param value The input value to be converted.
+227         * @return The converted value.
+228         * @throws Throwable if an error occurs converting to the specified type
+229         */
+230        protected Object convertToType(Class targetType, Object value) throws Throwable {
+231    
+232            Class sourceType = value.getClass();
+233            // Handle Number
+234            if (value instanceof Number) {
+235                return toNumber(sourceType, targetType, (Number)value);
+236            }
+237    
+238            // Handle Boolean
+239            if (value instanceof Boolean) {
+240                return toNumber(sourceType, targetType, ((Boolean)value).booleanValue() ? ONE : ZERO);
+241            }
+242    
+243            // Handle Date --> Long
+244            if (value instanceof Date && Long.class.equals(targetType)) {
+245                return new Long(((Date)value).getTime());
+246            }
+247    
+248            // Handle Calendar --> Long
+249            if (value instanceof Calendar  && Long.class.equals(targetType)) {
+250                return new Long(((Calendar)value).getTime().getTime());
+251            }
+252    
+253            // Convert all other types to String & handle
+254            String stringValue = value.toString().trim();
+255            if (stringValue.length() == 0) {
+256                return handleMissing(targetType);
+257            }
+258    
+259            // Convert/Parse a String
+260            Number number = null;
+261            if (useLocaleFormat) {
+262                NumberFormat format = getFormat();
+263                number = parse(sourceType, targetType, stringValue, format);
+264            } else {
+265                if (log().isDebugEnabled()) {
+266                    log().debug("    No NumberFormat, using default conversion");
+267                }
+268                number = toNumber(sourceType, targetType, stringValue);
+269            }
+270    
+271            // Ensure the correct number type is returned
+272            return toNumber(sourceType, targetType, number);
+273    
+274        }
+275    
+276        /**
+277         * Convert any Number object to the specified type for this
+278         * <i>Converter</i>.
+279         * <p>
+280         * This method handles conversion to the following types:
+281         * <ul>
+282         *     <li><code>java.lang.Byte</code></li>
+283         *     <li><code>java.lang.Short</code></li>
+284         *     <li><code>java.lang.Integer</code></li>
+285         *     <li><code>java.lang.Long</code></li>
+286         *     <li><code>java.lang.Float</code></li>
+287         *     <li><code>java.lang.Double</code></li>
+288         *     <li><code>java.math.BigDecimal</code></li>
+289         *     <li><code>java.math.BigInteger</code></li>
+290         * </ul>
+291         * @param sourceType The type being converted from
+292         * @param targetType The Number type to convert to
+293         * @param value The Number to convert.
+294         *
+295         * @return The converted value.
+296         */
+297        private Number toNumber(Class sourceType, Class targetType, Number value) {
+298    
+299            // Correct Number type already
+300            if (targetType.equals(value.getClass())) {
+301                return value;
+302            }
+303    
+304            // Byte
+305            if (targetType.equals(Byte.class)) {
+306                long longValue = value.longValue();
+307                if (longValue > Byte.MAX_VALUE) {
+308                    throw new ConversionException(toString(sourceType) + " value '" + value
+309                            + "' is too large for " + toString(targetType));
+310                }
+311                if (longValue < Byte.MIN_VALUE) {
+312                    throw new ConversionException(toString(sourceType) + " value '" + value
+313                            + "' is too small " + toString(targetType));
+314                }
+315                return new Byte(value.byteValue());
+316            }
+317    
+318            // Short
+319            if (targetType.equals(Short.class)) {
+320                long longValue = value.longValue();
+321                if (longValue > Short.MAX_VALUE) {
+322                    throw new ConversionException(toString(sourceType) + " value '" + value
+323                            + "' is too large for " + toString(targetType));
+324                }
+325                if (longValue < Short.MIN_VALUE) {
+326                    throw new ConversionException(toString(sourceType) + " value '" + value
+327                            + "' is too small " + toString(targetType));
+328                }
+329                return new Short(value.shortValue());
+330            }
+331    
+332            // Integer
+333            if (targetType.equals(Integer.class)) {
+334                long longValue = value.longValue();
+335                if (longValue > Integer.MAX_VALUE) {
+336                    throw new ConversionException(toString(sourceType) + " value '" + value
+337                            + "' is too large for " + toString(targetType));
+338                }
+339                if (longValue < Integer.MIN_VALUE) {
+340                    throw new ConversionException(toString(sourceType) + " value '" + value
+341                            + "' is too small " + toString(targetType));
+342                }
+343                return new Integer(value.intValue());
+344            }
+345    
+346            // Long
+347            if (targetType.equals(Long.class)) {
+348                return new Long(value.longValue());
+349            }
+350    
+351            // Float
+352            if (targetType.equals(Float.class)) {
+353                if (value.doubleValue() > Float.MAX_VALUE) {
+354                    throw new ConversionException(toString(sourceType) + " value '" + value
+355                            + "' is too large for " + toString(targetType));
+356                }
+357                return new Float(value.floatValue());
+358            }
+359    
+360            // Double
+361            if (targetType.equals(Double.class)) {
+362                return new Double(value.doubleValue());
+363            }
+364    
+365            // BigDecimal
+366            if (targetType.equals(BigDecimal.class)) {
+367                if (value instanceof Float || value instanceof Double) {
+368                    return new BigDecimal(value.toString());
+369                } else if (value instanceof BigInteger) {
+370                    return new BigDecimal((BigInteger)value);
+371                } else {
+372                    return BigDecimal.valueOf(value.longValue());
+373                }
+374            }
+375    
+376            // BigInteger
+377            if (targetType.equals(BigInteger.class)) {
+378                if (value instanceof BigDecimal) {
+379                    return ((BigDecimal)value).toBigInteger();
+380                } else {
+381                    return BigInteger.valueOf(value.longValue());
+382                }
+383            }
+384    
+385            String msg = toString(getClass()) + " cannot handle conversion to '"
+386                       + toString(targetType) + "'";
+387            if (log().isWarnEnabled()) {
+388                log().warn("    " + msg);
+389            }
+390            throw new ConversionException(msg);
+391    
+392        }
+393    
+394        /**
+395         * Default String to Number conversion.
+396         * <p>
+397         * This method handles conversion from a String to the following types:
+398         * <ul>
+399         *     <li><code>java.lang.Byte</code></li>
+400         *     <li><code>java.lang.Short</code></li>
+401         *     <li><code>java.lang.Integer</code></li>
+402         *     <li><code>java.lang.Long</code></li>
+403         *     <li><code>java.lang.Float</code></li>
+404         *     <li><code>java.lang.Double</code></li>
+405         *     <li><code>java.math.BigDecimal</code></li>
+406         *     <li><code>java.math.BigInteger</code></li>
+407         * </ul>
+408         * @param sourceType The type being converted from
+409         * @param targetType The Number type to convert to
+410         * @param value The String value to convert.
+411         *
+412         * @return The converted Number value.
+413         */
+414        private Number toNumber(Class sourceType, Class targetType, String value) {
+415    
+416            // Byte
+417            if (targetType.equals(Byte.class)) {
+418                return new Byte(value);
+419            }
+420    
+421            // Short
+422            if (targetType.equals(Short.class)) {
+423                return new Short(value);
+424            }
+425    
+426            // Integer
+427            if (targetType.equals(Integer.class)) {
+428                return new Integer(value);
+429            }
+430    
+431            // Long
+432            if (targetType.equals(Long.class)) {
+433                return new Long(value);
+434            }
+435    
+436            // Float
+437            if (targetType.equals(Float.class)) {
+438                return new Float(value);
+439            }
+440    
+441            // Double
+442            if (targetType.equals(Double.class)) {
+443                return new Double(value);
+444            }
+445    
+446            // BigDecimal
+447            if (targetType.equals(BigDecimal.class)) {
+448                return new BigDecimal(value);
+449            }
+450    
+451            // BigInteger
+452            if (targetType.equals(BigInteger.class)) {
+453                return new BigInteger(value);
+454            }
+455    
+456            String msg = toString(getClass()) + " cannot handle conversion from '" +
+457                         toString(sourceType) + "' to '" + toString(targetType) + "'";
+458            if (log().isWarnEnabled()) {
+459                log().warn("    " + msg);
+460            }
+461            throw new ConversionException(msg);
+462        }
+463    
+464        /**
+465         * Provide a String representation of this number converter.
+466         *
+467         * @return A String representation of this number converter
+468         */
+469        public String toString() {
+470            StringBuffer buffer = new StringBuffer();
+471            buffer.append(toString(getClass()));
+472            buffer.append("[UseDefault=");
+473            buffer.append(isUseDefault());
+474            buffer.append(", UseLocaleFormat=");
+475            buffer.append(useLocaleFormat);
+476            if (pattern != null) {
+477                buffer.append(", Pattern=");
+478                buffer.append(pattern);
+479            }
+480            if (locale != null) {
+481                buffer.append(", Locale=");
+482                buffer.append(locale);
+483            }
+484            buffer.append(']');
+485            return buffer.toString();
+486        }
+487    
+488        /**
+489         * Return a NumberFormat to use for Conversion.
+490         *
+491         * @return The NumberFormat.
+492         */
+493        private NumberFormat getFormat() {
+494            NumberFormat format = null;
+495            if (pattern != null) {
+496                if (locale == null) {
+497                    if (log().isDebugEnabled()) {
+498                        log().debug("    Using pattern '" + pattern + "'");
+499                    }
+500                    format = new DecimalFormat(pattern);
+501                } else {
+502                    if (log().isDebugEnabled()) {
+503                        log().debug("    Using pattern '" + pattern + "'" +
+504                                  " with Locale[" + locale + "]");
+505                    }
+506                    DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
+507                    format = new DecimalFormat(pattern, symbols);
+508                }
+509            } else {
+510                if (locale == null) {
+511                    if (log().isDebugEnabled()) {
+512                        log().debug("    Using default Locale format");
+513                    }
+514                    format = NumberFormat.getInstance();
+515                } else {
+516                    if (log().isDebugEnabled()) {
+517                        log().debug("    Using Locale[" + locale + "] format");
+518                    }
+519                    format = NumberFormat.getInstance(locale);
+520                }
+521            }
+522            if (!allowDecimals) {
+523                format.setParseIntegerOnly(true);
+524            }
+525            return format;
+526        }
+527    
+528        /**
+529         * Convert a String into a <code>Number</code> object.
+530         * @param sourceType TODO
+531         * @param targetType The type to convert the value to
+532         * @param value The String date value.
+533         * @param format The NumberFormat to parse the String value.
+534         *
+535         * @return The converted Number object.
+536         * @throws ConversionException if the String cannot be converted.
+537         */
+538        private Number parse(Class sourceType, Class targetType, String value, NumberFormat format) {
+539            ParsePosition pos = new ParsePosition(0);
+540            Number parsedNumber = format.parse(value, pos);
+541            if (pos.getErrorIndex() >= 0 || pos.getIndex() != value.length() || parsedNumber == null) {
+542                String msg = "Error converting from '" + toString(sourceType) + "' to '" + toString(targetType) + "'";
+543                if (format instanceof DecimalFormat) {
+544                    msg += " using pattern '" + ((DecimalFormat)format).toPattern() + "'";
+545                }
+546                if (locale != null) {
+547                    msg += " for locale=[" + locale + "]";
+548                }
+549                if (log().isDebugEnabled()) {
+550                    log().debug("    " + msg);
+551                }
+552                throw new ConversionException(msg);
+553            }
+554            return parsedNumber;
+555        }
+556    
+557    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortArrayConverter.html new file mode 100644 index 0000000..f5de09d --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortArrayConverter.html @@ -0,0 +1,213 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into a primitive array of short.  On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.</p>
+031     *
+032     * @author Craig R. McClanahan
+033     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+034     * @since 1.4
+035     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+036     */
+037    
+038    public final class ShortArrayConverter extends AbstractArrayConverter {
+039    
+040    
+041        // ----------------------------------------------------------- Constructors
+042    
+043    
+044        /**
+045         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+046         * a {@link ConversionException} if a conversion error occurs.
+047         */
+048        public ShortArrayConverter() {
+049    
+050            this.defaultValue = null;
+051            this.useDefault = false;
+052    
+053        }
+054    
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+058         * the specified default value if a conversion error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         */
+062        public ShortArrayConverter(Object defaultValue) {
+063    
+064            this.defaultValue = defaultValue;
+065            this.useDefault = true;
+066    
+067        }
+068    
+069    
+070        // ------------------------------------------------------- Static Variables
+071    
+072    
+073        /**
+074         * <p>Model object for type comparisons.</p>
+075         */
+076        private static final short[] MODEL = new short[0];
+077    
+078    
+079        // --------------------------------------------------------- Public Methods
+080    
+081    
+082        /**
+083         * Convert the specified input object into an output object of the
+084         * specified type.
+085         *
+086         * @param type Data type to which this value should be converted
+087         * @param value The input value to be converted
+088         * @return the converted value
+089         *
+090         * @exception ConversionException if conversion cannot be performed
+091         *  successfully
+092         */
+093        public Object convert(Class type, Object value) {
+094    
+095            // Deal with a null value
+096            if (value == null) {
+097                if (useDefault) {
+098                    return (defaultValue);
+099                } else {
+100                    throw new ConversionException("No value specified");
+101                }
+102            }
+103    
+104            // Deal with the no-conversion-needed case
+105            if (MODEL.getClass() == value.getClass()) {
+106                return (value);
+107            }
+108    
+109            // Deal with input value as a String array
+110            if (strings.getClass() == value.getClass()) {
+111                try {
+112                    String[] values = (String[]) value;
+113                    short[] results = new short[values.length];
+114                    for (int i = 0; i < values.length; i++) {
+115                        results[i] = Short.parseShort(values[i]);
+116                    }
+117                    return (results);
+118                } catch (Exception e) {
+119                    if (useDefault) {
+120                        return (defaultValue);
+121                    } else {
+122                        throw new ConversionException(value.toString(), e);
+123                    }
+124                }
+125            }
+126    
+127            // Parse the input value as a String into elements
+128            // and convert to the appropriate type
+129            try {
+130                List list = parseElements(value.toString());
+131                short[] results = new short[list.size()];
+132                for (int i = 0; i < results.length; i++) {
+133                    results[i] = Short.parseShort((String) list.get(i));
+134                }
+135                return (results);
+136            } catch (Exception e) {
+137                if (useDefault) {
+138                    return (defaultValue);
+139                } else {
+140                    throw new ConversionException(value.toString(), e);
+141                }
+142            }
+143    
+144        }
+145    
+146    
+147    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortConverter.html new file mode 100644 index 0000000..ad37173 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/ShortConverter.html @@ -0,0 +1,133 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link NumberConverter} implementation that handles conversion to
+021     * and from <b>java.lang.Short</b> objects.
+022     * <p>
+023     * This implementation can be configured to handle conversion either
+024     * by using Short's default String conversion, or by using a Locale's pattern
+025     * or by specifying a format pattern. See the {@link NumberConverter}
+026     * documentation for further details.
+027     * <p>
+028     * Can be configured to either return a <i>default value</i> or throw a
+029     * <code>ConversionException</code> if a conversion error occurs.
+030     *
+031     * @author Craig R. McClanahan
+032     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+033     * @since 1.3
+034     */
+035    public final class ShortConverter extends NumberConverter {
+036    
+037        /**
+038         * Construct a <b>java.lang.Short</b> <i>Converter</i> that throws
+039         * a <code>ConversionException</code> if an error occurs.
+040         */
+041        public ShortConverter() {
+042            super(false);
+043        }
+044    
+045        /**
+046         * Construct a <b>java.lang.Short</b> <i>Converter</i> that returns
+047         * a default value if an error occurs.
+048         *
+049         * @param defaultValue The default value to be returned
+050         * if the value to be converted is missing or an error
+051         * occurs converting the value.
+052         */
+053        public ShortConverter(Object defaultValue) {
+054            super(false, defaultValue);
+055        }
+056    
+057        /**
+058         * Return the default type this <code>Converter</code> handles.
+059         *
+060         * @return The default type this <code>Converter</code> handles.
+061         * @since 1.8.0
+062         */
+063        protected Class getDefaultType() {
+064            return Short.class;
+065        }
+066    
+067    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlDateConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlDateConverter.html new file mode 100644 index 0000000..86c5536 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlDateConverter.html @@ -0,0 +1,135 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.sql.Date;
+020    
+021    /**
+022     * {@link DateTimeConverter} implementation that handles conversion to
+023     * and from <b>java.sql.Date</b> objects.
+024     * <p>
+025     * This implementation can be configured to handle conversion either
+026     * by using java.sql.Date's default String conversion, or by using a
+027     * Locale's default format or by specifying a set of format patterns.
+028     * See the {@link DateTimeConverter} documentation for further details.
+029     * <p>
+030     * Can be configured to either return a <i>default value</i> or throw a
+031     * <code>ConversionException</code> if a conversion error occurs.
+032     *
+033     * @author Craig R. McClanahan
+034     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+035     * @since 1.3
+036     */
+037    public final class SqlDateConverter extends DateTimeConverter {
+038    
+039        /**
+040         * Construct a <b>java.sql.Date</b> <i>Converter</i> that throws
+041         * a <code>ConversionException</code> if an error occurs.
+042         */
+043        public SqlDateConverter() {
+044            super();
+045        }
+046    
+047        /**
+048         * Construct a <b>java.sql.Date</b> <i>Converter</i> that returns
+049         * a default value if an error occurs.
+050         *
+051         * @param defaultValue The default value to be returned
+052         * if the value to be converted is missing or an error
+053         * occurs converting the value.
+054         */
+055        public SqlDateConverter(Object defaultValue) {
+056            super(defaultValue);
+057        }
+058    
+059        /**
+060         * Return the default type this <code>Converter</code> handles.
+061         *
+062         * @return The default type this <code>Converter</code> handles.
+063         * @since 1.8.0
+064         */
+065        protected Class getDefaultType() {
+066            return Date.class;
+067        }
+068    
+069    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimeConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimeConverter.html new file mode 100644 index 0000000..0d9b3eb --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimeConverter.html @@ -0,0 +1,159 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.sql.Time;
+020    import java.text.DateFormat;
+021    import java.util.Locale;
+022    import java.util.TimeZone;
+023    
+024    /**
+025     * {@link DateTimeConverter} implementation that handles conversion to
+026     * and from <b>java.sql.Time</b> objects.
+027     * <p>
+028     * This implementation can be configured to handle conversion either
+029     * by using java.sql.Time's default String conversion, or by using a
+030     * Locale's default format or by specifying a set of format patterns.
+031     * See the {@link DateTimeConverter} documentation for further details.
+032     * <p>
+033     * Can be configured to either return a <i>default value</i> or throw a
+034     * <code>ConversionException</code> if a conversion error occurs.
+035     *
+036     * @author Craig R. McClanahan
+037     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+038     * @since 1.3
+039     */
+040    public final class SqlTimeConverter extends DateTimeConverter {
+041    
+042        /**
+043         * Construct a <b>java.sql.Time</b> <i>Converter</i> that throws
+044         * a <code>ConversionException</code> if an error occurs.
+045         */
+046        public SqlTimeConverter() {
+047            super();
+048        }
+049    
+050        /**
+051         * Construct a <b>java.sql.Time</b> <i>Converter</i> that returns
+052         * a default value if an error occurs.
+053         *
+054         * @param defaultValue The default value to be returned
+055         * if the value to be converted is missing or an error
+056         * occurs converting the value.
+057         */
+058        public SqlTimeConverter(Object defaultValue) {
+059            super(defaultValue);
+060        }
+061    
+062        /**
+063         * Return the default type this <code>Converter</code> handles.
+064         *
+065         * @return The default type this <code>Converter</code> handles.
+066         * @since 1.8.0
+067         */
+068        protected Class getDefaultType() {
+069            return Time.class;
+070        }
+071    
+072        /**
+073         * Return a <code>DateFormat<code> for the Locale.
+074         * @param locale TODO
+075         * @param timeZone TODO
+076         *
+077         * @return The DateFormat.
+078         * @since 1.8.0
+079         */
+080        protected DateFormat getFormat(Locale locale, TimeZone timeZone) {
+081            DateFormat format = null;
+082            if (locale == null) {
+083                format = DateFormat.getTimeInstance(DateFormat.SHORT);
+084            } else {
+085                format = DateFormat.getTimeInstance(DateFormat.SHORT, locale);
+086            }
+087            if (timeZone != null) {
+088                format.setTimeZone(timeZone);
+089            }
+090            return format;
+091        }
+092    
+093    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimestampConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimestampConverter.html new file mode 100644 index 0000000..fcd1dc8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/SqlTimestampConverter.html @@ -0,0 +1,158 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.sql.Timestamp;
+020    import java.text.DateFormat;
+021    import java.util.Locale;
+022    import java.util.TimeZone;
+023    
+024    /**
+025     * {@link DateTimeConverter} implementation that handles conversion to
+026     * and from <b>java.sql.Timestamp</b> objects.
+027     * <p>
+028     * This implementation can be configured to handle conversion either
+029     * by using java.sql.Timestamp's default String conversion, or by using a
+030     * Locale's default format or by specifying a set of format patterns.
+031     * See the {@link DateTimeConverter} documentation for further details.
+032     * <p>
+033     * Can be configured to either return a <i>default value</i> or throw a
+034     * <code>ConversionException</code> if a conversion error occurs.
+035     *
+036     * @author Craig R. McClanahan
+037     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+038     * @since 1.3
+039     */
+040    public final class SqlTimestampConverter extends DateTimeConverter {
+041    
+042        /**
+043         * Construct a <b>java.sql.Timestamp</b> <i>Converter</i> that throws
+044         * a <code>ConversionException</code> if an error occurs.
+045         */
+046        public SqlTimestampConverter() {
+047            super();
+048        }
+049    
+050        /**
+051         * Construct a <b>java.sql.Timestamp</b> <i>Converter</i> that returns
+052         * a default value if an error occurs.
+053         *
+054         * @param defaultValue The default value to be returned
+055         * if the value to be converted is missing or an error
+056         * occurs converting the value.
+057         */
+058        public SqlTimestampConverter(Object defaultValue) {
+059            super(defaultValue);
+060        }
+061    
+062        /**
+063         * Return the default type this <code>Converter</code> handles.
+064         *
+065         * @return The default type this <code>Converter</code> handles.
+066         * @since 1.8.0
+067         */
+068        protected Class getDefaultType() {
+069            return Timestamp.class;
+070        }
+071    
+072        /**
+073         * Return a <code>DateFormat<code> for the Locale.
+074         * @param locale TODO
+075         * @param timeZone TODO
+076         *
+077         * @return The DateFormat.
+078         * @since 1.8.0
+079         */
+080        protected DateFormat getFormat(Locale locale, TimeZone timeZone) {
+081            DateFormat format = null;
+082            if (locale == null) {
+083                format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+084            } else {
+085                format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);
+086            }
+087            if (timeZone != null) {
+088                format.setTimeZone(timeZone);
+089            }
+090            return format;
+091        }
+092    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringArrayConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringArrayConverter.html new file mode 100644 index 0000000..6aabef2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringArrayConverter.html @@ -0,0 +1,236 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    
+019    package org.apache.commons.beanutils.converters;
+020    
+021    
+022    import java.util.List;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    
+026    /**
+027     * Standard {@link org.apache.commons.beanutils.Converter} implementation that converts an incoming
+028     * String into an array of String objects. On a conversion failure, returns
+029     * a specified default value or throws a {@link ConversionException} depending
+030     * on how this instance is constructed.
+031     * <p>
+032     * There is also some special handling where the input is of type int[].
+033     * See method convert for more details.  
+034     *
+035     * @author Craig R. McClanahan
+036     * @version $Revision: 556229 $ $Date: 2007-07-14 07:11:19 +0100 (Sat, 14 Jul 2007) $
+037     * @since 1.4
+038     * @deprecated Replaced by the new {@link ArrayConverter} implementation
+039     */
+040    
+041    public final class StringArrayConverter extends AbstractArrayConverter {
+042    
+043    
+044        // ----------------------------------------------------------- Constructors
+045    
+046    
+047        /**
+048         * Create a {@link org.apache.commons.beanutils.Converter} that will throw
+049         * a {@link ConversionException} if a conversion error occurs.
+050         */
+051        public StringArrayConverter() {
+052    
+053            this.defaultValue = null;
+054            this.useDefault = false;
+055    
+056        }
+057    
+058    
+059        /**
+060         * Create a {@link org.apache.commons.beanutils.Converter} that will return
+061         * the specified default value if a conversion error occurs.
+062         *
+063         * @param defaultValue The default value to be returned
+064         */
+065        public StringArrayConverter(Object defaultValue) {
+066    
+067            this.defaultValue = defaultValue;
+068            this.useDefault = true;
+069    
+070        }
+071    
+072    
+073        // ------------------------------------------------------- Static Variables
+074    
+075    
+076        /**
+077         * <p>Model object for type comparisons.</p>
+078         */
+079        private static final String[] MODEL = new String[0];
+080        
+081        /**
+082         * <p> Model object for int arrays.</p>
+083         */
+084        private static final int[] INT_MODEL = new int[0];
+085    
+086    
+087    
+088        // --------------------------------------------------------- Public Methods
+089    
+090    
+091        /**
+092         * Convert the specified input object into an output object of the
+093         * specified type.
+094         * <p>
+095         * If the value is already of type String[] then it is simply returned
+096         * unaltered.
+097         * <p>
+098         * If the value is of type int[], then a String[] is returned where each
+099         * element in the string array is the result of calling Integer.toString
+100         * on the corresponding element of the int array. This was added as a
+101         * result of bugzilla request #18297 though there is not complete
+102         * agreement that this feature should have been added. 
+103         * <p>
+104         * In all other cases, this method calls toString on the input object, then
+105         * assumes the result is a comma-separated list of values. The values are 
+106         * split apart into the individual items and returned as the elements of an
+107         * array. See class AbstractArrayConverter for the exact input formats
+108         * supported.
+109         * 
+110         * @param type is the data type to which this value should be converted.
+111         * It is expected to be the class for type String[] (though this parameter
+112         * is actually ignored by this method).
+113         * 
+114         * @param value is the input value to be converted. If null then the
+115         * default value is returned or an exception thrown if no default value
+116         * exists.
+117         * @return the converted value
+118         *
+119         * @exception ConversionException if conversion cannot be performed
+120         * successfully, or the input is null and there is no default value set
+121         * for this object.
+122         */
+123        public Object convert(Class type, Object value) {
+124    
+125            // Deal with a null value
+126            if (value == null) {
+127                if (useDefault) {
+128                    return (defaultValue);
+129                } else {
+130                    throw new ConversionException("No value specified");
+131                }
+132            }
+133    
+134            // Deal with the no-conversion-needed case
+135            if (MODEL.getClass() == value.getClass()) {
+136                return (value);
+137            }
+138    
+139            // Deal with the input value as an int array
+140            if (INT_MODEL.getClass() == value.getClass())
+141            {
+142                int[] values = (int[]) value;
+143                String[] results = new String[values.length];
+144                for (int i = 0; i < values.length; i++)
+145                {
+146                    results[i] = Integer.toString(values[i]);
+147                }
+148    
+149                return (results);
+150            }
+151    
+152            // Parse the input value as a String into elements
+153            // and convert to the appropriate type
+154            try {
+155                List list = parseElements(value.toString());
+156                String[] results = new String[list.size()];
+157                for (int i = 0; i < results.length; i++) {
+158                    results[i] = (String) list.get(i);
+159                }
+160                return (results);
+161            } catch (Exception e) {
+162                if (useDefault) {
+163                    return (defaultValue);
+164                } else {
+165                    throw new ConversionException(value.toString(), e);
+166                }
+167            }
+168        }
+169    
+170    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringConverter.html new file mode 100644 index 0000000..735ae8c --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/StringConverter.html @@ -0,0 +1,159 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    /**
+020     * {@link org.apache.commons.beanutils.Converter}
+021     * implementation that converts an incoming
+022     * object into a <code>java.lang.String</code> object.
+023     * <p>
+024     * Note that ConvertUtils really is designed to do string->object conversions,
+025     * and offers very little support for object->string conversions. The
+026     * ConvertUtils/ConvertUtilsBean methods only select a converter to apply
+027     * based upon the target type being converted to, and generally assume that
+028     * the input is a string (by calling its toString method if needed).
+029     * <p>
+030     * This class is therefore just a dummy converter that converts its input
+031     * into a string by calling the input object's toString method and returning
+032     * that value.
+033     * <p>
+034     * It is possible to replace this converter with something that has a big
+035     * if/else statement that selects behaviour based on the real type of the
+036     * object being converted (or possibly has a map of converters, and looks
+037     * them up based on the class of the input object). However this is not part
+038     * of the existing ConvertUtils framework.
+039     *  
+040     *
+041     * @author Craig R. McClanahan
+042     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+043     * @since 1.3
+044     */
+045    public final class StringConverter extends AbstractConverter {
+046    
+047    
+048        /**
+049         * Construct a <b>java.lang.String</b> <i>Converter</i> that throws
+050         * a <code>ConversionException</code> if an error occurs.
+051         */
+052        public StringConverter() {
+053            super();
+054        }
+055    
+056        /**
+057         * Construct a <b>java.lang.String</b> <i>Converter</i> that returns
+058         * a default value if an error occurs.
+059         *
+060         * @param defaultValue The default value to be returned
+061         * if the value to be converted is missing or an error
+062         * occurs converting the value.
+063         */
+064        public StringConverter(Object defaultValue) {
+065            super(defaultValue);
+066        }
+067    
+068        /**
+069         * Return the default type this <code>Converter</code> handles.
+070         *
+071         * @return The default type this <code>Converter</code> handles.
+072         * @since 1.8.0
+073         */
+074        protected Class getDefaultType() {
+075            return String.class;
+076        }
+077    
+078        /**
+079         * Convert the specified input object into an output object of the
+080         * specified type.
+081         *
+082         * @param type Data type to which this value should be converted.
+083         * @param value The input value to be converted.
+084         * @return The converted value.
+085         * @throws Throwable if an error occurs converting to the specified type
+086         * @since 1.8.0
+087         */
+088        protected Object convertToType(Class type, Object value) throws Throwable {
+089            return value.toString();
+090        }
+091    
+092    
+093    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/URLConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/URLConverter.html new file mode 100644 index 0000000..2ce9d6f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/converters/URLConverter.html @@ -0,0 +1,142 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.converters;
+018    
+019    import java.net.URL;
+020    
+021    /**
+022     * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion
+023     * to and from <b>java.net.URL</b> objects.
+024     * <p>
+025     * Can be configured to either return a <i>default value</i> or throw a
+026     * <code>ConversionException</code> if a conversion error occurs.
+027     *
+028     * @version $Revision: 690380 $ $Date: 2008-08-29 21:04:38 +0100 (Fri, 29 Aug 2008) $
+029     * @since 1.3
+030     */
+031    public final class URLConverter extends AbstractConverter {
+032    
+033        /**
+034         * Construct a <b>java.net.URL</b> <i>Converter</i> that throws
+035         * a <code>ConversionException</code> if an error occurs.
+036         */
+037        public URLConverter() {
+038            super();
+039        }
+040    
+041        /**
+042         * Construct a <b>java.net.URL</b> <i>Converter</i> that returns
+043         * a default value if an error occurs.
+044         *
+045         * @param defaultValue The default value to be returned
+046         * if the value to be converted is missing or an error
+047         * occurs converting the value.
+048         */
+049        public URLConverter(Object defaultValue) {
+050            super(defaultValue);
+051        }
+052    
+053        /**
+054         * Return the default type this <code>Converter</code> handles.
+055         *
+056         * @return The default type this <code>Converter</code> handles.
+057         * @since 1.8.0
+058         */
+059        protected Class getDefaultType() {
+060            return URL.class;
+061        }
+062    
+063        /**
+064         * <p>Convert a java.net.URL or object into a String.</p>
+065         *
+066         * @param type Data type to which this value should be converted.
+067         * @param value The input value to be converted.
+068         * @return The converted value.
+069         * @throws Throwable if an error occurs converting to the specified type
+070         * @since 1.8.0
+071         */
+072        protected Object convertToType(Class type, Object value) throws Throwable {
+073            return new URL(value.toString());
+074        }
+075    
+076    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/DefaultResolver.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/DefaultResolver.html new file mode 100644 index 0000000..6c6e6a5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/DefaultResolver.html @@ -0,0 +1,339 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.expression;
+018    
+019    /**
+020     * Default Property Name Expression {@link Resolver} Implementation.
+021     * <p>
+022     * This class assists in resolving property names in the following five formats,
+023     * with the layout of an identifying String in parentheses:
+024     * <ul>
+025     * <li><strong>Simple (<code>name</code>)</strong> - The specified
+026     *     <code>name</code> identifies an individual property of a particular
+027     *     JavaBean.  The name of the actual getter or setter method to be used
+028     *     is determined using standard JavaBeans instrospection, so that (unless
+029     *     overridden by a <code>BeanInfo</code> class, a property named "xyz"
+030     *     will have a getter method named <code>getXyz()</code> or (for boolean
+031     *     properties only) <code>isXyz()</code>, and a setter method named
+032     *     <code>setXyz()</code>.</li>
+033     * <li><strong>Nested (<code>name1.name2.name3</code>)</strong> The first
+034     *     name element is used to select a property getter, as for simple
+035     *     references above.  The object returned for this property is then
+036     *     consulted, using the same approach, for a property getter for a
+037     *     property named <code>name2</code>, and so on.  The property value that
+038     *     is ultimately retrieved or modified is the one identified by the
+039     *     last name element.</li>
+040     * <li><strong>Indexed (<code>name[index]</code>)</strong> - The underlying
+041     *     property value is assumed to be an array, or this JavaBean is assumed
+042     *     to have indexed property getter and setter methods.  The appropriate
+043     *     (zero-relative) entry in the array is selected.  <code>List</code>
+044     *     objects are now also supported for read/write.  You simply need to define
+045     *     a getter that returns the <code>List</code></li>
+046     * <li><strong>Mapped (<code>name(key)</code>)</strong> - The JavaBean
+047     *     is assumed to have an property getter and setter methods with an
+048     *     additional attribute of type <code>java.lang.String</code>.</li>
+049     * <li><strong>Combined (<code>name1.name2[index].name3(key)</code>)</strong> -
+050     *     Combining mapped, nested, and indexed references is also
+051     *     supported.</li>
+052     * </ul>
+053     *
+054     * @version $Revision: 473888 $ $Date: 2006-11-12 06:21:24 +0000 (Sun, 12 Nov 2006) $
+055     * @since 1.8.0
+056     */
+057    public class DefaultResolver implements Resolver {
+058    
+059        private static final char NESTED        = '.';
+060        private static final char MAPPED_START  = '(';
+061        private static final char MAPPED_END    = ')';
+062        private static final char INDEXED_START = '[';
+063        private static final char INDEXED_END   = ']';
+064    
+065        /**
+066         * Default Constructor.
+067         */
+068        public DefaultResolver() {
+069        }
+070    
+071        /**
+072         * Return the index value from the property expression or -1.
+073         *
+074         * @param expression The property expression
+075         * @return The index value or -1 if the property is not indexed
+076         * @throws IllegalArgumentException If the indexed property is illegally
+077         * formed or has an invalid (non-numeric) value.
+078         */
+079        public int getIndex(String expression) {
+080            if (expression == null || expression.length() == 0) {
+081                return -1;
+082            }
+083            for (int i = 0; i < expression.length(); i++) {
+084                char c = expression.charAt(i);
+085                if (c == NESTED || c == MAPPED_START) {
+086                    return -1;
+087                } else if (c == INDEXED_START) {
+088                    int end = expression.indexOf(INDEXED_END, i);
+089                    if (end < 0) {
+090                        throw new IllegalArgumentException("Missing End Delimiter");
+091                    }
+092                    String value = expression.substring(i + 1, end);
+093                    if (value.length() == 0) {
+094                        throw new IllegalArgumentException("No Index Value");
+095                    }
+096                    int index = 0;
+097                    try {
+098                        index = Integer.parseInt(value, 10);
+099                    } catch (Exception e) {
+100                        throw new IllegalArgumentException("Invalid index value '"
+101                                + value + "'");
+102                    }
+103                    return index;
+104                }
+105            }
+106            return -1;
+107        }
+108    
+109        /**
+110         * Return the map key from the property expression or <code>null</code>.
+111         *
+112         * @param expression The property expression
+113         * @return The index value
+114         * @throws IllegalArgumentException If the mapped property is illegally formed.
+115         */
+116        public String getKey(String expression) {
+117            if (expression == null || expression.length() == 0) {
+118                return null;
+119            }
+120            for (int i = 0; i < expression.length(); i++) {
+121                char c = expression.charAt(i);
+122                if (c == NESTED || c == INDEXED_START) {
+123                    return null;
+124                } else if (c == MAPPED_START) {
+125                    int end = expression.indexOf(MAPPED_END, i);
+126                    if (end < 0) {
+127                        throw new IllegalArgumentException("Missing End Delimiter");
+128                    }
+129                    return expression.substring(i + 1, end);
+130                }
+131            }
+132            return null;
+133        }
+134    
+135        /**
+136         * Return the property name from the property expression.
+137         *
+138         * @param expression The property expression
+139         * @return The property name
+140         */
+141        public String getProperty(String expression) {
+142            if (expression == null || expression.length() == 0) {
+143                return expression;
+144            }
+145            for (int i = 0; i < expression.length(); i++) {
+146                char c = expression.charAt(i);
+147                if (c == NESTED) {
+148                    return expression.substring(0, i);
+149                } else if (c == MAPPED_START || c == INDEXED_START) {
+150                    return expression.substring(0, i);
+151                }
+152            }
+153            return expression;
+154        }
+155    
+156        /**
+157         * Indicates whether or not the expression
+158         * contains nested property expressions or not.
+159         *
+160         * @param expression The property expression
+161         * @return The next property expression
+162         */
+163        public boolean hasNested(String expression) {
+164            if (expression == null || expression.length() == 0) {
+165                return false;
+166            } else {
+167                return (remove(expression) != null);
+168            }
+169        }
+170    
+171        /**
+172         * Indicate whether the expression is for an indexed property or not.
+173         *
+174         * @param expression The property expression
+175         * @return <code>true</code> if the expresion is indexed,
+176         *  otherwise <code>false</code>
+177         */
+178        public boolean isIndexed(String expression) {
+179            if (expression == null || expression.length() == 0) {
+180                return false;
+181            }
+182            for (int i = 0; i < expression.length(); i++) {
+183                char c = expression.charAt(i);
+184                if (c == NESTED || c == MAPPED_START) {
+185                    return false;
+186                } else if (c == INDEXED_START) {
+187                    return true;
+188                }
+189            }
+190            return false;
+191        }
+192    
+193        /**
+194         * Indicate whether the expression is for a mapped property or not.
+195         *
+196         * @param expression The property expression
+197         * @return <code>true</code> if the expresion is mapped,
+198         *  otherwise <code>false</code>
+199         */
+200        public boolean isMapped(String expression) {
+201            if (expression == null || expression.length() == 0) {
+202                return false;
+203            }
+204            for (int i = 0; i < expression.length(); i++) {
+205                char c = expression.charAt(i);
+206                if (c == NESTED || c == INDEXED_START) {
+207                    return false;
+208                } else if (c == MAPPED_START) {
+209                    return true;
+210                }
+211            }
+212            return false;
+213        }
+214    
+215        /**
+216         * Extract the next property expression from the
+217         * current expression.
+218         *
+219         * @param expression The property expression
+220         * @return The next property expression
+221         */
+222        public String next(String expression) {
+223            if (expression == null || expression.length() == 0) {
+224                return null;
+225            }
+226            boolean indexed = false;
+227            boolean mapped  = false;
+228            for (int i = 0; i < expression.length(); i++) {
+229                char c = expression.charAt(i);
+230                if (indexed) {
+231                    if (c == INDEXED_END) {
+232                        return expression.substring(0, i + 1);
+233                    }
+234                } else if (mapped) {
+235                    if (c == MAPPED_END) {
+236                        return expression.substring(0, i + 1);
+237                    }
+238                } else {
+239                    if (c == NESTED) {
+240                        return expression.substring(0, i);
+241                    } else if (c == MAPPED_START) {
+242                        mapped = true;
+243                    } else if (c == INDEXED_START) {
+244                        indexed = true;
+245                    }
+246                }
+247            }
+248            return expression;
+249        }
+250    
+251        /**
+252         * Remove the last property expresson from the
+253         * current expression.
+254         *
+255         * @param expression The property expression
+256         * @return The new expression value, with first property
+257         * expression removed - null if there are no more expressions
+258         */
+259        public String remove(String expression) {
+260            if (expression == null || expression.length() == 0) {
+261                return null;
+262            }
+263            String property = next(expression);
+264            if (expression.length() == property.length()) {
+265                return null;
+266            }
+267            int start = property.length();
+268            if (expression.charAt(start) == NESTED) {
+269                start++;
+270            }
+271            return expression.substring(start);
+272        }
+273    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/Resolver.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/Resolver.html new file mode 100644 index 0000000..c7ae96d --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/expression/Resolver.html @@ -0,0 +1,231 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.beanutils.expression;
+018    
+019    /**
+020     * Property Name Expression Resolver.
+021     * <p>
+022     * Methods such as PropertyUtilsBean's <code>setNestedProperty()</code> method
+023     * use a <code>Resolver</code> to process a <i>property name</i>
+024     * expression and resolve <i>nested</i>, <i>indexed</i> and <i>mapped</i>
+025     * property names. The following code provides an example usage
+026     * demonstrating all the methods:
+027     *
+028     * <pre>
+029     *      // Iterate through a nested property expression
+030     *      while (resolver.hasNested(name)) {
+031     *
+032     *          // isolate a single property from a nested expresion
+033     *          String next = resolver.next(name);
+034     *
+035     *          // Process...
+036     *          String property = resolver.getProperty(next);
+037     *          if (resolver.isIndexed(next)) {
+038     *
+039     *              int index = resolver.getIndex(next);
+040     *              bean = getIndexedProperty(bean, property, index);
+041     *
+042     *          } else if (resolver.isMapped(next)) {
+043     *
+044     *              String key = resolver.getKey(next);
+045     *              bean = getMappedProperty(bean, property, key);
+046     *
+047     *          } else {
+048     *
+049     *              bean = getSimpleProperty(bean, property);
+050     *
+051     *          }
+052     *
+053     *          // remove the processed property from the expression
+054     *          name = resolver.remove(name);
+055     *      }
+056     * </pre>
+057     *
+058     * In order to create an implementation, it is important to understand how
+059     * BeanUtils/PropertyUtils uses the <code>resolver</code>. The following are
+060     * the main methods that use it:
+061     * <ul>
+062     *   <li>{@link org.apache.commons.beanutils.PropertyUtilsBean}</li>
+063     *   <ul>
+064     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#getIndexedProperty(Object, String)}</li>
+065     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#getMappedProperty(Object, String)}</li>
+066     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#getNestedProperty(Object, String)}</li>
+067     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#getPropertyDescriptor(Object, String)}</li>
+068     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#getSimpleProperty(Object, String)}</li>
+069     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#setIndexedProperty(Object, String, Object)}</li>
+070     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#setMappedProperty(Object, String, Object)}</li>
+071     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#setNestedProperty(Object, String, Object)}</li>
+072     *       <li>{@link org.apache.commons.beanutils.PropertyUtilsBean#setSimpleProperty(Object, String, Object)}</li>
+073     *   </ul>
+074     *   <li>{@link org.apache.commons.beanutils.BeanUtilsBean}</li>
+075     *   <ul>
+076     *       <li>{@link org.apache.commons.beanutils.BeanUtilsBean#copyProperty(Object, String, Object)}</li>
+077     *       <li>{@link org.apache.commons.beanutils.BeanUtilsBean#setProperty(Object, String, Object)}</li>
+078     *   </ul>
+079     *   <li>{@link org.apache.commons.beanutils.locale.LocaleBeanUtilsBean}</li>
+080     *   <ul>
+081     *       <li>{@link org.apache.commons.beanutils.locale.LocaleBeanUtilsBean#setProperty(Object,
+082     *        String, Object, String)}</li>
+083     *   </ul>
+084     * </ul>
+085     *
+086     * @version $Revision: 555845 $ $Date: 2007-07-13 03:52:05 +0100 (Fri, 13 Jul 2007) $
+087     * @see org.apache.commons.beanutils.PropertyUtilsBean#setResolver(Resolver)
+088     * @since 1.8.0
+089     */
+090    public interface Resolver {
+091    
+092        /**
+093         * Extract the index value from the property expression or -1.
+094         *
+095         * @param expression The property expression
+096         * @return The index value or -1 if the property is not indexed
+097         * @throws IllegalArgumentException If the indexed property is illegally
+098         * formed or has an invalid (non-numeric) value
+099         */
+100        int getIndex(String expression);
+101    
+102        /**
+103         * Extract the map key from the property expression or <code>null</code>.
+104         *
+105         * @param expression The property expression
+106         * @return The index value
+107         * @throws IllegalArgumentException If the mapped property is illegally formed
+108         */
+109        String getKey(String expression);
+110    
+111        /**
+112         * Return the property name from the property expression.
+113         *
+114         * @param expression The property expression
+115         * @return The property name
+116         */
+117        String getProperty(String expression);
+118    
+119        /**
+120         * Indicates whether or not the expression
+121         * contains nested property expressions or not.
+122         *
+123         * @param expression The property expression
+124         * @return The next property expression
+125         */
+126        boolean hasNested(String expression);
+127    
+128        /**
+129         * Indicate whether the expression is for an indexed property or not.
+130         *
+131         * @param expression The property expression
+132         * @return <code>true</code> if the expresion is indexed,
+133         *  otherwise <code>false</code>
+134         */
+135        boolean isIndexed(String expression);
+136    
+137        /**
+138         * Indicate whether the expression is for a mapped property or not.
+139         *
+140         * @param expression The property expression
+141         * @return <code>true</code> if the expresion is mapped,
+142         *  otherwise <code>false</code>
+143         */
+144        boolean isMapped(String expression);
+145    
+146        /**
+147         * Extract the next property expression from the
+148         * current expression.
+149         *
+150         * @param expression The property expression
+151         * @return The next property expression
+152         */
+153        String next(String expression);
+154    
+155        /**
+156         * Remove the last property expresson from the
+157         * current expression.
+158         *
+159         * @param expression The property expression
+160         * @return The new expression value, with first property
+161         * expression removed - null if there are no more expressions
+162         */
+163        String remove(String expression);
+164    
+165    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/BaseLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/BaseLocaleConverter.html new file mode 100644 index 0000000..0eeef8d --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/BaseLocaleConverter.html @@ -0,0 +1,311 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale;
+019    
+020    import org.apache.commons.beanutils.ConversionException;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.text.ParseException;
+025    import java.util.Locale;
+026    
+027    
+028    /**
+029     * <p>The base class for all standart type locale-sensitive converters.
+030     * It has {@link LocaleConverter} and {@link org.apache.commons.beanutils.Converter} implementations,
+031     * that convert an incoming locale-sensitive Object into an object of correspond type,
+032     * optionally using a default value or throwing a {@link ConversionException}
+033     * if a conversion error occurs.</p>
+034     *
+035     * @author Yauheny Mikulski
+036     */
+037    
+038    public abstract class BaseLocaleConverter implements LocaleConverter {
+039    
+040        // ----------------------------------------------------- Instance Variables
+041    
+042        /** All logging goes through this logger */
+043        private Log log = LogFactory.getLog(BaseLocaleConverter.class);
+044    
+045        /** The default value specified to our Constructor, if any. */
+046        private Object defaultValue = null;
+047    
+048        /** Should we return the default value on conversion errors? */
+049        protected boolean useDefault = false;
+050    
+051        /** The locale specified to our Constructor, by default - system locale. */
+052        protected Locale locale = Locale.getDefault();
+053    
+054        /** The default pattern specified to our Constructor, if any. */
+055        protected String pattern = null;
+056    
+057        /** The flag indicating whether the given pattern string is localized or not. */
+058        protected boolean locPattern = false;
+059    
+060        // ----------------------------------------------------------- Constructors
+061    
+062        /**
+063         * Create a {@link LocaleConverter} that will throw a {@link ConversionException}
+064         * if a conversion error occurs.
+065         * An unlocalized pattern is used for the convertion.
+066         *
+067         * @param locale        The locale
+068         * @param pattern       The convertion pattern
+069         */
+070        protected BaseLocaleConverter(Locale locale, String pattern) {
+071    
+072            this(null, locale, pattern, false, false);
+073        }
+074    
+075        /**
+076         * Create a {@link LocaleConverter} that will throw a {@link ConversionException}
+077         * if a conversion error occurs.
+078         *
+079         * @param locale        The locale
+080         * @param pattern       The convertion pattern
+081         * @param locPattern    Indicate whether the pattern is localized or not
+082         */
+083        protected BaseLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+084    
+085            this(null, locale, pattern, false, locPattern);
+086        }
+087    
+088        /**
+089         * Create a {@link LocaleConverter} that will return the specified default value
+090         * if a conversion error occurs.
+091         * An unlocalized pattern is used for the convertion.
+092         *
+093         * @param defaultValue  The default value to be returned
+094         * @param locale        The locale
+095         * @param pattern       The convertion pattern
+096         */
+097        protected BaseLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+098    
+099            this(defaultValue, locale, pattern, false);
+100        }
+101    
+102        /**
+103         * Create a {@link LocaleConverter} that will return the specified default value
+104         * if a conversion error occurs.
+105         *
+106         * @param defaultValue  The default value to be returned
+107         * @param locale        The locale
+108         * @param pattern       The convertion pattern
+109         * @param locPattern    Indicate whether the pattern is localized or not
+110         */
+111        protected BaseLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+112    
+113            this(defaultValue, locale, pattern, true, locPattern);
+114        }
+115    
+116        /**
+117         * Create a {@link LocaleConverter} that will return the specified default value
+118         * or throw a {@link ConversionException} if a conversion error occurs.
+119         *
+120         * @param defaultValue  The default value to be returned
+121         * @param locale        The locale
+122         * @param pattern       The convertion pattern
+123         * @param useDefault    Indicate whether the default value is used or not
+124         * @param locPattern    Indicate whether the pattern is localized or not
+125         */
+126        private BaseLocaleConverter(Object defaultValue, Locale locale,
+127                                    String pattern, boolean useDefault, boolean locPattern) {
+128    
+129            if (useDefault) {
+130                this.defaultValue = defaultValue;
+131                this.useDefault = true;
+132            }
+133    
+134            if (locale != null) {
+135                this.locale = locale;
+136            }
+137    
+138            this.pattern = pattern;
+139            this.locPattern = locPattern;
+140        }
+141    
+142        // --------------------------------------------------------- Methods
+143    
+144        /**
+145         * Convert the specified locale-sensitive input object into an output object of the
+146         * specified type.
+147         *
+148         * @param value The input object to be converted
+149         * @param pattern The pattern is used for the convertion
+150         * @return The converted value
+151         *
+152         * @exception ParseException if conversion cannot be performed
+153         *  successfully
+154         */
+155    
+156        abstract protected Object parse(Object value, String pattern) throws ParseException;
+157    
+158    
+159        /**
+160         * Convert the specified locale-sensitive input object into an output object.
+161         * The default pattern is used for the convertion.
+162         *
+163         * @param value The input object to be converted
+164         * @return The converted value
+165         *
+166         * @exception ConversionException if conversion cannot be performed
+167         *  successfully
+168         */
+169        public Object convert(Object value) {
+170            return convert(value, null);
+171        }
+172    
+173        /**
+174         * Convert the specified locale-sensitive input object into an output object.
+175         *
+176         * @param value The input object to be converted
+177         * @param pattern The pattern is used for the convertion
+178         * @return The converted value
+179         *
+180         * @exception ConversionException if conversion cannot be performed
+181         *  successfully
+182         */
+183        public Object convert(Object value, String pattern) {
+184            return convert(null, value, pattern);
+185        }
+186    
+187        /**
+188         * Convert the specified locale-sensitive input object into an output object of the
+189         * specified type. The default pattern is used for the convertion.
+190         *
+191         * @param type Data type to which this value should be converted
+192         * @param value The input object to be converted
+193         * @return The converted value
+194         *
+195         * @exception ConversionException if conversion cannot be performed
+196         *  successfully
+197         */
+198        public Object convert(Class type, Object value) {
+199            return convert(type, value, null);
+200        }
+201    
+202        /**
+203         * Convert the specified locale-sensitive input object into an output object of the
+204         * specified type.
+205         *
+206         * @param type Data is type to which this value should be converted
+207         * @param value is the input object to be converted
+208         * @param pattern is the pattern is used for the conversion; if null is
+209         * passed then the default pattern associated with the converter object
+210         * will be used.
+211         * @return The converted value
+212         *
+213         * @exception ConversionException if conversion cannot be performed
+214         *  successfully
+215         */
+216        public Object convert(Class type, Object value, String pattern) {
+217            if (value == null) {
+218                if (useDefault) {
+219                    return (defaultValue);
+220                } else {
+221                    // symmetric beanutils function allows null
+222                    // so do not: throw new ConversionException("No value specified");
+223                    log.debug("Null value specified for conversion, returing null");
+224                    return null;
+225                }
+226            }
+227    
+228            try {
+229                if (pattern != null) {
+230                    return parse(value, pattern);
+231                } else {
+232                    return parse(value, this.pattern);
+233                }
+234            } catch (Exception e) {
+235                if (useDefault) {
+236                    return (defaultValue);
+237                } else {
+238                    if (e instanceof ConversionException) {
+239                        throw (ConversionException)e;
+240                    }
+241                    throw new ConversionException(e);
+242                }
+243            }
+244        }
+245    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html new file mode 100644 index 0000000..eeee4b8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.Descriptor.html @@ -0,0 +1,841 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    
+021    import org.apache.commons.beanutils.BeanUtils;
+022    
+023    import java.lang.reflect.InvocationTargetException;
+024    import java.util.Locale;
+025    
+026    
+027    
+028    /**
+029     * <p>Utility methods for populating JavaBeans properties
+030     * via reflection in a locale-dependent manner.</p>
+031     *
+032     * <p>The implementations for these methods are provided by <code>LocaleBeanUtilsBean</code>.
+033     * For more details see {@link LocaleBeanUtilsBean}.</p>
+034     *
+035     * @author Craig R. McClanahan
+036     * @author Ralph Schaer
+037     * @author Chris Audley
+038     * @author Rey Francois
+039     * @author Gregor Rayman
+040     * @author Yauheny Mikulski
+041     */
+042    
+043    public class LocaleBeanUtils extends BeanUtils {
+044    
+045    
+046        // ----------------------------------------------------- Instance Variables
+047    
+048        /**
+049         * <p>Gets the locale used when no locale is passed.</p>
+050         *
+051         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+052         *
+053         * @return the default locale
+054         * @see LocaleBeanUtilsBean#getDefaultLocale()
+055         */
+056        public static Locale getDefaultLocale() {
+057    
+058            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getDefaultLocale();
+059        }
+060    
+061    
+062        /**
+063         * <p>Sets the locale used when no locale is passed.</p>
+064         *
+065         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+066         *
+067         * @param locale the default locale
+068         * @see LocaleBeanUtilsBean#setDefaultLocale(Locale)
+069         */
+070        public static void setDefaultLocale(Locale locale) {
+071    
+072            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setDefaultLocale(locale);
+073        }
+074    
+075        /**
+076         * <p>Gets whether the pattern is localized or not.</p>
+077         *
+078         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+079         *
+080         * @return <code>true</code> if pattern is localized,
+081         * otherwise <code>false</code>
+082         * @see LocaleBeanUtilsBean#getApplyLocalized()
+083         */
+084        public static boolean getApplyLocalized() {
+085    
+086            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getApplyLocalized();
+087        }
+088    
+089        /**
+090         * <p>Sets whether the pattern is localized or not.</p>
+091         *
+092         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+093         *
+094         * @param newApplyLocalized <code>true</code> if pattern is localized,
+095         * otherwise <code>false</code>
+096         * @see LocaleBeanUtilsBean#setApplyLocalized(boolean)
+097         */
+098        public static void setApplyLocalized(boolean newApplyLocalized) {
+099    
+100            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setApplyLocalized(newApplyLocalized);
+101        }
+102    
+103    
+104        // --------------------------------------------------------- Public Methods
+105    
+106        /**
+107         * <p>Return the value of the specified locale-sensitive indexed property
+108         * of the specified bean, as a String.</p>
+109         *
+110         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+111         *
+112         * @param bean Bean whose property is to be extracted
+113         * @param name <code>propertyname[index]</code> of the property value
+114         *  to be extracted
+115         * @param pattern The conversion pattern
+116         * @return The indexed property's value, converted to a String
+117         *
+118         * @exception IllegalAccessException if the caller does not have
+119         *  access to the property accessor method
+120         * @exception InvocationTargetException if the property accessor method
+121         *  throws an exception
+122         * @exception NoSuchMethodException if an accessor method for this
+123         *  propety cannot be found
+124         *
+125         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String, String)
+126         */
+127        public static String getIndexedProperty(Object bean, String name, String pattern)
+128                throws IllegalAccessException, InvocationTargetException,
+129                NoSuchMethodException {
+130    
+131            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name, pattern);
+132        }
+133    
+134        /**
+135         * Return the value of the specified locale-sensitive indexed property
+136         * of the specified bean, as a String using the default conversion pattern of
+137         * the corresponding {@link LocaleConverter}.
+138         *
+139         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+140         *
+141         * @param bean Bean whose property is to be extracted
+142         * @param name <code>propertyname[index]</code> of the property value
+143         *  to be extracted
+144         * @return The indexed property's value, converted to a String
+145         *
+146         * @exception IllegalAccessException if the caller does not have
+147         *  access to the property accessor method
+148         * @exception InvocationTargetException if the property accessor method
+149         *  throws an exception
+150         * @exception NoSuchMethodException if an accessor method for this
+151         *  propety cannot be found
+152         *
+153         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String)
+154         */
+155        public static String getIndexedProperty(Object bean, String name)
+156                throws IllegalAccessException, InvocationTargetException,
+157                NoSuchMethodException {
+158    
+159            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name);
+160        }
+161    
+162        /**
+163         * <p>Return the value of the specified locale-sensetive indexed property
+164         * of the specified bean, as a String using the specified conversion pattern.</p>
+165         *
+166         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+167         *
+168         * @param bean Bean whose property is to be extracted
+169         * @param name Simple property name of the property value to be extracted
+170         * @param index Index of the property value to be extracted
+171         * @param pattern The conversion pattern
+172         * @return The indexed property's value, converted to a String
+173         *
+174         * @exception IllegalAccessException if the caller does not have
+175         *  access to the property accessor method
+176         * @exception InvocationTargetException if the property accessor method
+177         *  throws an exception
+178         * @exception NoSuchMethodException if an accessor method for this
+179         *  propety cannot be found
+180         *
+181         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String, int, String)
+182         */
+183        public static String getIndexedProperty(Object bean,
+184                                                String name, int index, String pattern)
+185                throws IllegalAccessException, InvocationTargetException,
+186                NoSuchMethodException {
+187    
+188            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name, index, pattern);
+189        }
+190    
+191        /**
+192         * <p>Return the value of the specified locale-sensetive indexed property
+193         * of the specified bean, as a String using the default conversion pattern of
+194         * the corresponding {@link LocaleConverter}.</p>
+195         *
+196         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+197         *
+198         * @param bean Bean whose property is to be extracted
+199         * @param name Simple property name of the property value to be extracted
+200         * @param index Index of the property value to be extracted
+201         * @return The indexed property's value, converted to a String
+202         *
+203         * @exception IllegalAccessException if the caller does not have
+204         *  access to the property accessor method
+205         * @exception InvocationTargetException if the property accessor method
+206         *  throws an exception
+207         * @exception NoSuchMethodException if an accessor method for this
+208         *  propety cannot be found
+209         *
+210         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String, int)
+211         */
+212        public static String getIndexedProperty(Object bean,
+213                                                String name, int index)
+214                throws IllegalAccessException, InvocationTargetException,
+215                NoSuchMethodException {
+216            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name, index);
+217        }
+218    
+219        /**
+220         * <p>Return the value of the specified simple locale-sensitive property
+221         * of the specified bean, converted to a String using the specified
+222         * conversion pattern.</p>
+223         *
+224         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+225         *
+226         * @param bean Bean whose property is to be extracted
+227         * @param name Name of the property to be extracted
+228         * @param pattern The conversion pattern
+229         * @return The property's value, converted to a String
+230         *
+231         * @exception IllegalAccessException if the caller does not have
+232         *  access to the property accessor method
+233         * @exception InvocationTargetException if the property accessor method
+234         *  throws an exception
+235         * @exception NoSuchMethodException if an accessor method for this
+236         *  propety cannot be found
+237         *
+238         * @see LocaleBeanUtilsBean#getSimpleProperty(Object, String, String)
+239         */
+240        public static String getSimpleProperty(Object bean, String name, String pattern)
+241                throws IllegalAccessException, InvocationTargetException,
+242                NoSuchMethodException {
+243    
+244            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getSimpleProperty(bean, name, pattern);
+245        }
+246    
+247        /**
+248         * <p>Return the value of the specified simple locale-sensitive property
+249         * of the specified bean, converted to a String using the default
+250         * conversion pattern of the corresponding {@link LocaleConverter}.</p>
+251         *
+252         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+253         *
+254         * @param bean Bean whose property is to be extracted
+255         * @param name Name of the property to be extracted
+256         * @return The property's value, converted to a String
+257         *
+258         * @exception IllegalAccessException if the caller does not have
+259         *  access to the property accessor method
+260         * @exception InvocationTargetException if the property accessor method
+261         *  throws an exception
+262         * @exception NoSuchMethodException if an accessor method for this
+263         *  propety cannot be found
+264         *
+265         * @see LocaleBeanUtilsBean#getSimpleProperty(Object, String)
+266         */
+267        public static String getSimpleProperty(Object bean, String name)
+268                throws IllegalAccessException, InvocationTargetException,
+269                NoSuchMethodException {
+270    
+271            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getSimpleProperty(bean, name);
+272        }
+273    
+274        /**
+275         * <p>Return the value of the specified mapped locale-sensitive property
+276         * of the specified bean, as a String using the specified conversion pattern.</p>
+277         *
+278         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+279         *
+280         * @param bean Bean whose property is to be extracted
+281         * @param name Simple property name of the property value to be extracted
+282         * @param key Lookup key of the property value to be extracted
+283         * @param pattern The conversion pattern
+284         * @return The mapped property's value, converted to a String
+285         *
+286         * @exception IllegalAccessException if the caller does not have
+287         *  access to the property accessor method
+288         * @exception InvocationTargetException if the property accessor method
+289         *  throws an exception
+290         * @exception NoSuchMethodException if an accessor method for this
+291         *  propety cannot be found
+292         *
+293         * @see LocaleBeanUtilsBean#getMappedProperty(Object, String, String, String)
+294         */
+295        public static String getMappedProperty(Object bean,
+296                                               String name, String key, String pattern)
+297                throws IllegalAccessException, InvocationTargetException,
+298                NoSuchMethodException {
+299    
+300            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedProperty(bean, name, key, pattern);
+301        }
+302    
+303        /**
+304         * <p>Return the value of the specified mapped locale-sensitive property
+305         * of the specified bean, as a String
+306         * The key is specified as a method parameter and must *not* be included
+307         * in the property name expression.</p>
+308         *
+309         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+310         *
+311         * @param bean Bean whose property is to be extracted
+312         * @param name Simple property name of the property value to be extracted
+313         * @param key Lookup key of the property value to be extracted
+314         * @return The mapped property's value, converted to a String
+315         *
+316         * @exception IllegalAccessException if the caller does not have
+317         *  access to the property accessor method
+318         * @exception InvocationTargetException if the property accessor method
+319         *  throws an exception
+320         * @exception NoSuchMethodException if an accessor method for this
+321         *  propety cannot be found
+322         *
+323         * @see LocaleBeanUtilsBean#getMappedProperty(Object, String, String)
+324         */
+325        public static String getMappedProperty(Object bean,
+326                                               String name, String key)
+327                throws IllegalAccessException, InvocationTargetException,
+328                NoSuchMethodException {
+329    
+330            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedProperty(bean, name, key);
+331        }
+332    
+333    
+334        /**
+335         * <p>Return the value of the specified locale-sensitive mapped property
+336         * of the specified bean, as a String using the specified pattern.</p>
+337         *
+338         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+339         *
+340         * @param bean Bean whose property is to be extracted
+341         * @param name <code>propertyname(index)</code> of the property value
+342         *  to be extracted
+343         * @param pattern The conversion pattern
+344         * @return The mapped property's value, converted to a String
+345         *
+346         * @exception IllegalAccessException if the caller does not have
+347         *  access to the property accessor method
+348         * @exception InvocationTargetException if the property accessor method
+349         *  throws an exception
+350         * @exception NoSuchMethodException if an accessor method for this
+351         *  propety cannot be found
+352         *
+353         * @see LocaleBeanUtilsBean#getMappedPropertyLocale(Object, String, String)
+354         */
+355        public static String getMappedPropertyLocale(Object bean, String name, String pattern)
+356                throws IllegalAccessException, InvocationTargetException,
+357                NoSuchMethodException {
+358    
+359            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedPropertyLocale(bean, name, pattern);
+360        }
+361    
+362    
+363        /**
+364         * <p>Return the value of the specified locale-sensitive mapped property
+365         * of the specified bean, as a String using the default
+366         * conversion pattern of the corresponding {@link LocaleConverter}.</p>
+367         *
+368         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+369         *
+370         * @param bean Bean whose property is to be extracted
+371         * @param name <code>propertyname(index)</code> of the property value
+372         *  to be extracted
+373         * @return The mapped property's value, converted to a String
+374         *
+375         * @exception IllegalAccessException if the caller does not have
+376         *  access to the property accessor method
+377         * @exception InvocationTargetException if the property accessor method
+378         *  throws an exception
+379         * @exception NoSuchMethodException if an accessor method for this
+380         *  propety cannot be found
+381         *
+382         * @see LocaleBeanUtilsBean#getMappedProperty(Object, String)
+383         */
+384        public static String getMappedProperty(Object bean, String name)
+385                throws IllegalAccessException, InvocationTargetException,
+386                NoSuchMethodException {
+387    
+388            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedProperty(bean, name);
+389        }
+390    
+391        /**
+392         * <p>Return the value of the (possibly nested) locale-sensitive property
+393         * of the specified name, for the specified bean,
+394         * as a String using the specified pattern.</p>
+395         *
+396         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+397         *
+398         * @param bean Bean whose property is to be extracted
+399         * @param name Possibly nested name of the property to be extracted
+400         * @param pattern The conversion pattern
+401         * @return The nested property's value, converted to a String
+402         *
+403         * @exception IllegalAccessException if the caller does not have
+404         *  access to the property accessor method
+405         * @exception InvocationTargetException if the property accessor method
+406         *  throws an exception
+407         * @exception NoSuchMethodException if an accessor method for this
+408         *  propety cannot be found
+409         *
+410         * @see LocaleBeanUtilsBean#getNestedProperty(Object, String, String)
+411         */
+412        public static String getNestedProperty(Object bean, String name, String pattern)
+413                throws IllegalAccessException, InvocationTargetException,
+414                NoSuchMethodException {
+415    
+416            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getNestedProperty(bean, name, pattern);
+417        }
+418    
+419        /**
+420         * <p>Return the value of the (possibly nested) locale-sensitive property
+421         * of the specified name.</p>
+422         *
+423         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+424         *
+425         * @param bean Bean whose property is to be extracted
+426         * @param name Possibly nested name of the property to be extracted
+427         * @return The nested property's value, converted to a String
+428         *
+429         * @exception IllegalAccessException if the caller does not have
+430         *  access to the property accessor method
+431         * @exception InvocationTargetException if the property accessor method
+432         *  throws an exception
+433         * @exception NoSuchMethodException if an accessor method for this
+434         *  propety cannot be found
+435         *
+436         * @see LocaleBeanUtilsBean#getNestedProperty(Object, String)
+437         */
+438        public static String getNestedProperty(Object bean, String name)
+439                throws IllegalAccessException, InvocationTargetException,
+440                NoSuchMethodException {
+441    
+442            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getNestedProperty(bean, name);
+443        }
+444    
+445        /**
+446         * <p>Return the value of the specified locale-sensitive property
+447         * of the specified bean.</p>
+448         *
+449         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+450         *
+451         * @param bean Bean whose property is to be extracted
+452         * @param name Possibly indexed and/or nested name of the property
+453         *  to be extracted
+454         * @param pattern The conversion pattern
+455         * @return The nested property's value, converted to a String
+456         *
+457         * @exception IllegalAccessException if the caller does not have
+458         *  access to the property accessor method
+459         * @exception InvocationTargetException if the property accessor method
+460         *  throws an exception
+461         * @exception NoSuchMethodException if an accessor method for this
+462         *  propety cannot be found
+463         *
+464         * @see LocaleBeanUtilsBean#getProperty(Object, String, String)
+465         */
+466        public static String getProperty(Object bean, String name, String pattern)
+467                throws IllegalAccessException, InvocationTargetException,
+468                NoSuchMethodException {
+469    
+470            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getProperty(bean, name, pattern);
+471        }
+472    
+473        /**
+474         * <p>Return the value of the specified locale-sensitive property
+475         * of the specified bean.</p>
+476         *
+477         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+478         *
+479         * @param bean Bean whose property is to be extracted
+480         * @param name Possibly indexed and/or nested name of the property
+481         *  to be extracted
+482         * @return The property's value, converted to a String
+483         *
+484         * @exception IllegalAccessException if the caller does not have
+485         *  access to the property accessor method
+486         * @exception InvocationTargetException if the property accessor method
+487         *  throws an exception
+488         * @exception NoSuchMethodException if an accessor method for this
+489         *  propety cannot be found
+490         *
+491         * @see LocaleBeanUtilsBean#getProperty(Object, String)
+492         */
+493        public static String getProperty(Object bean, String name)
+494                throws IllegalAccessException, InvocationTargetException,
+495                NoSuchMethodException {
+496    
+497            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getProperty(bean, name);
+498        }
+499    
+500        /**
+501         * <p>Set the specified locale-sensitive property value, performing type
+502         * conversions as required to conform to the type of the destination property
+503         * using the default conversion pattern of the corresponding {@link LocaleConverter}.</p>
+504         *
+505         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+506         *
+507         * @param bean Bean on which setting is to be performed
+508         * @param name Property name (can be nested/indexed/mapped/combo)
+509         * @param value Value to be set
+510         *
+511         * @exception IllegalAccessException if the caller does not have
+512         *  access to the property accessor method
+513         * @exception InvocationTargetException if the property accessor method
+514         *  throws an exception
+515         *
+516         * @see LocaleBeanUtilsBean#setProperty(Object, String, Object)
+517         */
+518        public static void setProperty(Object bean, String name, Object value)
+519                throws IllegalAccessException, InvocationTargetException {
+520    
+521            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setProperty(bean, name, value);
+522        }
+523    
+524        /**
+525         * <p>Set the specified locale-sensitive property value, performing type
+526         * conversions as required to conform to the type of the destination
+527         * property using the specified conversion pattern.</p>
+528         *
+529         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+530         *
+531         * @param bean Bean on which setting is to be performed
+532         * @param name Property name (can be nested/indexed/mapped/combo)
+533         * @param value Value to be set
+534         * @param pattern The conversion pattern
+535         *
+536         * @exception IllegalAccessException if the caller does not have
+537         *  access to the property accessor method
+538         * @exception InvocationTargetException if the property accessor method
+539         *  throws an exception
+540         *
+541         * @see LocaleBeanUtilsBean#setProperty(Object, String, Object, String)
+542         */
+543        public static void setProperty(Object bean, String name, Object value, String pattern)
+544                throws IllegalAccessException, InvocationTargetException {
+545    
+546            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setProperty(bean, name, value, pattern);
+547         }
+548    
+549        /**
+550         * <p>Calculate the property type.</p>
+551         *
+552         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+553         *
+554         * @param target The bean
+555         * @param name The property name
+556         * @param propName The Simple name of target property
+557         * @return The property's type
+558         *
+559         * @exception IllegalAccessException if the caller does not have
+560         *  access to the property accessor method
+561         * @exception InvocationTargetException if the property accessor method
+562         *  throws an exception
+563         *
+564         * @see LocaleBeanUtilsBean#definePropertyType(Object, String, String)
+565         */
+566        protected static Class definePropertyType(Object target, String name, String propName)
+567                throws IllegalAccessException, InvocationTargetException {
+568    
+569            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().definePropertyType(target, name, propName);
+570        }
+571    
+572        /**
+573         * <p>Convert the specified value to the required type using the
+574         * specified conversion pattern.</p>
+575         *
+576         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+577         *
+578         * @param type The Java type of target property
+579         * @param index The indexed subscript value (if any)
+580         * @param value The value to be converted
+581         * @param pattern The conversion pattern
+582         * @return The converted value
+583         * @see LocaleBeanUtilsBean#convert(Class, int, Object, String)
+584         */
+585        protected static Object convert(Class type, int index, Object value, String pattern) {
+586    
+587            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().convert(type, index, value, pattern);
+588        }
+589    
+590        /**
+591         * <p>Convert the specified value to the required type.</p>
+592         *
+593         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+594         *
+595         * @param type The Java type of target property
+596         * @param index The indexed subscript value (if any)
+597         * @param value The value to be converted
+598         * @return The converted value
+599         * @see LocaleBeanUtilsBean#convert(Class, int, Object)
+600         */
+601        protected static Object convert(Class type, int index, Object value) {
+602    
+603            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().convert(type, index, value);
+604        }
+605    
+606        /**
+607         * <p>Invoke the setter method.</p>
+608         *
+609         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+610         *
+611         * @param target The bean
+612         * @param propName The Simple name of target property
+613         * @param key The Mapped key value (if any)
+614         * @param index The indexed subscript value (if any)
+615         * @param newValue The value to be set
+616         *
+617         * @exception IllegalAccessException if the caller does not have
+618         *  access to the property accessor method
+619         * @exception InvocationTargetException if the property accessor method
+620         *  throws an exception
+621         *
+622         * @see LocaleBeanUtilsBean#invokeSetter(Object, String, String, int, Object)
+623         */
+624        protected static void invokeSetter(Object target, String propName, String key, int index, Object newValue)
+625                throws IllegalAccessException, InvocationTargetException {
+626    
+627           LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().invokeSetter(target, propName, key, index, newValue);
+628        }
+629    
+630        /**
+631         * Resolve any nested expression to get the actual target bean.
+632         *
+633         * @deprecated moved into <code>LocaleBeanUtilsBean</code>
+634         * @param bean The bean
+635         * @param name The property name
+636         * @return The property's descriptor
+637         *
+638         * @exception IllegalAccessException if the caller does not have
+639         *  access to the property accessor method
+640         * @exception InvocationTargetException if the property accessor method
+641         *  throws an exception
+642         */
+643        protected static Descriptor calculate(Object bean, String name)
+644                throws IllegalAccessException, InvocationTargetException {
+645    
+646            org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor descriptor
+647                = LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().calculate(bean, name);
+648            return new Descriptor(
+649                    descriptor.getTarget(),
+650                    descriptor.getName(),
+651                    descriptor.getPropName(),
+652                    descriptor.getKey(),
+653                    descriptor.getIndex());
+654        }
+655    
+656        /** @deprecated moved into <code>LocaleBeanUtils</code> */
+657        protected static class Descriptor {
+658    
+659            private int index = -1;    // Indexed subscript value (if any)
+660            private String name;
+661            private String propName;   // Simple name of target property
+662            private String key;        // Mapped key value (if any)
+663            private Object target;
+664    
+665            /**
+666             * Construct a descriptor instance for the target bean and property.
+667             *
+668             * @param target The target bean
+669             * @param name The property name (includes indexed/mapped expr)
+670             * @param propName The property name
+671             * @param key The mapped property key (if any)
+672             * @param index The indexed property index (if any)
+673             */
+674            public Descriptor(Object target, String name, String propName, String key, int index) {
+675    
+676                setTarget(target);
+677                setName(name);
+678                setPropName(propName);
+679                setKey(key);
+680                setIndex(index);
+681            }
+682    
+683            /**
+684             * Return the target bean.
+685             *
+686             * @return The descriptors target bean
+687             */
+688            public Object getTarget() {
+689                return target;
+690            }
+691    
+692            /**
+693             * Set the target bean.
+694             *
+695             * @param target The target bean
+696             */
+697            public void setTarget(Object target) {
+698                this.target = target;
+699            }
+700    
+701            /**
+702             * Return the mapped property key.
+703             *
+704             * @return the mapped property key (if any)
+705             */
+706            public String getKey() {
+707                return key;
+708            }
+709    
+710            /**
+711             * Set the mapped property key.
+712             *
+713             * @param key The mapped property key (if any)
+714             */
+715            public void setKey(String key) {
+716                this.key = key;
+717            }
+718    
+719            /**
+720             * Return indexed property index.
+721             *
+722             * @return indexed property index (if any)
+723             */
+724            public int getIndex() {
+725                return index;
+726            }
+727    
+728            /**
+729             * Set the indexed property index.
+730             *
+731             * @param index The indexed property index (if any)
+732             */
+733            public void setIndex(int index) {
+734                this.index = index;
+735            }
+736    
+737            /**
+738             * Return property name (includes indexed/mapped expr).
+739             *
+740             * @return The property name (includes indexed/mapped expr)
+741             */
+742            public String getName() {
+743                return name;
+744            }
+745    
+746            /**
+747             * Set the property name (includes indexed/mapped expr).
+748             *
+749             * @param name The property name (includes indexed/mapped expr)
+750             */
+751            public void setName(String name) {
+752                this.name = name;
+753            }
+754    
+755            /**
+756             * Return the property name.
+757             *
+758             * @return The property name
+759             */
+760            public String getPropName() {
+761                return propName;
+762            }
+763    
+764            /**
+765             * Set the property name.
+766             *
+767             * @param propName The property name
+768             */
+769            public void setPropName(String propName) {
+770                this.propName = propName;
+771            }
+772        }
+773    }
+774    
+775    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.html new file mode 100644 index 0000000..eeee4b8 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtils.html @@ -0,0 +1,841 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    
+021    import org.apache.commons.beanutils.BeanUtils;
+022    
+023    import java.lang.reflect.InvocationTargetException;
+024    import java.util.Locale;
+025    
+026    
+027    
+028    /**
+029     * <p>Utility methods for populating JavaBeans properties
+030     * via reflection in a locale-dependent manner.</p>
+031     *
+032     * <p>The implementations for these methods are provided by <code>LocaleBeanUtilsBean</code>.
+033     * For more details see {@link LocaleBeanUtilsBean}.</p>
+034     *
+035     * @author Craig R. McClanahan
+036     * @author Ralph Schaer
+037     * @author Chris Audley
+038     * @author Rey Francois
+039     * @author Gregor Rayman
+040     * @author Yauheny Mikulski
+041     */
+042    
+043    public class LocaleBeanUtils extends BeanUtils {
+044    
+045    
+046        // ----------------------------------------------------- Instance Variables
+047    
+048        /**
+049         * <p>Gets the locale used when no locale is passed.</p>
+050         *
+051         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+052         *
+053         * @return the default locale
+054         * @see LocaleBeanUtilsBean#getDefaultLocale()
+055         */
+056        public static Locale getDefaultLocale() {
+057    
+058            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getDefaultLocale();
+059        }
+060    
+061    
+062        /**
+063         * <p>Sets the locale used when no locale is passed.</p>
+064         *
+065         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+066         *
+067         * @param locale the default locale
+068         * @see LocaleBeanUtilsBean#setDefaultLocale(Locale)
+069         */
+070        public static void setDefaultLocale(Locale locale) {
+071    
+072            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setDefaultLocale(locale);
+073        }
+074    
+075        /**
+076         * <p>Gets whether the pattern is localized or not.</p>
+077         *
+078         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+079         *
+080         * @return <code>true</code> if pattern is localized,
+081         * otherwise <code>false</code>
+082         * @see LocaleBeanUtilsBean#getApplyLocalized()
+083         */
+084        public static boolean getApplyLocalized() {
+085    
+086            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getApplyLocalized();
+087        }
+088    
+089        /**
+090         * <p>Sets whether the pattern is localized or not.</p>
+091         *
+092         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+093         *
+094         * @param newApplyLocalized <code>true</code> if pattern is localized,
+095         * otherwise <code>false</code>
+096         * @see LocaleBeanUtilsBean#setApplyLocalized(boolean)
+097         */
+098        public static void setApplyLocalized(boolean newApplyLocalized) {
+099    
+100            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setApplyLocalized(newApplyLocalized);
+101        }
+102    
+103    
+104        // --------------------------------------------------------- Public Methods
+105    
+106        /**
+107         * <p>Return the value of the specified locale-sensitive indexed property
+108         * of the specified bean, as a String.</p>
+109         *
+110         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+111         *
+112         * @param bean Bean whose property is to be extracted
+113         * @param name <code>propertyname[index]</code> of the property value
+114         *  to be extracted
+115         * @param pattern The conversion pattern
+116         * @return The indexed property's value, converted to a String
+117         *
+118         * @exception IllegalAccessException if the caller does not have
+119         *  access to the property accessor method
+120         * @exception InvocationTargetException if the property accessor method
+121         *  throws an exception
+122         * @exception NoSuchMethodException if an accessor method for this
+123         *  propety cannot be found
+124         *
+125         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String, String)
+126         */
+127        public static String getIndexedProperty(Object bean, String name, String pattern)
+128                throws IllegalAccessException, InvocationTargetException,
+129                NoSuchMethodException {
+130    
+131            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name, pattern);
+132        }
+133    
+134        /**
+135         * Return the value of the specified locale-sensitive indexed property
+136         * of the specified bean, as a String using the default conversion pattern of
+137         * the corresponding {@link LocaleConverter}.
+138         *
+139         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+140         *
+141         * @param bean Bean whose property is to be extracted
+142         * @param name <code>propertyname[index]</code> of the property value
+143         *  to be extracted
+144         * @return The indexed property's value, converted to a String
+145         *
+146         * @exception IllegalAccessException if the caller does not have
+147         *  access to the property accessor method
+148         * @exception InvocationTargetException if the property accessor method
+149         *  throws an exception
+150         * @exception NoSuchMethodException if an accessor method for this
+151         *  propety cannot be found
+152         *
+153         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String)
+154         */
+155        public static String getIndexedProperty(Object bean, String name)
+156                throws IllegalAccessException, InvocationTargetException,
+157                NoSuchMethodException {
+158    
+159            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name);
+160        }
+161    
+162        /**
+163         * <p>Return the value of the specified locale-sensetive indexed property
+164         * of the specified bean, as a String using the specified conversion pattern.</p>
+165         *
+166         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+167         *
+168         * @param bean Bean whose property is to be extracted
+169         * @param name Simple property name of the property value to be extracted
+170         * @param index Index of the property value to be extracted
+171         * @param pattern The conversion pattern
+172         * @return The indexed property's value, converted to a String
+173         *
+174         * @exception IllegalAccessException if the caller does not have
+175         *  access to the property accessor method
+176         * @exception InvocationTargetException if the property accessor method
+177         *  throws an exception
+178         * @exception NoSuchMethodException if an accessor method for this
+179         *  propety cannot be found
+180         *
+181         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String, int, String)
+182         */
+183        public static String getIndexedProperty(Object bean,
+184                                                String name, int index, String pattern)
+185                throws IllegalAccessException, InvocationTargetException,
+186                NoSuchMethodException {
+187    
+188            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name, index, pattern);
+189        }
+190    
+191        /**
+192         * <p>Return the value of the specified locale-sensetive indexed property
+193         * of the specified bean, as a String using the default conversion pattern of
+194         * the corresponding {@link LocaleConverter}.</p>
+195         *
+196         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+197         *
+198         * @param bean Bean whose property is to be extracted
+199         * @param name Simple property name of the property value to be extracted
+200         * @param index Index of the property value to be extracted
+201         * @return The indexed property's value, converted to a String
+202         *
+203         * @exception IllegalAccessException if the caller does not have
+204         *  access to the property accessor method
+205         * @exception InvocationTargetException if the property accessor method
+206         *  throws an exception
+207         * @exception NoSuchMethodException if an accessor method for this
+208         *  propety cannot be found
+209         *
+210         * @see LocaleBeanUtilsBean#getIndexedProperty(Object, String, int)
+211         */
+212        public static String getIndexedProperty(Object bean,
+213                                                String name, int index)
+214                throws IllegalAccessException, InvocationTargetException,
+215                NoSuchMethodException {
+216            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getIndexedProperty(bean, name, index);
+217        }
+218    
+219        /**
+220         * <p>Return the value of the specified simple locale-sensitive property
+221         * of the specified bean, converted to a String using the specified
+222         * conversion pattern.</p>
+223         *
+224         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+225         *
+226         * @param bean Bean whose property is to be extracted
+227         * @param name Name of the property to be extracted
+228         * @param pattern The conversion pattern
+229         * @return The property's value, converted to a String
+230         *
+231         * @exception IllegalAccessException if the caller does not have
+232         *  access to the property accessor method
+233         * @exception InvocationTargetException if the property accessor method
+234         *  throws an exception
+235         * @exception NoSuchMethodException if an accessor method for this
+236         *  propety cannot be found
+237         *
+238         * @see LocaleBeanUtilsBean#getSimpleProperty(Object, String, String)
+239         */
+240        public static String getSimpleProperty(Object bean, String name, String pattern)
+241                throws IllegalAccessException, InvocationTargetException,
+242                NoSuchMethodException {
+243    
+244            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getSimpleProperty(bean, name, pattern);
+245        }
+246    
+247        /**
+248         * <p>Return the value of the specified simple locale-sensitive property
+249         * of the specified bean, converted to a String using the default
+250         * conversion pattern of the corresponding {@link LocaleConverter}.</p>
+251         *
+252         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+253         *
+254         * @param bean Bean whose property is to be extracted
+255         * @param name Name of the property to be extracted
+256         * @return The property's value, converted to a String
+257         *
+258         * @exception IllegalAccessException if the caller does not have
+259         *  access to the property accessor method
+260         * @exception InvocationTargetException if the property accessor method
+261         *  throws an exception
+262         * @exception NoSuchMethodException if an accessor method for this
+263         *  propety cannot be found
+264         *
+265         * @see LocaleBeanUtilsBean#getSimpleProperty(Object, String)
+266         */
+267        public static String getSimpleProperty(Object bean, String name)
+268                throws IllegalAccessException, InvocationTargetException,
+269                NoSuchMethodException {
+270    
+271            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getSimpleProperty(bean, name);
+272        }
+273    
+274        /**
+275         * <p>Return the value of the specified mapped locale-sensitive property
+276         * of the specified bean, as a String using the specified conversion pattern.</p>
+277         *
+278         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+279         *
+280         * @param bean Bean whose property is to be extracted
+281         * @param name Simple property name of the property value to be extracted
+282         * @param key Lookup key of the property value to be extracted
+283         * @param pattern The conversion pattern
+284         * @return The mapped property's value, converted to a String
+285         *
+286         * @exception IllegalAccessException if the caller does not have
+287         *  access to the property accessor method
+288         * @exception InvocationTargetException if the property accessor method
+289         *  throws an exception
+290         * @exception NoSuchMethodException if an accessor method for this
+291         *  propety cannot be found
+292         *
+293         * @see LocaleBeanUtilsBean#getMappedProperty(Object, String, String, String)
+294         */
+295        public static String getMappedProperty(Object bean,
+296                                               String name, String key, String pattern)
+297                throws IllegalAccessException, InvocationTargetException,
+298                NoSuchMethodException {
+299    
+300            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedProperty(bean, name, key, pattern);
+301        }
+302    
+303        /**
+304         * <p>Return the value of the specified mapped locale-sensitive property
+305         * of the specified bean, as a String
+306         * The key is specified as a method parameter and must *not* be included
+307         * in the property name expression.</p>
+308         *
+309         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+310         *
+311         * @param bean Bean whose property is to be extracted
+312         * @param name Simple property name of the property value to be extracted
+313         * @param key Lookup key of the property value to be extracted
+314         * @return The mapped property's value, converted to a String
+315         *
+316         * @exception IllegalAccessException if the caller does not have
+317         *  access to the property accessor method
+318         * @exception InvocationTargetException if the property accessor method
+319         *  throws an exception
+320         * @exception NoSuchMethodException if an accessor method for this
+321         *  propety cannot be found
+322         *
+323         * @see LocaleBeanUtilsBean#getMappedProperty(Object, String, String)
+324         */
+325        public static String getMappedProperty(Object bean,
+326                                               String name, String key)
+327                throws IllegalAccessException, InvocationTargetException,
+328                NoSuchMethodException {
+329    
+330            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedProperty(bean, name, key);
+331        }
+332    
+333    
+334        /**
+335         * <p>Return the value of the specified locale-sensitive mapped property
+336         * of the specified bean, as a String using the specified pattern.</p>
+337         *
+338         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+339         *
+340         * @param bean Bean whose property is to be extracted
+341         * @param name <code>propertyname(index)</code> of the property value
+342         *  to be extracted
+343         * @param pattern The conversion pattern
+344         * @return The mapped property's value, converted to a String
+345         *
+346         * @exception IllegalAccessException if the caller does not have
+347         *  access to the property accessor method
+348         * @exception InvocationTargetException if the property accessor method
+349         *  throws an exception
+350         * @exception NoSuchMethodException if an accessor method for this
+351         *  propety cannot be found
+352         *
+353         * @see LocaleBeanUtilsBean#getMappedPropertyLocale(Object, String, String)
+354         */
+355        public static String getMappedPropertyLocale(Object bean, String name, String pattern)
+356                throws IllegalAccessException, InvocationTargetException,
+357                NoSuchMethodException {
+358    
+359            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedPropertyLocale(bean, name, pattern);
+360        }
+361    
+362    
+363        /**
+364         * <p>Return the value of the specified locale-sensitive mapped property
+365         * of the specified bean, as a String using the default
+366         * conversion pattern of the corresponding {@link LocaleConverter}.</p>
+367         *
+368         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+369         *
+370         * @param bean Bean whose property is to be extracted
+371         * @param name <code>propertyname(index)</code> of the property value
+372         *  to be extracted
+373         * @return The mapped property's value, converted to a String
+374         *
+375         * @exception IllegalAccessException if the caller does not have
+376         *  access to the property accessor method
+377         * @exception InvocationTargetException if the property accessor method
+378         *  throws an exception
+379         * @exception NoSuchMethodException if an accessor method for this
+380         *  propety cannot be found
+381         *
+382         * @see LocaleBeanUtilsBean#getMappedProperty(Object, String)
+383         */
+384        public static String getMappedProperty(Object bean, String name)
+385                throws IllegalAccessException, InvocationTargetException,
+386                NoSuchMethodException {
+387    
+388            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getMappedProperty(bean, name);
+389        }
+390    
+391        /**
+392         * <p>Return the value of the (possibly nested) locale-sensitive property
+393         * of the specified name, for the specified bean,
+394         * as a String using the specified pattern.</p>
+395         *
+396         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+397         *
+398         * @param bean Bean whose property is to be extracted
+399         * @param name Possibly nested name of the property to be extracted
+400         * @param pattern The conversion pattern
+401         * @return The nested property's value, converted to a String
+402         *
+403         * @exception IllegalAccessException if the caller does not have
+404         *  access to the property accessor method
+405         * @exception InvocationTargetException if the property accessor method
+406         *  throws an exception
+407         * @exception NoSuchMethodException if an accessor method for this
+408         *  propety cannot be found
+409         *
+410         * @see LocaleBeanUtilsBean#getNestedProperty(Object, String, String)
+411         */
+412        public static String getNestedProperty(Object bean, String name, String pattern)
+413                throws IllegalAccessException, InvocationTargetException,
+414                NoSuchMethodException {
+415    
+416            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getNestedProperty(bean, name, pattern);
+417        }
+418    
+419        /**
+420         * <p>Return the value of the (possibly nested) locale-sensitive property
+421         * of the specified name.</p>
+422         *
+423         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+424         *
+425         * @param bean Bean whose property is to be extracted
+426         * @param name Possibly nested name of the property to be extracted
+427         * @return The nested property's value, converted to a String
+428         *
+429         * @exception IllegalAccessException if the caller does not have
+430         *  access to the property accessor method
+431         * @exception InvocationTargetException if the property accessor method
+432         *  throws an exception
+433         * @exception NoSuchMethodException if an accessor method for this
+434         *  propety cannot be found
+435         *
+436         * @see LocaleBeanUtilsBean#getNestedProperty(Object, String)
+437         */
+438        public static String getNestedProperty(Object bean, String name)
+439                throws IllegalAccessException, InvocationTargetException,
+440                NoSuchMethodException {
+441    
+442            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getNestedProperty(bean, name);
+443        }
+444    
+445        /**
+446         * <p>Return the value of the specified locale-sensitive property
+447         * of the specified bean.</p>
+448         *
+449         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+450         *
+451         * @param bean Bean whose property is to be extracted
+452         * @param name Possibly indexed and/or nested name of the property
+453         *  to be extracted
+454         * @param pattern The conversion pattern
+455         * @return The nested property's value, converted to a String
+456         *
+457         * @exception IllegalAccessException if the caller does not have
+458         *  access to the property accessor method
+459         * @exception InvocationTargetException if the property accessor method
+460         *  throws an exception
+461         * @exception NoSuchMethodException if an accessor method for this
+462         *  propety cannot be found
+463         *
+464         * @see LocaleBeanUtilsBean#getProperty(Object, String, String)
+465         */
+466        public static String getProperty(Object bean, String name, String pattern)
+467                throws IllegalAccessException, InvocationTargetException,
+468                NoSuchMethodException {
+469    
+470            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getProperty(bean, name, pattern);
+471        }
+472    
+473        /**
+474         * <p>Return the value of the specified locale-sensitive property
+475         * of the specified bean.</p>
+476         *
+477         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+478         *
+479         * @param bean Bean whose property is to be extracted
+480         * @param name Possibly indexed and/or nested name of the property
+481         *  to be extracted
+482         * @return The property's value, converted to a String
+483         *
+484         * @exception IllegalAccessException if the caller does not have
+485         *  access to the property accessor method
+486         * @exception InvocationTargetException if the property accessor method
+487         *  throws an exception
+488         * @exception NoSuchMethodException if an accessor method for this
+489         *  propety cannot be found
+490         *
+491         * @see LocaleBeanUtilsBean#getProperty(Object, String)
+492         */
+493        public static String getProperty(Object bean, String name)
+494                throws IllegalAccessException, InvocationTargetException,
+495                NoSuchMethodException {
+496    
+497            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getProperty(bean, name);
+498        }
+499    
+500        /**
+501         * <p>Set the specified locale-sensitive property value, performing type
+502         * conversions as required to conform to the type of the destination property
+503         * using the default conversion pattern of the corresponding {@link LocaleConverter}.</p>
+504         *
+505         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+506         *
+507         * @param bean Bean on which setting is to be performed
+508         * @param name Property name (can be nested/indexed/mapped/combo)
+509         * @param value Value to be set
+510         *
+511         * @exception IllegalAccessException if the caller does not have
+512         *  access to the property accessor method
+513         * @exception InvocationTargetException if the property accessor method
+514         *  throws an exception
+515         *
+516         * @see LocaleBeanUtilsBean#setProperty(Object, String, Object)
+517         */
+518        public static void setProperty(Object bean, String name, Object value)
+519                throws IllegalAccessException, InvocationTargetException {
+520    
+521            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setProperty(bean, name, value);
+522        }
+523    
+524        /**
+525         * <p>Set the specified locale-sensitive property value, performing type
+526         * conversions as required to conform to the type of the destination
+527         * property using the specified conversion pattern.</p>
+528         *
+529         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+530         *
+531         * @param bean Bean on which setting is to be performed
+532         * @param name Property name (can be nested/indexed/mapped/combo)
+533         * @param value Value to be set
+534         * @param pattern The conversion pattern
+535         *
+536         * @exception IllegalAccessException if the caller does not have
+537         *  access to the property accessor method
+538         * @exception InvocationTargetException if the property accessor method
+539         *  throws an exception
+540         *
+541         * @see LocaleBeanUtilsBean#setProperty(Object, String, Object, String)
+542         */
+543        public static void setProperty(Object bean, String name, Object value, String pattern)
+544                throws IllegalAccessException, InvocationTargetException {
+545    
+546            LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().setProperty(bean, name, value, pattern);
+547         }
+548    
+549        /**
+550         * <p>Calculate the property type.</p>
+551         *
+552         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+553         *
+554         * @param target The bean
+555         * @param name The property name
+556         * @param propName The Simple name of target property
+557         * @return The property's type
+558         *
+559         * @exception IllegalAccessException if the caller does not have
+560         *  access to the property accessor method
+561         * @exception InvocationTargetException if the property accessor method
+562         *  throws an exception
+563         *
+564         * @see LocaleBeanUtilsBean#definePropertyType(Object, String, String)
+565         */
+566        protected static Class definePropertyType(Object target, String name, String propName)
+567                throws IllegalAccessException, InvocationTargetException {
+568    
+569            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().definePropertyType(target, name, propName);
+570        }
+571    
+572        /**
+573         * <p>Convert the specified value to the required type using the
+574         * specified conversion pattern.</p>
+575         *
+576         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+577         *
+578         * @param type The Java type of target property
+579         * @param index The indexed subscript value (if any)
+580         * @param value The value to be converted
+581         * @param pattern The conversion pattern
+582         * @return The converted value
+583         * @see LocaleBeanUtilsBean#convert(Class, int, Object, String)
+584         */
+585        protected static Object convert(Class type, int index, Object value, String pattern) {
+586    
+587            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().convert(type, index, value, pattern);
+588        }
+589    
+590        /**
+591         * <p>Convert the specified value to the required type.</p>
+592         *
+593         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+594         *
+595         * @param type The Java type of target property
+596         * @param index The indexed subscript value (if any)
+597         * @param value The value to be converted
+598         * @return The converted value
+599         * @see LocaleBeanUtilsBean#convert(Class, int, Object)
+600         */
+601        protected static Object convert(Class type, int index, Object value) {
+602    
+603            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().convert(type, index, value);
+604        }
+605    
+606        /**
+607         * <p>Invoke the setter method.</p>
+608         *
+609         * <p>For more details see <code>LocaleBeanUtilsBean</code></p>
+610         *
+611         * @param target The bean
+612         * @param propName The Simple name of target property
+613         * @param key The Mapped key value (if any)
+614         * @param index The indexed subscript value (if any)
+615         * @param newValue The value to be set
+616         *
+617         * @exception IllegalAccessException if the caller does not have
+618         *  access to the property accessor method
+619         * @exception InvocationTargetException if the property accessor method
+620         *  throws an exception
+621         *
+622         * @see LocaleBeanUtilsBean#invokeSetter(Object, String, String, int, Object)
+623         */
+624        protected static void invokeSetter(Object target, String propName, String key, int index, Object newValue)
+625                throws IllegalAccessException, InvocationTargetException {
+626    
+627           LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().invokeSetter(target, propName, key, index, newValue);
+628        }
+629    
+630        /**
+631         * Resolve any nested expression to get the actual target bean.
+632         *
+633         * @deprecated moved into <code>LocaleBeanUtilsBean</code>
+634         * @param bean The bean
+635         * @param name The property name
+636         * @return The property's descriptor
+637         *
+638         * @exception IllegalAccessException if the caller does not have
+639         *  access to the property accessor method
+640         * @exception InvocationTargetException if the property accessor method
+641         *  throws an exception
+642         */
+643        protected static Descriptor calculate(Object bean, String name)
+644                throws IllegalAccessException, InvocationTargetException {
+645    
+646            org.apache.commons.beanutils.locale.LocaleBeanUtilsBean.Descriptor descriptor
+647                = LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().calculate(bean, name);
+648            return new Descriptor(
+649                    descriptor.getTarget(),
+650                    descriptor.getName(),
+651                    descriptor.getPropName(),
+652                    descriptor.getKey(),
+653                    descriptor.getIndex());
+654        }
+655    
+656        /** @deprecated moved into <code>LocaleBeanUtils</code> */
+657        protected static class Descriptor {
+658    
+659            private int index = -1;    // Indexed subscript value (if any)
+660            private String name;
+661            private String propName;   // Simple name of target property
+662            private String key;        // Mapped key value (if any)
+663            private Object target;
+664    
+665            /**
+666             * Construct a descriptor instance for the target bean and property.
+667             *
+668             * @param target The target bean
+669             * @param name The property name (includes indexed/mapped expr)
+670             * @param propName The property name
+671             * @param key The mapped property key (if any)
+672             * @param index The indexed property index (if any)
+673             */
+674            public Descriptor(Object target, String name, String propName, String key, int index) {
+675    
+676                setTarget(target);
+677                setName(name);
+678                setPropName(propName);
+679                setKey(key);
+680                setIndex(index);
+681            }
+682    
+683            /**
+684             * Return the target bean.
+685             *
+686             * @return The descriptors target bean
+687             */
+688            public Object getTarget() {
+689                return target;
+690            }
+691    
+692            /**
+693             * Set the target bean.
+694             *
+695             * @param target The target bean
+696             */
+697            public void setTarget(Object target) {
+698                this.target = target;
+699            }
+700    
+701            /**
+702             * Return the mapped property key.
+703             *
+704             * @return the mapped property key (if any)
+705             */
+706            public String getKey() {
+707                return key;
+708            }
+709    
+710            /**
+711             * Set the mapped property key.
+712             *
+713             * @param key The mapped property key (if any)
+714             */
+715            public void setKey(String key) {
+716                this.key = key;
+717            }
+718    
+719            /**
+720             * Return indexed property index.
+721             *
+722             * @return indexed property index (if any)
+723             */
+724            public int getIndex() {
+725                return index;
+726            }
+727    
+728            /**
+729             * Set the indexed property index.
+730             *
+731             * @param index The indexed property index (if any)
+732             */
+733            public void setIndex(int index) {
+734                this.index = index;
+735            }
+736    
+737            /**
+738             * Return property name (includes indexed/mapped expr).
+739             *
+740             * @return The property name (includes indexed/mapped expr)
+741             */
+742            public String getName() {
+743                return name;
+744            }
+745    
+746            /**
+747             * Set the property name (includes indexed/mapped expr).
+748             *
+749             * @param name The property name (includes indexed/mapped expr)
+750             */
+751            public void setName(String name) {
+752                this.name = name;
+753            }
+754    
+755            /**
+756             * Return the property name.
+757             *
+758             * @return The property name
+759             */
+760            public String getPropName() {
+761                return propName;
+762            }
+763    
+764            /**
+765             * Set the property name.
+766             *
+767             * @param propName The property name
+768             */
+769            public void setPropName(String propName) {
+770                this.propName = propName;
+771            }
+772        }
+773    }
+774    
+775    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html new file mode 100644 index 0000000..03e1967 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.Descriptor.html @@ -0,0 +1,1125 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    
+021    import org.apache.commons.beanutils.BeanUtilsBean;
+022    import org.apache.commons.beanutils.ConvertUtils;
+023    import org.apache.commons.beanutils.ConvertUtilsBean;
+024    import org.apache.commons.beanutils.DynaBean;
+025    import org.apache.commons.beanutils.DynaClass;
+026    import org.apache.commons.beanutils.DynaProperty;
+027    import org.apache.commons.beanutils.MappedPropertyDescriptor;
+028    import org.apache.commons.beanutils.PropertyUtilsBean;
+029    import org.apache.commons.beanutils.ContextClassLoaderLocal;
+030    import org.apache.commons.beanutils.expression.Resolver;
+031    import org.apache.commons.logging.Log;
+032    import org.apache.commons.logging.LogFactory;
+033    
+034    import java.beans.IndexedPropertyDescriptor;
+035    import java.beans.PropertyDescriptor;
+036    import java.lang.reflect.InvocationTargetException;
+037    import java.util.Locale;
+038    
+039    
+040    /**
+041     * <p>Utility methods for populating JavaBeans properties
+042     * via reflection in a locale-dependent manner.</p>
+043     *
+044     * @author Craig R. McClanahan
+045     * @author Ralph Schaer
+046     * @author Chris Audley
+047     * @author Rey Francois
+048     * @author Gregor Rayman
+049     * @author Yauheny Mikulski
+050     * @since 1.7
+051     */
+052    
+053    public class LocaleBeanUtilsBean extends BeanUtilsBean {
+054    
+055        /** 
+056         * Contains <code>LocaleBeanUtilsBean</code> instances indexed by context classloader.
+057         */
+058        private static final ContextClassLoaderLocal 
+059                LOCALE_BEANS_BY_CLASSLOADER = new ContextClassLoaderLocal() {
+060                            // Creates the default instance used when the context classloader is unavailable
+061                            protected Object initialValue() {
+062                                return new LocaleBeanUtilsBean();
+063                            }
+064                        };
+065         
+066         /**
+067          * Gets singleton instance
+068          *
+069          * @return the singleton instance
+070          */
+071         public static LocaleBeanUtilsBean getLocaleBeanUtilsInstance() {
+072            return (LocaleBeanUtilsBean)LOCALE_BEANS_BY_CLASSLOADER.get();
+073         }
+074     
+075        /** 
+076         * Sets the instance which provides the functionality for {@link LocaleBeanUtils}.
+077         * This is a pseudo-singleton - an single instance is provided per (thread) context classloader.
+078         * This mechanism provides isolation for web apps deployed in the same container.
+079         * 
+080         * @param newInstance a new singleton instance
+081         */
+082        public static void setInstance(LocaleBeanUtilsBean newInstance) {
+083            LOCALE_BEANS_BY_CLASSLOADER.set(newInstance);
+084        }
+085    
+086        /** All logging goes through this logger */
+087        private Log log = LogFactory.getLog(LocaleBeanUtilsBean.class);
+088    
+089        // ----------------------------------------------------- Instance Variables
+090            
+091        /** Convertor used by this class */
+092        private LocaleConvertUtilsBean localeConvertUtils;
+093        
+094        // --------------------------------------------------------- Constructors
+095        
+096        /** Construct instance with standard conversion bean */
+097        public LocaleBeanUtilsBean() {
+098            this.localeConvertUtils = new LocaleConvertUtilsBean();
+099        }
+100        
+101        /** 
+102         * Construct instance that uses given locale conversion
+103         *
+104         * @param localeConvertUtils use this <code>localeConvertUtils</code> to perform
+105         * conversions
+106         * @param convertUtilsBean use this for standard conversions
+107         * @param propertyUtilsBean use this for property conversions
+108         */
+109        public LocaleBeanUtilsBean(
+110                                LocaleConvertUtilsBean localeConvertUtils,
+111                                ConvertUtilsBean convertUtilsBean,
+112                                PropertyUtilsBean propertyUtilsBean) {
+113            super(convertUtilsBean, propertyUtilsBean);
+114            this.localeConvertUtils = localeConvertUtils;
+115        }
+116        
+117        /** 
+118         * Construct instance that uses given locale conversion
+119         *
+120         * @param localeConvertUtils use this <code>localeConvertUtils</code> to perform
+121         * conversions
+122         */
+123        public LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils) {
+124            this.localeConvertUtils = localeConvertUtils;
+125        }
+126        
+127        // --------------------------------------------------------- Public Methods
+128        
+129        /**
+130         * Gets the bean instance used for conversions
+131         *
+132         * @return the locale converter bean instance
+133         */
+134        public LocaleConvertUtilsBean getLocaleConvertUtils() {
+135            return localeConvertUtils;
+136        }
+137        
+138        /**
+139         * Gets the default Locale
+140         * @return the default locale
+141         */
+142        public Locale getDefaultLocale() {
+143    
+144            return getLocaleConvertUtils().getDefaultLocale();
+145        }
+146    
+147    
+148        /**
+149         * Sets the default Locale.
+150         *
+151         * @param locale the default locale
+152         */
+153        public void setDefaultLocale(Locale locale) {
+154    
+155            getLocaleConvertUtils().setDefaultLocale(locale);
+156        }
+157    
+158        /**
+159         * Is the pattern to be applied localized
+160         * (Indicate whether the pattern is localized or not)
+161         *
+162         * @return <code>true</code> if pattern is localized,
+163         * otherwise <code>false</code>
+164         */
+165        public boolean getApplyLocalized() {
+166    
+167            return getLocaleConvertUtils().getApplyLocalized();
+168        }
+169    
+170        /**
+171         * Sets whether the pattern is applied localized
+172         * (Indicate whether the pattern is localized or not)
+173         *
+174         * @param newApplyLocalized <code>true</code> if pattern is localized,
+175         * otherwise <code>false</code>
+176         */
+177        public void setApplyLocalized(boolean newApplyLocalized) {
+178    
+179            getLocaleConvertUtils().setApplyLocalized(newApplyLocalized);
+180        }
+181    
+182    
+183        // --------------------------------------------------------- Public Methods
+184    
+185        /**
+186         * Return the value of the specified locale-sensitive indexed property
+187         * of the specified bean, as a String. The zero-relative index of the
+188         * required value must be included (in square brackets) as a suffix to
+189         * the property name, or <code>IllegalArgumentException</code> will be
+190         * thrown.
+191         *
+192         * @param bean Bean whose property is to be extracted
+193         * @param name <code>propertyname[index]</code> of the property value
+194         *  to be extracted
+195         * @param pattern The conversion pattern
+196         * @return The indexed property's value, converted to a String
+197         *
+198         * @exception IllegalAccessException if the caller does not have
+199         *  access to the property accessor method
+200         * @exception InvocationTargetException if the property accessor method
+201         *  throws an exception
+202         * @exception NoSuchMethodException if an accessor method for this
+203         *  propety cannot be found
+204         */
+205        public String getIndexedProperty(
+206                                        Object bean, 
+207                                        String name, 
+208                                        String pattern)
+209                                            throws 
+210                                                IllegalAccessException, 
+211                                                InvocationTargetException,
+212                                                NoSuchMethodException {
+213    
+214            Object value = getPropertyUtils().getIndexedProperty(bean, name);
+215            return getLocaleConvertUtils().convert(value, pattern);
+216        }
+217    
+218        /**
+219         * Return the value of the specified locale-sensitive indexed property
+220         * of the specified bean, as a String using the default conversion pattern of
+221         * the corresponding {@link LocaleConverter}. The zero-relative index
+222         * of the required value must be included (in square brackets) as a suffix
+223         * to the property name, or <code>IllegalArgumentException</code> will be thrown.
+224         *
+225         * @param bean Bean whose property is to be extracted
+226         * @param name <code>propertyname[index]</code> of the property value
+227         *  to be extracted
+228         * @return The indexed property's value, converted to a String
+229         *
+230         * @exception IllegalAccessException if the caller does not have
+231         *  access to the property accessor method
+232         * @exception InvocationTargetException if the property accessor method
+233         *  throws an exception
+234         * @exception NoSuchMethodException if an accessor method for this
+235         *  propety cannot be found
+236         */
+237        public String getIndexedProperty(
+238                                        Object bean, 
+239                                        String name)
+240                                            throws 
+241                                                IllegalAccessException, 
+242                                                InvocationTargetException,
+243                                                NoSuchMethodException {
+244    
+245            return getIndexedProperty(bean, name, null);
+246        }
+247    
+248        /**
+249         * Return the value of the specified locale-sensetive indexed property
+250         * of the specified bean, as a String using the specified conversion pattern.
+251         * The index is specified as a method parameter and
+252         * must *not* be included in the property name expression
+253         *
+254         * @param bean Bean whose property is to be extracted
+255         * @param name Simple property name of the property value to be extracted
+256         * @param index Index of the property value to be extracted
+257         * @param pattern The conversion pattern
+258         * @return The indexed property's value, converted to a String
+259         *
+260         * @exception IllegalAccessException if the caller does not have
+261         *  access to the property accessor method
+262         * @exception InvocationTargetException if the property accessor method
+263         *  throws an exception
+264         * @exception NoSuchMethodException if an accessor method for this
+265         *  propety cannot be found
+266         */
+267        public String getIndexedProperty(Object bean,
+268                                                String name, int index, String pattern)
+269                throws IllegalAccessException, InvocationTargetException,
+270                NoSuchMethodException {
+271    
+272            Object value = getPropertyUtils().getIndexedProperty(bean, name, index);
+273            return getLocaleConvertUtils().convert(value, pattern);
+274        }
+275    
+276        /**
+277         * Return the value of the specified locale-sensetive indexed property
+278         * of the specified bean, as a String using the default conversion pattern of
+279         * the corresponding {@link LocaleConverter}.
+280         * The index is specified as a method parameter and
+281         * must *not* be included in the property name expression
+282         *
+283         * @param bean Bean whose property is to be extracted
+284         * @param name Simple property name of the property value to be extracted
+285         * @param index Index of the property value to be extracted
+286         * @return The indexed property's value, converted to a String
+287         *
+288         * @exception IllegalAccessException if the caller does not have
+289         *  access to the property accessor method
+290         * @exception InvocationTargetException if the property accessor method
+291         *  throws an exception
+292         * @exception NoSuchMethodException if an accessor method for this
+293         *  propety cannot be found
+294         */
+295        public String getIndexedProperty(Object bean,
+296                                                String name, int index)
+297                throws IllegalAccessException, InvocationTargetException,
+298                NoSuchMethodException {
+299            return getIndexedProperty(bean, name, index, null);
+300        }
+301    
+302        /**
+303         * Return the value of the specified simple locale-sensitive property
+304         * of the specified bean, converted to a String using the specified
+305         * conversion pattern.
+306         *
+307         * @param bean Bean whose property is to be extracted
+308         * @param name Name of the property to be extracted
+309         * @param pattern The conversion pattern
+310         * @return The property's value, converted to a String
+311         *
+312         * @exception IllegalAccessException if the caller does not have
+313         *  access to the property accessor method
+314         * @exception InvocationTargetException if the property accessor method
+315         *  throws an exception
+316         * @exception NoSuchMethodException if an accessor method for this
+317         *  propety cannot be found
+318         */
+319        public String getSimpleProperty(Object bean, String name, String pattern)
+320                throws IllegalAccessException, InvocationTargetException,
+321                NoSuchMethodException {
+322    
+323            Object value = getPropertyUtils().getSimpleProperty(bean, name);
+324            return getLocaleConvertUtils().convert(value, pattern);
+325        }
+326    
+327        /**
+328         * Return the value of the specified simple locale-sensitive property
+329         * of the specified bean, converted to a String using the default
+330         * conversion pattern of the corresponding {@link LocaleConverter}.
+331         *
+332         * @param bean Bean whose property is to be extracted
+333         * @param name Name of the property to be extracted
+334         * @return The property's value, converted to a String
+335         *
+336         * @exception IllegalAccessException if the caller does not have
+337         *  access to the property accessor method
+338         * @exception InvocationTargetException if the property accessor method
+339         *  throws an exception
+340         * @exception NoSuchMethodException if an accessor method for this
+341         *  propety cannot be found
+342         */
+343        public String getSimpleProperty(Object bean, String name)
+344                throws IllegalAccessException, InvocationTargetException,
+345                NoSuchMethodException {
+346    
+347            return getSimpleProperty(bean, name, null);
+348        }
+349    
+350        /**
+351         * Return the value of the specified mapped locale-sensitive property
+352         * of the specified bean, as a String using the specified conversion pattern.
+353         * The key is specified as a method parameter and must *not* be included in
+354         * the property name expression.
+355         *
+356         * @param bean Bean whose property is to be extracted
+357         * @param name Simple property name of the property value to be extracted
+358         * @param key Lookup key of the property value to be extracted
+359         * @param pattern The conversion pattern
+360         * @return The mapped property's value, converted to a String
+361         *
+362         * @exception IllegalAccessException if the caller does not have
+363         *  access to the property accessor method
+364         * @exception InvocationTargetException if the property accessor method
+365         *  throws an exception
+366         * @exception NoSuchMethodException if an accessor method for this
+367         *  propety cannot be found
+368         */
+369        public String getMappedProperty(
+370                                        Object bean,
+371                                        String name, 
+372                                        String key, 
+373                                        String pattern)
+374                                            throws 
+375                                                IllegalAccessException, 
+376                                                InvocationTargetException,
+377                                                NoSuchMethodException {
+378    
+379            Object value = getPropertyUtils().getMappedProperty(bean, name, key);
+380            return getLocaleConvertUtils().convert(value, pattern);
+381        }
+382    
+383        /**
+384         * Return the value of the specified mapped locale-sensitive property
+385         * of the specified bean, as a String
+386         * The key is specified as a method parameter and must *not* be included
+387         * in the property name expression
+388         *
+389         * @param bean Bean whose property is to be extracted
+390         * @param name Simple property name of the property value to be extracted
+391         * @param key Lookup key of the property value to be extracted
+392         * @return The mapped property's value, converted to a String
+393         *
+394         * @exception IllegalAccessException if the caller does not have
+395         *  access to the property accessor method
+396         * @exception InvocationTargetException if the property accessor method
+397         *  throws an exception
+398         * @exception NoSuchMethodException if an accessor method for this
+399         *  propety cannot be found
+400         */
+401        public String getMappedProperty(Object bean,
+402                                               String name, String key)
+403                throws IllegalAccessException, InvocationTargetException,
+404                NoSuchMethodException {
+405    
+406            return getMappedProperty(bean, name, key, null);
+407        }
+408    
+409    
+410        /**
+411         * Return the value of the specified locale-sensitive mapped property
+412         * of the specified bean, as a String using the specified pattern.
+413         * The String-valued key of the required value
+414         * must be included (in parentheses) as a suffix to
+415         * the property name, or <code>IllegalArgumentException</code> will be
+416         * thrown.
+417         *
+418         * @param bean Bean whose property is to be extracted
+419         * @param name <code>propertyname(index)</code> of the property value
+420         *  to be extracted
+421         * @param pattern The conversion pattern
+422         * @return The mapped property's value, converted to a String
+423         *
+424         * @exception IllegalAccessException if the caller does not have
+425         *  access to the property accessor method
+426         * @exception InvocationTargetException if the property accessor method
+427         *  throws an exception
+428         * @exception NoSuchMethodException if an accessor method for this
+429         *  propety cannot be found
+430         */
+431        public String getMappedPropertyLocale(
+432                                            Object bean, 
+433                                            String name, 
+434                                            String pattern)
+435                                                throws 
+436                                                    IllegalAccessException, 
+437                                                    InvocationTargetException,
+438                                                    NoSuchMethodException {
+439    
+440            Object value = getPropertyUtils().getMappedProperty(bean, name);
+441            return getLocaleConvertUtils().convert(value, pattern);
+442        }
+443    
+444    
+445        /**
+446         * Return the value of the specified locale-sensitive mapped property
+447         * of the specified bean, as a String using the default
+448         * conversion pattern of the corresponding {@link LocaleConverter}.
+449         * The String-valued key of the required value
+450         * must be included (in parentheses) as a suffix to
+451         * the property name, or <code>IllegalArgumentException</code> will be
+452         * thrown.
+453         *
+454         * @param bean Bean whose property is to be extracted
+455         * @param name <code>propertyname(index)</code> of the property value
+456         *  to be extracted
+457         * @return The mapped property's value, converted to a String
+458         *
+459         * @exception IllegalAccessException if the caller does not have
+460         *  access to the property accessor method
+461         * @exception InvocationTargetException if the property accessor method
+462         *  throws an exception
+463         * @exception NoSuchMethodException if an accessor method for this
+464         *  propety cannot be found
+465         */
+466        public String getMappedProperty(Object bean, String name)
+467                                        throws 
+468                                            IllegalAccessException, 
+469                                            InvocationTargetException,
+470                                            NoSuchMethodException {
+471    
+472            return getMappedPropertyLocale(bean, name, null);
+473        }
+474    
+475        /**
+476         * Return the value of the (possibly nested) locale-sensitive property
+477         * of the specified name, for the specified bean,
+478         * as a String using the specified pattern.
+479         *
+480         * @param bean Bean whose property is to be extracted
+481         * @param name Possibly nested name of the property to be extracted
+482         * @param pattern The conversion pattern
+483         * @return The nested property's value, converted to a String
+484         *
+485         * @exception IllegalAccessException if the caller does not have
+486         *  access to the property accessor method
+487         * @exception IllegalArgumentException if a nested reference to a
+488         *  property returns null
+489         * @exception InvocationTargetException if the property accessor method
+490         *  throws an exception
+491         * @exception NoSuchMethodException if an accessor method for this
+492         *  propety cannot be found
+493         */
+494        public String getNestedProperty(    
+495                                        Object bean, 
+496                                        String name, 
+497                                        String pattern)
+498                                            throws 
+499                                                IllegalAccessException, 
+500                                                InvocationTargetException,
+501                                                NoSuchMethodException {
+502    
+503            Object value = getPropertyUtils().getNestedProperty(bean, name);
+504            return getLocaleConvertUtils().convert(value, pattern);
+505        }
+506    
+507        /**
+508         * Return the value of the (possibly nested) locale-sensitive property
+509         * of the specified name, for the specified bean, as a String using the default
+510         * conversion pattern of the corresponding {@link LocaleConverter}.
+511         *
+512         * @param bean Bean whose property is to be extracted
+513         * @param name Possibly nested name of the property to be extracted
+514         * @return The nested property's value, converted to a String
+515         *
+516         * @exception IllegalAccessException if the caller does not have
+517         *  access to the property accessor method
+518         * @exception IllegalArgumentException if a nested reference to a
+519         *  property returns null
+520         * @exception InvocationTargetException if the property accessor method
+521         *  throws an exception
+522         * @exception NoSuchMethodException if an accessor method for this
+523         *  propety cannot be found
+524         */
+525        public String getNestedProperty(Object bean, String name)
+526                                        throws 
+527                                            IllegalAccessException, 
+528                                            InvocationTargetException,
+529                                            NoSuchMethodException {
+530    
+531            return getNestedProperty(bean, name, null);
+532        }
+533    
+534        /**
+535         * Return the value of the specified locale-sensitive property
+536         * of the specified bean, no matter which property reference
+537         * format is used, as a String using the specified conversion pattern.
+538         *
+539         * @param bean Bean whose property is to be extracted
+540         * @param name Possibly indexed and/or nested name of the property
+541         *  to be extracted
+542         * @param pattern The conversion pattern
+543         * @return The nested property's value, converted to a String
+544         *
+545         * @exception IllegalAccessException if the caller does not have
+546         *  access to the property accessor method
+547         * @exception InvocationTargetException if the property accessor method
+548         *  throws an exception
+549         * @exception NoSuchMethodException if an accessor method for this
+550         *  propety cannot be found
+551         */
+552        public String getProperty(Object bean, String name, String pattern)
+553                                    throws 
+554                                        IllegalAccessException, 
+555                                        InvocationTargetException,
+556                                        NoSuchMethodException {
+557    
+558            return getNestedProperty(bean, name, pattern);
+559        }
+560    
+561        /**
+562         * Return the value of the specified locale-sensitive property
+563         * of the specified bean, no matter which property reference
+564         * format is used, as a String using the default
+565         * conversion pattern of the corresponding {@link LocaleConverter}.
+566         *
+567         * @param bean Bean whose property is to be extracted
+568         * @param name Possibly indexed and/or nested name of the property
+569         *  to be extracted
+570         * @return The property's value, converted to a String
+571         *
+572         * @exception IllegalAccessException if the caller does not have
+573         *  access to the property accessor method
+574         * @exception InvocationTargetException if the property accessor method
+575         *  throws an exception
+576         * @exception NoSuchMethodException if an accessor method for this
+577         *  propety cannot be found
+578         */
+579        public String getProperty(Object bean, String name)
+580                                    throws 
+581                                        IllegalAccessException, 
+582                                        InvocationTargetException,
+583                                        NoSuchMethodException {
+584    
+585            return getNestedProperty(bean, name);
+586        }
+587    
+588        /**
+589         * Set the specified locale-sensitive property value, performing type
+590         * conversions as required to conform to the type of the destination property
+591         * using the default conversion pattern of the corresponding {@link LocaleConverter}.
+592         *
+593         * @param bean Bean on which setting is to be performed
+594         * @param name Property name (can be nested/indexed/mapped/combo)
+595         * @param value Value to be set
+596         *
+597         * @exception IllegalAccessException if the caller does not have
+598         *  access to the property accessor method
+599         * @exception InvocationTargetException if the property accessor method
+600         *  throws an exception
+601         */
+602        public void setProperty(Object bean, String name, Object value)
+603                                    throws 
+604                                        IllegalAccessException, 
+605                                        InvocationTargetException {
+606    
+607            setProperty(bean, name, value, null);
+608        }
+609    
+610        /**
+611         * Set the specified locale-sensitive property value, performing type
+612         * conversions as required to conform to the type of the destination
+613         * property using the specified conversion pattern.
+614         *
+615         * @param bean Bean on which setting is to be performed
+616         * @param name Property name (can be nested/indexed/mapped/combo)
+617         * @param value Value to be set
+618         * @param pattern The conversion pattern
+619         *
+620         * @exception IllegalAccessException if the caller does not have
+621         *  access to the property accessor method
+622         * @exception InvocationTargetException if the property accessor method
+623         *  throws an exception
+624         */
+625        public void setProperty(
+626                                Object bean, 
+627                                String name, 
+628                                Object value, 
+629                                String pattern)
+630                                    throws 
+631                                        IllegalAccessException, 
+632                                        InvocationTargetException {
+633    
+634            // Trace logging (if enabled)
+635            if (log.isTraceEnabled()) {
+636                StringBuffer sb = new StringBuffer("  setProperty(");
+637                sb.append(bean);
+638                sb.append(", ");
+639                sb.append(name);
+640                sb.append(", ");
+641                if (value == null) {
+642                    sb.append("<NULL>");
+643                }
+644                else if (value instanceof String) {
+645                    sb.append((String) value);
+646                }
+647                else if (value instanceof String[]) {
+648                    String[] values = (String[]) value;
+649                    sb.append('[');
+650                    for (int i = 0; i < values.length; i++) {
+651                        if (i > 0) {
+652                            sb.append(',');
+653                        }
+654                        sb.append(values[i]);
+655                    }
+656                    sb.append(']');
+657                }
+658                else {
+659                    sb.append(value.toString());
+660                }
+661                sb.append(')');
+662                log.trace(sb.toString());
+663            }
+664    
+665            // Resolve any nested expression to get the actual target bean
+666            Object target = bean;
+667            Resolver resolver = getPropertyUtils().getResolver();
+668            while (resolver.hasNested(name)) {
+669                try {
+670                    target = getPropertyUtils().getProperty(target, resolver.next(name));
+671                    name = resolver.remove(name);
+672                } catch (NoSuchMethodException e) {
+673                    return; // Skip this property setter
+674                }
+675            }
+676            if (log.isTraceEnabled()) {
+677                log.trace("    Target bean = " + target);
+678                log.trace("    Target name = " + name);
+679            }
+680    
+681            // Declare local variables we will require
+682            String propName = resolver.getProperty(name); // Simple name of target property
+683            int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
+684            String key = resolver.getKey(name);           // Mapped key value (if any)
+685    
+686            Class type = definePropertyType(target, name, propName);
+687            if (type != null) {
+688                Object newValue = convert(type, index, value, pattern);
+689                invokeSetter(target, propName, key, index, newValue);
+690            }
+691        }
+692    
+693        /**
+694         * Calculate the property type.
+695         *
+696         * @param target The bean
+697         * @param name The property name
+698         * @param propName The Simple name of target property
+699         * @return The property's type
+700         *
+701         * @exception IllegalAccessException if the caller does not have
+702         *  access to the property accessor method
+703         * @exception InvocationTargetException if the property accessor method
+704         *  throws an exception
+705         */
+706        protected Class definePropertyType(Object target, String name, String propName)
+707                throws IllegalAccessException, InvocationTargetException {
+708    
+709            Class type = null;               // Java type of target property
+710    
+711            if (target instanceof DynaBean) {
+712                DynaClass dynaClass = ((DynaBean) target).getDynaClass();
+713                DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);
+714                if (dynaProperty == null) {
+715                    return null; // Skip this property setter
+716                }
+717                type = dynaProperty.getType();
+718            }
+719            else {
+720                PropertyDescriptor descriptor = null;
+721                try {
+722                    descriptor =
+723                            getPropertyUtils().getPropertyDescriptor(target, name);
+724                    if (descriptor == null) {
+725                        return null; // Skip this property setter
+726                    }
+727                }
+728                catch (NoSuchMethodException e) {
+729                    return null; // Skip this property setter
+730                }
+731                if (descriptor instanceof MappedPropertyDescriptor) {
+732                    type = ((MappedPropertyDescriptor) descriptor).
+733                            getMappedPropertyType();
+734                }
+735                else if (descriptor instanceof IndexedPropertyDescriptor) {
+736                    type = ((IndexedPropertyDescriptor) descriptor).
+737                            getIndexedPropertyType();
+738                }
+739                else {
+740                    type = descriptor.getPropertyType();
+741                }
+742            }
+743            return type;
+744        }
+745    
+746        /**
+747         * Convert the specified value to the required type using the
+748         * specified conversion pattern.
+749         *
+750         * @param type The Java type of target property
+751         * @param index The indexed subscript value (if any)
+752         * @param value The value to be converted
+753         * @param pattern The conversion pattern
+754         * @return The converted value
+755         */
+756        protected Object convert(Class type, int index, Object value, String pattern) {
+757    
+758            if (log.isTraceEnabled()) {
+759                log.trace("Converting value '" + value + "' to type:" + type);
+760            }
+761    
+762            Object newValue = null;
+763    
+764            if (type.isArray() && (index < 0)) { // Scalar value into array
+765                if (value instanceof String) {
+766                    String[] values = new String[1];
+767                    values[0] = (String) value;
+768                    newValue = getLocaleConvertUtils().convert(values, type, pattern);
+769                }
+770                else if (value instanceof String[]) {
+771                    newValue = getLocaleConvertUtils().convert((String[]) value, type, pattern);
+772                }
+773                else {
+774                    newValue = value;
+775                }
+776            }
+777            else if (type.isArray()) {         // Indexed value into array
+778                if (value instanceof String) {
+779                    newValue = getLocaleConvertUtils().convert((String) value,
+780                            type.getComponentType(), pattern);
+781                }
+782                else if (value instanceof String[]) {
+783                    newValue = getLocaleConvertUtils().convert(((String[]) value)[0],
+784                            type.getComponentType(), pattern);
+785                }
+786                else {
+787                    newValue = value;
+788                }
+789            }
+790            else {                             // Value into scalar
+791                if (value instanceof String) {
+792                    newValue = getLocaleConvertUtils().convert((String) value, type, pattern);
+793                }
+794                else if (value instanceof String[]) {
+795                    newValue = getLocaleConvertUtils().convert(((String[]) value)[0],
+796                            type, pattern);
+797                }
+798                else {
+799                    newValue = value;
+800                }
+801            }
+802            return newValue;
+803        }
+804    
+805        /**
+806         *  Convert the specified value to the required type.
+807         *
+808         * @param type The Java type of target property
+809         * @param index The indexed subscript value (if any)
+810         * @param value The value to be converted
+811         * @return The converted value
+812         */
+813        protected Object convert(Class type, int index, Object value) {
+814    
+815            Object newValue = null;
+816    
+817            if (type.isArray() && (index < 0)) { // Scalar value into array
+818                if (value instanceof String) {
+819                    String[] values = new String[1];
+820                    values[0] = (String) value;
+821                    newValue = ConvertUtils.convert(values, type);
+822                }
+823                else if (value instanceof String[]) {
+824                    newValue = ConvertUtils.convert((String[]) value, type);
+825                }
+826                else {
+827                    newValue = value;
+828                }
+829            }
+830            else if (type.isArray()) {         // Indexed value into array
+831                if (value instanceof String) {
+832                    newValue = ConvertUtils.convert((String) value,
+833                            type.getComponentType());
+834                }
+835                else if (value instanceof String[]) {
+836                    newValue = ConvertUtils.convert(((String[]) value)[0],
+837                            type.getComponentType());
+838                }
+839                else {
+840                    newValue = value;
+841                }
+842            }
+843            else {                             // Value into scalar
+844                if (value instanceof String) {
+845                    newValue = ConvertUtils.convert((String) value, type);
+846                }
+847                else if (value instanceof String[]) {
+848                    newValue = ConvertUtils.convert(((String[]) value)[0],
+849                            type);
+850                }
+851                else {
+852                    newValue = value;
+853                }
+854            }
+855            return newValue;
+856        }
+857    
+858        /**
+859         * Invoke the setter method.
+860         *
+861         * @param target The bean
+862         * @param propName The Simple name of target property
+863         * @param key The Mapped key value (if any)
+864         * @param index The indexed subscript value (if any)
+865         * @param newValue The value to be set
+866         *
+867         * @exception IllegalAccessException if the caller does not have
+868         *  access to the property accessor method
+869         * @exception InvocationTargetException if the property accessor method
+870         *  throws an exception
+871         */
+872        protected void invokeSetter(Object target, String propName, String key, int index, Object newValue)
+873                throws IllegalAccessException, InvocationTargetException {
+874    
+875            try {
+876                if (index >= 0) {
+877                    getPropertyUtils().setIndexedProperty(target, propName,
+878                            index, newValue);
+879                }
+880                else if (key != null) {
+881                    getPropertyUtils().setMappedProperty(target, propName,
+882                            key, newValue);
+883                }
+884                else {
+885                    getPropertyUtils().setProperty(target, propName, newValue);
+886                }
+887            }
+888            catch (NoSuchMethodException e) {
+889                throw new InvocationTargetException
+890                        (e, "Cannot set " + propName);
+891            }
+892        }
+893    
+894        /**
+895         * Resolve any nested expression to get the actual target property.
+896         *
+897         * @param bean The bean
+898         * @param name The property name
+899         * @return The property's descriptor
+900         *
+901         * @exception IllegalAccessException if the caller does not have
+902         *  access to the property accessor method
+903         * @exception InvocationTargetException if the property accessor method
+904         *  throws an exception
+905         * @deprecated Property name expressions are now processed by
+906         * the configured {@link Resolver} implementation and this method
+907         * is no longer used by BeanUtils.
+908         */
+909        protected Descriptor calculate(Object bean, String name)
+910                throws IllegalAccessException, InvocationTargetException {
+911    
+912            // Resolve any nested expression to get the actual target bean
+913            Object target = bean;
+914            Resolver resolver = getPropertyUtils().getResolver();
+915            while (resolver.hasNested(name)) {
+916                try {
+917                    target = getPropertyUtils().getProperty(target, resolver.next(name));
+918                    name = resolver.remove(name);
+919                } catch (NoSuchMethodException e) {
+920                    return null; // Skip this property setter
+921                }
+922            }
+923            if (log.isTraceEnabled()) {
+924                log.trace("    Target bean = " + target);
+925                log.trace("    Target name = " + name);
+926            }
+927    
+928            // Declare local variables we will require
+929            String propName = resolver.getProperty(name); // Simple name of target property
+930            int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
+931            String key = resolver.getKey(name);           // Mapped key value (if any)
+932    
+933            return new Descriptor(target, name, propName, key, index);
+934        }
+935    
+936        /**
+937         * @deprecated Property name expressions are now processed by
+938         * the configured {@link Resolver} implementation and this class
+939         * is no longer used by BeanUtils.
+940         */
+941        protected class Descriptor {
+942    
+943            private int index = -1;    // Indexed subscript value (if any)
+944            private String name;
+945            private String propName;   // Simple name of target property
+946            private String key;        // Mapped key value (if any)
+947            private Object target;
+948    
+949            /**
+950             * Construct a descriptor instance for the target bean and property.
+951             *
+952             * @param target The target bean
+953             * @param name The property name (includes indexed/mapped expr)
+954             * @param propName The property name
+955             * @param key The mapped property key (if any)
+956             * @param index The indexed property index (if any)
+957             */
+958            public Descriptor(Object target, String name, String propName, String key, int index) {
+959    
+960                setTarget(target);
+961                setName(name);
+962                setPropName(propName);
+963                setKey(key);
+964                setIndex(index);
+965            }
+966    
+967            /**
+968             * Return the target bean.
+969             *
+970             * @return The descriptors target bean
+971             */
+972            public Object getTarget() {
+973                return target;
+974            }
+975    
+976            /**
+977             * Set the target bean.
+978             *
+979             * @param target The target bean
+980             */
+981            public void setTarget(Object target) {
+982                this.target = target;
+983            }
+984    
+985            /**
+986             * Return the mapped property key.
+987             *
+988             * @return the mapped property key (if any)
+989             */
+990            public String getKey() {
+991                return key;
+992            }
+993    
+994            /**
+995             * Set the mapped property key.
+996             *
+997             * @param key The mapped property key (if any)
+998             */
+999            public void setKey(String key) {
+1000                this.key = key;
+1001            }
+1002    
+1003            /**
+1004             * Return indexed property index.
+1005             *
+1006             * @return indexed property index (if any)
+1007             */
+1008            public int getIndex() {
+1009                return index;
+1010            }
+1011    
+1012            /**
+1013             * Set the indexed property index.
+1014             *
+1015             * @param index The indexed property index (if any)
+1016             */
+1017            public void setIndex(int index) {
+1018                this.index = index;
+1019            }
+1020    
+1021            /**
+1022             * Return property name (includes indexed/mapped expr).
+1023             *
+1024             * @return The property name (includes indexed/mapped expr)
+1025             */
+1026            public String getName() {
+1027                return name;
+1028            }
+1029    
+1030            /**
+1031             * Set the property name (includes indexed/mapped expr).
+1032             *
+1033             * @param name The property name (includes indexed/mapped expr)
+1034             */
+1035            public void setName(String name) {
+1036                this.name = name;
+1037            }
+1038    
+1039            /**
+1040             * Return the property name.
+1041             *
+1042             * @return The property name
+1043             */
+1044            public String getPropName() {
+1045                return propName;
+1046            }
+1047    
+1048            /**
+1049             * Set the property name.
+1050             *
+1051             * @param propName The property name
+1052             */
+1053            public void setPropName(String propName) {
+1054                this.propName = propName;
+1055            }
+1056        }
+1057    }
+1058    
+1059    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html new file mode 100644 index 0000000..03e1967 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.html @@ -0,0 +1,1125 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    
+021    import org.apache.commons.beanutils.BeanUtilsBean;
+022    import org.apache.commons.beanutils.ConvertUtils;
+023    import org.apache.commons.beanutils.ConvertUtilsBean;
+024    import org.apache.commons.beanutils.DynaBean;
+025    import org.apache.commons.beanutils.DynaClass;
+026    import org.apache.commons.beanutils.DynaProperty;
+027    import org.apache.commons.beanutils.MappedPropertyDescriptor;
+028    import org.apache.commons.beanutils.PropertyUtilsBean;
+029    import org.apache.commons.beanutils.ContextClassLoaderLocal;
+030    import org.apache.commons.beanutils.expression.Resolver;
+031    import org.apache.commons.logging.Log;
+032    import org.apache.commons.logging.LogFactory;
+033    
+034    import java.beans.IndexedPropertyDescriptor;
+035    import java.beans.PropertyDescriptor;
+036    import java.lang.reflect.InvocationTargetException;
+037    import java.util.Locale;
+038    
+039    
+040    /**
+041     * <p>Utility methods for populating JavaBeans properties
+042     * via reflection in a locale-dependent manner.</p>
+043     *
+044     * @author Craig R. McClanahan
+045     * @author Ralph Schaer
+046     * @author Chris Audley
+047     * @author Rey Francois
+048     * @author Gregor Rayman
+049     * @author Yauheny Mikulski
+050     * @since 1.7
+051     */
+052    
+053    public class LocaleBeanUtilsBean extends BeanUtilsBean {
+054    
+055        /** 
+056         * Contains <code>LocaleBeanUtilsBean</code> instances indexed by context classloader.
+057         */
+058        private static final ContextClassLoaderLocal 
+059                LOCALE_BEANS_BY_CLASSLOADER = new ContextClassLoaderLocal() {
+060                            // Creates the default instance used when the context classloader is unavailable
+061                            protected Object initialValue() {
+062                                return new LocaleBeanUtilsBean();
+063                            }
+064                        };
+065         
+066         /**
+067          * Gets singleton instance
+068          *
+069          * @return the singleton instance
+070          */
+071         public static LocaleBeanUtilsBean getLocaleBeanUtilsInstance() {
+072            return (LocaleBeanUtilsBean)LOCALE_BEANS_BY_CLASSLOADER.get();
+073         }
+074     
+075        /** 
+076         * Sets the instance which provides the functionality for {@link LocaleBeanUtils}.
+077         * This is a pseudo-singleton - an single instance is provided per (thread) context classloader.
+078         * This mechanism provides isolation for web apps deployed in the same container.
+079         * 
+080         * @param newInstance a new singleton instance
+081         */
+082        public static void setInstance(LocaleBeanUtilsBean newInstance) {
+083            LOCALE_BEANS_BY_CLASSLOADER.set(newInstance);
+084        }
+085    
+086        /** All logging goes through this logger */
+087        private Log log = LogFactory.getLog(LocaleBeanUtilsBean.class);
+088    
+089        // ----------------------------------------------------- Instance Variables
+090            
+091        /** Convertor used by this class */
+092        private LocaleConvertUtilsBean localeConvertUtils;
+093        
+094        // --------------------------------------------------------- Constructors
+095        
+096        /** Construct instance with standard conversion bean */
+097        public LocaleBeanUtilsBean() {
+098            this.localeConvertUtils = new LocaleConvertUtilsBean();
+099        }
+100        
+101        /** 
+102         * Construct instance that uses given locale conversion
+103         *
+104         * @param localeConvertUtils use this <code>localeConvertUtils</code> to perform
+105         * conversions
+106         * @param convertUtilsBean use this for standard conversions
+107         * @param propertyUtilsBean use this for property conversions
+108         */
+109        public LocaleBeanUtilsBean(
+110                                LocaleConvertUtilsBean localeConvertUtils,
+111                                ConvertUtilsBean convertUtilsBean,
+112                                PropertyUtilsBean propertyUtilsBean) {
+113            super(convertUtilsBean, propertyUtilsBean);
+114            this.localeConvertUtils = localeConvertUtils;
+115        }
+116        
+117        /** 
+118         * Construct instance that uses given locale conversion
+119         *
+120         * @param localeConvertUtils use this <code>localeConvertUtils</code> to perform
+121         * conversions
+122         */
+123        public LocaleBeanUtilsBean(LocaleConvertUtilsBean localeConvertUtils) {
+124            this.localeConvertUtils = localeConvertUtils;
+125        }
+126        
+127        // --------------------------------------------------------- Public Methods
+128        
+129        /**
+130         * Gets the bean instance used for conversions
+131         *
+132         * @return the locale converter bean instance
+133         */
+134        public LocaleConvertUtilsBean getLocaleConvertUtils() {
+135            return localeConvertUtils;
+136        }
+137        
+138        /**
+139         * Gets the default Locale
+140         * @return the default locale
+141         */
+142        public Locale getDefaultLocale() {
+143    
+144            return getLocaleConvertUtils().getDefaultLocale();
+145        }
+146    
+147    
+148        /**
+149         * Sets the default Locale.
+150         *
+151         * @param locale the default locale
+152         */
+153        public void setDefaultLocale(Locale locale) {
+154    
+155            getLocaleConvertUtils().setDefaultLocale(locale);
+156        }
+157    
+158        /**
+159         * Is the pattern to be applied localized
+160         * (Indicate whether the pattern is localized or not)
+161         *
+162         * @return <code>true</code> if pattern is localized,
+163         * otherwise <code>false</code>
+164         */
+165        public boolean getApplyLocalized() {
+166    
+167            return getLocaleConvertUtils().getApplyLocalized();
+168        }
+169    
+170        /**
+171         * Sets whether the pattern is applied localized
+172         * (Indicate whether the pattern is localized or not)
+173         *
+174         * @param newApplyLocalized <code>true</code> if pattern is localized,
+175         * otherwise <code>false</code>
+176         */
+177        public void setApplyLocalized(boolean newApplyLocalized) {
+178    
+179            getLocaleConvertUtils().setApplyLocalized(newApplyLocalized);
+180        }
+181    
+182    
+183        // --------------------------------------------------------- Public Methods
+184    
+185        /**
+186         * Return the value of the specified locale-sensitive indexed property
+187         * of the specified bean, as a String. The zero-relative index of the
+188         * required value must be included (in square brackets) as a suffix to
+189         * the property name, or <code>IllegalArgumentException</code> will be
+190         * thrown.
+191         *
+192         * @param bean Bean whose property is to be extracted
+193         * @param name <code>propertyname[index]</code> of the property value
+194         *  to be extracted
+195         * @param pattern The conversion pattern
+196         * @return The indexed property's value, converted to a String
+197         *
+198         * @exception IllegalAccessException if the caller does not have
+199         *  access to the property accessor method
+200         * @exception InvocationTargetException if the property accessor method
+201         *  throws an exception
+202         * @exception NoSuchMethodException if an accessor method for this
+203         *  propety cannot be found
+204         */
+205        public String getIndexedProperty(
+206                                        Object bean, 
+207                                        String name, 
+208                                        String pattern)
+209                                            throws 
+210                                                IllegalAccessException, 
+211                                                InvocationTargetException,
+212                                                NoSuchMethodException {
+213    
+214            Object value = getPropertyUtils().getIndexedProperty(bean, name);
+215            return getLocaleConvertUtils().convert(value, pattern);
+216        }
+217    
+218        /**
+219         * Return the value of the specified locale-sensitive indexed property
+220         * of the specified bean, as a String using the default conversion pattern of
+221         * the corresponding {@link LocaleConverter}. The zero-relative index
+222         * of the required value must be included (in square brackets) as a suffix
+223         * to the property name, or <code>IllegalArgumentException</code> will be thrown.
+224         *
+225         * @param bean Bean whose property is to be extracted
+226         * @param name <code>propertyname[index]</code> of the property value
+227         *  to be extracted
+228         * @return The indexed property's value, converted to a String
+229         *
+230         * @exception IllegalAccessException if the caller does not have
+231         *  access to the property accessor method
+232         * @exception InvocationTargetException if the property accessor method
+233         *  throws an exception
+234         * @exception NoSuchMethodException if an accessor method for this
+235         *  propety cannot be found
+236         */
+237        public String getIndexedProperty(
+238                                        Object bean, 
+239                                        String name)
+240                                            throws 
+241                                                IllegalAccessException, 
+242                                                InvocationTargetException,
+243                                                NoSuchMethodException {
+244    
+245            return getIndexedProperty(bean, name, null);
+246        }
+247    
+248        /**
+249         * Return the value of the specified locale-sensetive indexed property
+250         * of the specified bean, as a String using the specified conversion pattern.
+251         * The index is specified as a method parameter and
+252         * must *not* be included in the property name expression
+253         *
+254         * @param bean Bean whose property is to be extracted
+255         * @param name Simple property name of the property value to be extracted
+256         * @param index Index of the property value to be extracted
+257         * @param pattern The conversion pattern
+258         * @return The indexed property's value, converted to a String
+259         *
+260         * @exception IllegalAccessException if the caller does not have
+261         *  access to the property accessor method
+262         * @exception InvocationTargetException if the property accessor method
+263         *  throws an exception
+264         * @exception NoSuchMethodException if an accessor method for this
+265         *  propety cannot be found
+266         */
+267        public String getIndexedProperty(Object bean,
+268                                                String name, int index, String pattern)
+269                throws IllegalAccessException, InvocationTargetException,
+270                NoSuchMethodException {
+271    
+272            Object value = getPropertyUtils().getIndexedProperty(bean, name, index);
+273            return getLocaleConvertUtils().convert(value, pattern);
+274        }
+275    
+276        /**
+277         * Return the value of the specified locale-sensetive indexed property
+278         * of the specified bean, as a String using the default conversion pattern of
+279         * the corresponding {@link LocaleConverter}.
+280         * The index is specified as a method parameter and
+281         * must *not* be included in the property name expression
+282         *
+283         * @param bean Bean whose property is to be extracted
+284         * @param name Simple property name of the property value to be extracted
+285         * @param index Index of the property value to be extracted
+286         * @return The indexed property's value, converted to a String
+287         *
+288         * @exception IllegalAccessException if the caller does not have
+289         *  access to the property accessor method
+290         * @exception InvocationTargetException if the property accessor method
+291         *  throws an exception
+292         * @exception NoSuchMethodException if an accessor method for this
+293         *  propety cannot be found
+294         */
+295        public String getIndexedProperty(Object bean,
+296                                                String name, int index)
+297                throws IllegalAccessException, InvocationTargetException,
+298                NoSuchMethodException {
+299            return getIndexedProperty(bean, name, index, null);
+300        }
+301    
+302        /**
+303         * Return the value of the specified simple locale-sensitive property
+304         * of the specified bean, converted to a String using the specified
+305         * conversion pattern.
+306         *
+307         * @param bean Bean whose property is to be extracted
+308         * @param name Name of the property to be extracted
+309         * @param pattern The conversion pattern
+310         * @return The property's value, converted to a String
+311         *
+312         * @exception IllegalAccessException if the caller does not have
+313         *  access to the property accessor method
+314         * @exception InvocationTargetException if the property accessor method
+315         *  throws an exception
+316         * @exception NoSuchMethodException if an accessor method for this
+317         *  propety cannot be found
+318         */
+319        public String getSimpleProperty(Object bean, String name, String pattern)
+320                throws IllegalAccessException, InvocationTargetException,
+321                NoSuchMethodException {
+322    
+323            Object value = getPropertyUtils().getSimpleProperty(bean, name);
+324            return getLocaleConvertUtils().convert(value, pattern);
+325        }
+326    
+327        /**
+328         * Return the value of the specified simple locale-sensitive property
+329         * of the specified bean, converted to a String using the default
+330         * conversion pattern of the corresponding {@link LocaleConverter}.
+331         *
+332         * @param bean Bean whose property is to be extracted
+333         * @param name Name of the property to be extracted
+334         * @return The property's value, converted to a String
+335         *
+336         * @exception IllegalAccessException if the caller does not have
+337         *  access to the property accessor method
+338         * @exception InvocationTargetException if the property accessor method
+339         *  throws an exception
+340         * @exception NoSuchMethodException if an accessor method for this
+341         *  propety cannot be found
+342         */
+343        public String getSimpleProperty(Object bean, String name)
+344                throws IllegalAccessException, InvocationTargetException,
+345                NoSuchMethodException {
+346    
+347            return getSimpleProperty(bean, name, null);
+348        }
+349    
+350        /**
+351         * Return the value of the specified mapped locale-sensitive property
+352         * of the specified bean, as a String using the specified conversion pattern.
+353         * The key is specified as a method parameter and must *not* be included in
+354         * the property name expression.
+355         *
+356         * @param bean Bean whose property is to be extracted
+357         * @param name Simple property name of the property value to be extracted
+358         * @param key Lookup key of the property value to be extracted
+359         * @param pattern The conversion pattern
+360         * @return The mapped property's value, converted to a String
+361         *
+362         * @exception IllegalAccessException if the caller does not have
+363         *  access to the property accessor method
+364         * @exception InvocationTargetException if the property accessor method
+365         *  throws an exception
+366         * @exception NoSuchMethodException if an accessor method for this
+367         *  propety cannot be found
+368         */
+369        public String getMappedProperty(
+370                                        Object bean,
+371                                        String name, 
+372                                        String key, 
+373                                        String pattern)
+374                                            throws 
+375                                                IllegalAccessException, 
+376                                                InvocationTargetException,
+377                                                NoSuchMethodException {
+378    
+379            Object value = getPropertyUtils().getMappedProperty(bean, name, key);
+380            return getLocaleConvertUtils().convert(value, pattern);
+381        }
+382    
+383        /**
+384         * Return the value of the specified mapped locale-sensitive property
+385         * of the specified bean, as a String
+386         * The key is specified as a method parameter and must *not* be included
+387         * in the property name expression
+388         *
+389         * @param bean Bean whose property is to be extracted
+390         * @param name Simple property name of the property value to be extracted
+391         * @param key Lookup key of the property value to be extracted
+392         * @return The mapped property's value, converted to a String
+393         *
+394         * @exception IllegalAccessException if the caller does not have
+395         *  access to the property accessor method
+396         * @exception InvocationTargetException if the property accessor method
+397         *  throws an exception
+398         * @exception NoSuchMethodException if an accessor method for this
+399         *  propety cannot be found
+400         */
+401        public String getMappedProperty(Object bean,
+402                                               String name, String key)
+403                throws IllegalAccessException, InvocationTargetException,
+404                NoSuchMethodException {
+405    
+406            return getMappedProperty(bean, name, key, null);
+407        }
+408    
+409    
+410        /**
+411         * Return the value of the specified locale-sensitive mapped property
+412         * of the specified bean, as a String using the specified pattern.
+413         * The String-valued key of the required value
+414         * must be included (in parentheses) as a suffix to
+415         * the property name, or <code>IllegalArgumentException</code> will be
+416         * thrown.
+417         *
+418         * @param bean Bean whose property is to be extracted
+419         * @param name <code>propertyname(index)</code> of the property value
+420         *  to be extracted
+421         * @param pattern The conversion pattern
+422         * @return The mapped property's value, converted to a String
+423         *
+424         * @exception IllegalAccessException if the caller does not have
+425         *  access to the property accessor method
+426         * @exception InvocationTargetException if the property accessor method
+427         *  throws an exception
+428         * @exception NoSuchMethodException if an accessor method for this
+429         *  propety cannot be found
+430         */
+431        public String getMappedPropertyLocale(
+432                                            Object bean, 
+433                                            String name, 
+434                                            String pattern)
+435                                                throws 
+436                                                    IllegalAccessException, 
+437                                                    InvocationTargetException,
+438                                                    NoSuchMethodException {
+439    
+440            Object value = getPropertyUtils().getMappedProperty(bean, name);
+441            return getLocaleConvertUtils().convert(value, pattern);
+442        }
+443    
+444    
+445        /**
+446         * Return the value of the specified locale-sensitive mapped property
+447         * of the specified bean, as a String using the default
+448         * conversion pattern of the corresponding {@link LocaleConverter}.
+449         * The String-valued key of the required value
+450         * must be included (in parentheses) as a suffix to
+451         * the property name, or <code>IllegalArgumentException</code> will be
+452         * thrown.
+453         *
+454         * @param bean Bean whose property is to be extracted
+455         * @param name <code>propertyname(index)</code> of the property value
+456         *  to be extracted
+457         * @return The mapped property's value, converted to a String
+458         *
+459         * @exception IllegalAccessException if the caller does not have
+460         *  access to the property accessor method
+461         * @exception InvocationTargetException if the property accessor method
+462         *  throws an exception
+463         * @exception NoSuchMethodException if an accessor method for this
+464         *  propety cannot be found
+465         */
+466        public String getMappedProperty(Object bean, String name)
+467                                        throws 
+468                                            IllegalAccessException, 
+469                                            InvocationTargetException,
+470                                            NoSuchMethodException {
+471    
+472            return getMappedPropertyLocale(bean, name, null);
+473        }
+474    
+475        /**
+476         * Return the value of the (possibly nested) locale-sensitive property
+477         * of the specified name, for the specified bean,
+478         * as a String using the specified pattern.
+479         *
+480         * @param bean Bean whose property is to be extracted
+481         * @param name Possibly nested name of the property to be extracted
+482         * @param pattern The conversion pattern
+483         * @return The nested property's value, converted to a String
+484         *
+485         * @exception IllegalAccessException if the caller does not have
+486         *  access to the property accessor method
+487         * @exception IllegalArgumentException if a nested reference to a
+488         *  property returns null
+489         * @exception InvocationTargetException if the property accessor method
+490         *  throws an exception
+491         * @exception NoSuchMethodException if an accessor method for this
+492         *  propety cannot be found
+493         */
+494        public String getNestedProperty(    
+495                                        Object bean, 
+496                                        String name, 
+497                                        String pattern)
+498                                            throws 
+499                                                IllegalAccessException, 
+500                                                InvocationTargetException,
+501                                                NoSuchMethodException {
+502    
+503            Object value = getPropertyUtils().getNestedProperty(bean, name);
+504            return getLocaleConvertUtils().convert(value, pattern);
+505        }
+506    
+507        /**
+508         * Return the value of the (possibly nested) locale-sensitive property
+509         * of the specified name, for the specified bean, as a String using the default
+510         * conversion pattern of the corresponding {@link LocaleConverter}.
+511         *
+512         * @param bean Bean whose property is to be extracted
+513         * @param name Possibly nested name of the property to be extracted
+514         * @return The nested property's value, converted to a String
+515         *
+516         * @exception IllegalAccessException if the caller does not have
+517         *  access to the property accessor method
+518         * @exception IllegalArgumentException if a nested reference to a
+519         *  property returns null
+520         * @exception InvocationTargetException if the property accessor method
+521         *  throws an exception
+522         * @exception NoSuchMethodException if an accessor method for this
+523         *  propety cannot be found
+524         */
+525        public String getNestedProperty(Object bean, String name)
+526                                        throws 
+527                                            IllegalAccessException, 
+528                                            InvocationTargetException,
+529                                            NoSuchMethodException {
+530    
+531            return getNestedProperty(bean, name, null);
+532        }
+533    
+534        /**
+535         * Return the value of the specified locale-sensitive property
+536         * of the specified bean, no matter which property reference
+537         * format is used, as a String using the specified conversion pattern.
+538         *
+539         * @param bean Bean whose property is to be extracted
+540         * @param name Possibly indexed and/or nested name of the property
+541         *  to be extracted
+542         * @param pattern The conversion pattern
+543         * @return The nested property's value, converted to a String
+544         *
+545         * @exception IllegalAccessException if the caller does not have
+546         *  access to the property accessor method
+547         * @exception InvocationTargetException if the property accessor method
+548         *  throws an exception
+549         * @exception NoSuchMethodException if an accessor method for this
+550         *  propety cannot be found
+551         */
+552        public String getProperty(Object bean, String name, String pattern)
+553                                    throws 
+554                                        IllegalAccessException, 
+555                                        InvocationTargetException,
+556                                        NoSuchMethodException {
+557    
+558            return getNestedProperty(bean, name, pattern);
+559        }
+560    
+561        /**
+562         * Return the value of the specified locale-sensitive property
+563         * of the specified bean, no matter which property reference
+564         * format is used, as a String using the default
+565         * conversion pattern of the corresponding {@link LocaleConverter}.
+566         *
+567         * @param bean Bean whose property is to be extracted
+568         * @param name Possibly indexed and/or nested name of the property
+569         *  to be extracted
+570         * @return The property's value, converted to a String
+571         *
+572         * @exception IllegalAccessException if the caller does not have
+573         *  access to the property accessor method
+574         * @exception InvocationTargetException if the property accessor method
+575         *  throws an exception
+576         * @exception NoSuchMethodException if an accessor method for this
+577         *  propety cannot be found
+578         */
+579        public String getProperty(Object bean, String name)
+580                                    throws 
+581                                        IllegalAccessException, 
+582                                        InvocationTargetException,
+583                                        NoSuchMethodException {
+584    
+585            return getNestedProperty(bean, name);
+586        }
+587    
+588        /**
+589         * Set the specified locale-sensitive property value, performing type
+590         * conversions as required to conform to the type of the destination property
+591         * using the default conversion pattern of the corresponding {@link LocaleConverter}.
+592         *
+593         * @param bean Bean on which setting is to be performed
+594         * @param name Property name (can be nested/indexed/mapped/combo)
+595         * @param value Value to be set
+596         *
+597         * @exception IllegalAccessException if the caller does not have
+598         *  access to the property accessor method
+599         * @exception InvocationTargetException if the property accessor method
+600         *  throws an exception
+601         */
+602        public void setProperty(Object bean, String name, Object value)
+603                                    throws 
+604                                        IllegalAccessException, 
+605                                        InvocationTargetException {
+606    
+607            setProperty(bean, name, value, null);
+608        }
+609    
+610        /**
+611         * Set the specified locale-sensitive property value, performing type
+612         * conversions as required to conform to the type of the destination
+613         * property using the specified conversion pattern.
+614         *
+615         * @param bean Bean on which setting is to be performed
+616         * @param name Property name (can be nested/indexed/mapped/combo)
+617         * @param value Value to be set
+618         * @param pattern The conversion pattern
+619         *
+620         * @exception IllegalAccessException if the caller does not have
+621         *  access to the property accessor method
+622         * @exception InvocationTargetException if the property accessor method
+623         *  throws an exception
+624         */
+625        public void setProperty(
+626                                Object bean, 
+627                                String name, 
+628                                Object value, 
+629                                String pattern)
+630                                    throws 
+631                                        IllegalAccessException, 
+632                                        InvocationTargetException {
+633    
+634            // Trace logging (if enabled)
+635            if (log.isTraceEnabled()) {
+636                StringBuffer sb = new StringBuffer("  setProperty(");
+637                sb.append(bean);
+638                sb.append(", ");
+639                sb.append(name);
+640                sb.append(", ");
+641                if (value == null) {
+642                    sb.append("<NULL>");
+643                }
+644                else if (value instanceof String) {
+645                    sb.append((String) value);
+646                }
+647                else if (value instanceof String[]) {
+648                    String[] values = (String[]) value;
+649                    sb.append('[');
+650                    for (int i = 0; i < values.length; i++) {
+651                        if (i > 0) {
+652                            sb.append(',');
+653                        }
+654                        sb.append(values[i]);
+655                    }
+656                    sb.append(']');
+657                }
+658                else {
+659                    sb.append(value.toString());
+660                }
+661                sb.append(')');
+662                log.trace(sb.toString());
+663            }
+664    
+665            // Resolve any nested expression to get the actual target bean
+666            Object target = bean;
+667            Resolver resolver = getPropertyUtils().getResolver();
+668            while (resolver.hasNested(name)) {
+669                try {
+670                    target = getPropertyUtils().getProperty(target, resolver.next(name));
+671                    name = resolver.remove(name);
+672                } catch (NoSuchMethodException e) {
+673                    return; // Skip this property setter
+674                }
+675            }
+676            if (log.isTraceEnabled()) {
+677                log.trace("    Target bean = " + target);
+678                log.trace("    Target name = " + name);
+679            }
+680    
+681            // Declare local variables we will require
+682            String propName = resolver.getProperty(name); // Simple name of target property
+683            int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
+684            String key = resolver.getKey(name);           // Mapped key value (if any)
+685    
+686            Class type = definePropertyType(target, name, propName);
+687            if (type != null) {
+688                Object newValue = convert(type, index, value, pattern);
+689                invokeSetter(target, propName, key, index, newValue);
+690            }
+691        }
+692    
+693        /**
+694         * Calculate the property type.
+695         *
+696         * @param target The bean
+697         * @param name The property name
+698         * @param propName The Simple name of target property
+699         * @return The property's type
+700         *
+701         * @exception IllegalAccessException if the caller does not have
+702         *  access to the property accessor method
+703         * @exception InvocationTargetException if the property accessor method
+704         *  throws an exception
+705         */
+706        protected Class definePropertyType(Object target, String name, String propName)
+707                throws IllegalAccessException, InvocationTargetException {
+708    
+709            Class type = null;               // Java type of target property
+710    
+711            if (target instanceof DynaBean) {
+712                DynaClass dynaClass = ((DynaBean) target).getDynaClass();
+713                DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);
+714                if (dynaProperty == null) {
+715                    return null; // Skip this property setter
+716                }
+717                type = dynaProperty.getType();
+718            }
+719            else {
+720                PropertyDescriptor descriptor = null;
+721                try {
+722                    descriptor =
+723                            getPropertyUtils().getPropertyDescriptor(target, name);
+724                    if (descriptor == null) {
+725                        return null; // Skip this property setter
+726                    }
+727                }
+728                catch (NoSuchMethodException e) {
+729                    return null; // Skip this property setter
+730                }
+731                if (descriptor instanceof MappedPropertyDescriptor) {
+732                    type = ((MappedPropertyDescriptor) descriptor).
+733                            getMappedPropertyType();
+734                }
+735                else if (descriptor instanceof IndexedPropertyDescriptor) {
+736                    type = ((IndexedPropertyDescriptor) descriptor).
+737                            getIndexedPropertyType();
+738                }
+739                else {
+740                    type = descriptor.getPropertyType();
+741                }
+742            }
+743            return type;
+744        }
+745    
+746        /**
+747         * Convert the specified value to the required type using the
+748         * specified conversion pattern.
+749         *
+750         * @param type The Java type of target property
+751         * @param index The indexed subscript value (if any)
+752         * @param value The value to be converted
+753         * @param pattern The conversion pattern
+754         * @return The converted value
+755         */
+756        protected Object convert(Class type, int index, Object value, String pattern) {
+757    
+758            if (log.isTraceEnabled()) {
+759                log.trace("Converting value '" + value + "' to type:" + type);
+760            }
+761    
+762            Object newValue = null;
+763    
+764            if (type.isArray() && (index < 0)) { // Scalar value into array
+765                if (value instanceof String) {
+766                    String[] values = new String[1];
+767                    values[0] = (String) value;
+768                    newValue = getLocaleConvertUtils().convert(values, type, pattern);
+769                }
+770                else if (value instanceof String[]) {
+771                    newValue = getLocaleConvertUtils().convert((String[]) value, type, pattern);
+772                }
+773                else {
+774                    newValue = value;
+775                }
+776            }
+777            else if (type.isArray()) {         // Indexed value into array
+778                if (value instanceof String) {
+779                    newValue = getLocaleConvertUtils().convert((String) value,
+780                            type.getComponentType(), pattern);
+781                }
+782                else if (value instanceof String[]) {
+783                    newValue = getLocaleConvertUtils().convert(((String[]) value)[0],
+784                            type.getComponentType(), pattern);
+785                }
+786                else {
+787                    newValue = value;
+788                }
+789            }
+790            else {                             // Value into scalar
+791                if (value instanceof String) {
+792                    newValue = getLocaleConvertUtils().convert((String) value, type, pattern);
+793                }
+794                else if (value instanceof String[]) {
+795                    newValue = getLocaleConvertUtils().convert(((String[]) value)[0],
+796                            type, pattern);
+797                }
+798                else {
+799                    newValue = value;
+800                }
+801            }
+802            return newValue;
+803        }
+804    
+805        /**
+806         *  Convert the specified value to the required type.
+807         *
+808         * @param type The Java type of target property
+809         * @param index The indexed subscript value (if any)
+810         * @param value The value to be converted
+811         * @return The converted value
+812         */
+813        protected Object convert(Class type, int index, Object value) {
+814    
+815            Object newValue = null;
+816    
+817            if (type.isArray() && (index < 0)) { // Scalar value into array
+818                if (value instanceof String) {
+819                    String[] values = new String[1];
+820                    values[0] = (String) value;
+821                    newValue = ConvertUtils.convert(values, type);
+822                }
+823                else if (value instanceof String[]) {
+824                    newValue = ConvertUtils.convert((String[]) value, type);
+825                }
+826                else {
+827                    newValue = value;
+828                }
+829            }
+830            else if (type.isArray()) {         // Indexed value into array
+831                if (value instanceof String) {
+832                    newValue = ConvertUtils.convert((String) value,
+833                            type.getComponentType());
+834                }
+835                else if (value instanceof String[]) {
+836                    newValue = ConvertUtils.convert(((String[]) value)[0],
+837                            type.getComponentType());
+838                }
+839                else {
+840                    newValue = value;
+841                }
+842            }
+843            else {                             // Value into scalar
+844                if (value instanceof String) {
+845                    newValue = ConvertUtils.convert((String) value, type);
+846                }
+847                else if (value instanceof String[]) {
+848                    newValue = ConvertUtils.convert(((String[]) value)[0],
+849                            type);
+850                }
+851                else {
+852                    newValue = value;
+853                }
+854            }
+855            return newValue;
+856        }
+857    
+858        /**
+859         * Invoke the setter method.
+860         *
+861         * @param target The bean
+862         * @param propName The Simple name of target property
+863         * @param key The Mapped key value (if any)
+864         * @param index The indexed subscript value (if any)
+865         * @param newValue The value to be set
+866         *
+867         * @exception IllegalAccessException if the caller does not have
+868         *  access to the property accessor method
+869         * @exception InvocationTargetException if the property accessor method
+870         *  throws an exception
+871         */
+872        protected void invokeSetter(Object target, String propName, String key, int index, Object newValue)
+873                throws IllegalAccessException, InvocationTargetException {
+874    
+875            try {
+876                if (index >= 0) {
+877                    getPropertyUtils().setIndexedProperty(target, propName,
+878                            index, newValue);
+879                }
+880                else if (key != null) {
+881                    getPropertyUtils().setMappedProperty(target, propName,
+882                            key, newValue);
+883                }
+884                else {
+885                    getPropertyUtils().setProperty(target, propName, newValue);
+886                }
+887            }
+888            catch (NoSuchMethodException e) {
+889                throw new InvocationTargetException
+890                        (e, "Cannot set " + propName);
+891            }
+892        }
+893    
+894        /**
+895         * Resolve any nested expression to get the actual target property.
+896         *
+897         * @param bean The bean
+898         * @param name The property name
+899         * @return The property's descriptor
+900         *
+901         * @exception IllegalAccessException if the caller does not have
+902         *  access to the property accessor method
+903         * @exception InvocationTargetException if the property accessor method
+904         *  throws an exception
+905         * @deprecated Property name expressions are now processed by
+906         * the configured {@link Resolver} implementation and this method
+907         * is no longer used by BeanUtils.
+908         */
+909        protected Descriptor calculate(Object bean, String name)
+910                throws IllegalAccessException, InvocationTargetException {
+911    
+912            // Resolve any nested expression to get the actual target bean
+913            Object target = bean;
+914            Resolver resolver = getPropertyUtils().getResolver();
+915            while (resolver.hasNested(name)) {
+916                try {
+917                    target = getPropertyUtils().getProperty(target, resolver.next(name));
+918                    name = resolver.remove(name);
+919                } catch (NoSuchMethodException e) {
+920                    return null; // Skip this property setter
+921                }
+922            }
+923            if (log.isTraceEnabled()) {
+924                log.trace("    Target bean = " + target);
+925                log.trace("    Target name = " + name);
+926            }
+927    
+928            // Declare local variables we will require
+929            String propName = resolver.getProperty(name); // Simple name of target property
+930            int index  = resolver.getIndex(name);         // Indexed subscript value (if any)
+931            String key = resolver.getKey(name);           // Mapped key value (if any)
+932    
+933            return new Descriptor(target, name, propName, key, index);
+934        }
+935    
+936        /**
+937         * @deprecated Property name expressions are now processed by
+938         * the configured {@link Resolver} implementation and this class
+939         * is no longer used by BeanUtils.
+940         */
+941        protected class Descriptor {
+942    
+943            private int index = -1;    // Indexed subscript value (if any)
+944            private String name;
+945            private String propName;   // Simple name of target property
+946            private String key;        // Mapped key value (if any)
+947            private Object target;
+948    
+949            /**
+950             * Construct a descriptor instance for the target bean and property.
+951             *
+952             * @param target The target bean
+953             * @param name The property name (includes indexed/mapped expr)
+954             * @param propName The property name
+955             * @param key The mapped property key (if any)
+956             * @param index The indexed property index (if any)
+957             */
+958            public Descriptor(Object target, String name, String propName, String key, int index) {
+959    
+960                setTarget(target);
+961                setName(name);
+962                setPropName(propName);
+963                setKey(key);
+964                setIndex(index);
+965            }
+966    
+967            /**
+968             * Return the target bean.
+969             *
+970             * @return The descriptors target bean
+971             */
+972            public Object getTarget() {
+973                return target;
+974            }
+975    
+976            /**
+977             * Set the target bean.
+978             *
+979             * @param target The target bean
+980             */
+981            public void setTarget(Object target) {
+982                this.target = target;
+983            }
+984    
+985            /**
+986             * Return the mapped property key.
+987             *
+988             * @return the mapped property key (if any)
+989             */
+990            public String getKey() {
+991                return key;
+992            }
+993    
+994            /**
+995             * Set the mapped property key.
+996             *
+997             * @param key The mapped property key (if any)
+998             */
+999            public void setKey(String key) {
+1000                this.key = key;
+1001            }
+1002    
+1003            /**
+1004             * Return indexed property index.
+1005             *
+1006             * @return indexed property index (if any)
+1007             */
+1008            public int getIndex() {
+1009                return index;
+1010            }
+1011    
+1012            /**
+1013             * Set the indexed property index.
+1014             *
+1015             * @param index The indexed property index (if any)
+1016             */
+1017            public void setIndex(int index) {
+1018                this.index = index;
+1019            }
+1020    
+1021            /**
+1022             * Return property name (includes indexed/mapped expr).
+1023             *
+1024             * @return The property name (includes indexed/mapped expr)
+1025             */
+1026            public String getName() {
+1027                return name;
+1028            }
+1029    
+1030            /**
+1031             * Set the property name (includes indexed/mapped expr).
+1032             *
+1033             * @param name The property name (includes indexed/mapped expr)
+1034             */
+1035            public void setName(String name) {
+1036                this.name = name;
+1037            }
+1038    
+1039            /**
+1040             * Return the property name.
+1041             *
+1042             * @return The property name
+1043             */
+1044            public String getPropName() {
+1045                return propName;
+1046            }
+1047    
+1048            /**
+1049             * Set the property name.
+1050             *
+1051             * @param propName The property name
+1052             */
+1053            public void setPropName(String propName) {
+1054                this.propName = propName;
+1055            }
+1056        }
+1057    }
+1058    
+1059    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtils.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtils.html new file mode 100644 index 0000000..1e99403 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtils.html @@ -0,0 +1,414 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    import org.apache.commons.collections.FastHashMap;
+021    
+022    import java.util.Locale;
+023    
+024    /**
+025     * <p>Utility methods for converting locale-sensitive String scalar values to objects of the
+026     * specified Class, String arrays to arrays of the specified Class and
+027     * object to locale-sensitive String scalar value.</p>
+028     *
+029     * <p>The implementations for these method are provided by {@link LocaleConvertUtilsBean}.
+030     * These static utility method use the default instance. More sophisticated can be provided
+031     * by using a <code>LocaleConvertUtilsBean</code> instance.</p>
+032     *
+033     * @author Yauheny Mikulski
+034     */
+035    public class LocaleConvertUtils {
+036    
+037        // ----------------------------------------------------- Instance Variables
+038    
+039        /**
+040         * <p>Gets the <code>Locale</code> which will be used when 
+041         * no <code>Locale</code> is passed to a method.</p>
+042         * 
+043         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+044         * @return the default locale
+045         * @see LocaleConvertUtilsBean#getDefaultLocale()
+046         */
+047        public static Locale getDefaultLocale() {
+048    
+049            return LocaleConvertUtilsBean.getInstance().getDefaultLocale();
+050        }
+051    
+052        /**
+053         * <p>Sets the <code>Locale</code> which will be used when 
+054         * no <code>Locale</code> is passed to a method.</p>
+055         * 
+056         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+057         *
+058         * @param locale the default locale
+059         * @see LocaleConvertUtilsBean#setDefaultLocale(Locale)
+060         */
+061        public static void setDefaultLocale(Locale locale) {
+062    
+063            LocaleConvertUtilsBean.getInstance().setDefaultLocale(locale);
+064        }
+065    
+066        /**
+067         * <p>Gets applyLocalized.</p>
+068         * 
+069         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+070         *
+071         * @return <code>true</code> if pattern is localized,
+072         * otherwise <code>false</code>
+073         * @see LocaleConvertUtilsBean#getApplyLocalized()
+074         */
+075        public static boolean getApplyLocalized() {
+076            return LocaleConvertUtilsBean.getInstance().getApplyLocalized();
+077        }
+078    
+079        /**
+080         * <p>Sets applyLocalized.</p>
+081         * 
+082         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+083         *
+084         * @param newApplyLocalized <code>true</code> if pattern is localized,
+085         * otherwise <code>false</code>
+086         * @see LocaleConvertUtilsBean#setApplyLocalized(boolean)
+087         */
+088        public static void setApplyLocalized(boolean newApplyLocalized) {
+089            LocaleConvertUtilsBean.getInstance().setApplyLocalized(newApplyLocalized);
+090        }
+091    
+092        // --------------------------------------------------------- Methods
+093    
+094        /**
+095         * <p>Convert the specified locale-sensitive value into a String.</p>
+096         * 
+097         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+098         *
+099         * @param value The Value to be converted
+100         * @return the converted value
+101         * @see LocaleConvertUtilsBean#convert(Object)
+102         */
+103        public static String convert(Object value) {
+104            return LocaleConvertUtilsBean.getInstance().convert(value);
+105        }
+106    
+107        /**
+108         * <p>Convert the specified locale-sensitive value into a String
+109         * using the conversion pattern.</p>
+110         * 
+111         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+112         *
+113         * @param value The Value to be converted
+114         * @param pattern       The convertion pattern
+115         * @return the converted value
+116         * @see LocaleConvertUtilsBean#convert(Object, String)
+117         */
+118        public static String convert(Object value, String pattern) {
+119            return LocaleConvertUtilsBean.getInstance().convert(value, pattern);
+120        }
+121    
+122        /**
+123         * <p>Convert the specified locale-sensitive value into a String
+124         * using the paticular convertion pattern.</p>
+125         * 
+126         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+127         *
+128         * @param value The Value to be converted
+129         * @param locale The locale
+130         * @param pattern The convertion pattern
+131         * @return the converted value
+132         * @see LocaleConvertUtilsBean#convert(Object, Locale, String)
+133         */
+134        public static String convert(Object value, Locale locale, String pattern) {
+135    
+136            return LocaleConvertUtilsBean.getInstance().convert(value, locale, pattern);
+137        }
+138    
+139        /**
+140         * <p>Convert the specified value to an object of the specified class (if
+141         * possible).  Otherwise, return a String representation of the value.</p>
+142         * 
+143         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+144         *
+145         * @param value The String scalar value to be converted
+146         * @param clazz The Data type to which this value should be converted.
+147         * @return the converted value
+148         * @see LocaleConvertUtilsBean#convert(String, Class)
+149         */
+150        public static Object convert(String value, Class clazz) {
+151    
+152            return LocaleConvertUtilsBean.getInstance().convert(value, clazz);
+153        }
+154    
+155        /**
+156         * <p>Convert the specified value to an object of the specified class (if
+157         * possible) using the convertion pattern. Otherwise, return a String
+158         * representation of the value.</p>
+159         * 
+160         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+161         *
+162         * @param value The String scalar value to be converted
+163         * @param clazz The Data type to which this value should be converted.
+164         * @param pattern The convertion pattern
+165         * @return the converted value
+166         * @see LocaleConvertUtilsBean#convert(String, Class, String)
+167         */
+168        public static Object convert(String value, Class clazz, String pattern) {
+169    
+170            return LocaleConvertUtilsBean.getInstance().convert(value, clazz, pattern);
+171        }
+172    
+173        /**
+174         * <p>Convert the specified value to an object of the specified class (if
+175         * possible) using the convertion pattern. Otherwise, return a String
+176         * representation of the value.</p>
+177         *
+178         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+179         *
+180         * @param value The String scalar value to be converted
+181         * @param clazz The Data type to which this value should be converted.
+182         * @param locale The locale
+183         * @param pattern The convertion pattern
+184         * @return the converted value
+185         * @see LocaleConvertUtilsBean#convert(String, Class, Locale, String)
+186         */
+187        public static Object convert(String value, Class clazz, Locale locale, String pattern) {
+188    
+189            return LocaleConvertUtilsBean.getInstance().convert(value, clazz, locale, pattern);
+190        }
+191    
+192        /**
+193         * <p>Convert an array of specified values to an array of objects of the
+194         * specified class (if possible) using the convertion pattern.</p>
+195         * 
+196         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+197         *
+198         * @param values Value to be converted (may be null)
+199         * @param clazz Java array or element class to be converted to
+200         * @param pattern The convertion pattern
+201         * @return the converted value
+202         * @see LocaleConvertUtilsBean#convert(String[], Class, String)
+203         */
+204        public static Object convert(String[] values, Class clazz, String pattern) {
+205    
+206            return LocaleConvertUtilsBean.getInstance().convert(values, clazz, pattern);
+207        }
+208    
+209       /**
+210        * <p>Convert an array of specified values to an array of objects of the
+211        * specified class (if possible).</p>
+212        * 
+213        * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+214        *
+215        * @param values Value to be converted (may be null)
+216        * @param clazz Java array or element class to be converted to
+217        * @return the converted value
+218        * @see LocaleConvertUtilsBean#convert(String[], Class)
+219        */
+220       public static Object convert(String[] values, Class clazz) {
+221    
+222           return LocaleConvertUtilsBean.getInstance().convert(values, clazz);
+223       }
+224    
+225        /**
+226         * <p>Convert an array of specified values to an array of objects of the
+227         * specified class (if possible) using the convertion pattern.</p>
+228         *
+229         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+230         *
+231         * @param values Value to be converted (may be null)
+232         * @param clazz Java array or element class to be converted to
+233         * @param locale The locale
+234         * @param pattern The convertion pattern
+235         * @return the converted value
+236         * @see LocaleConvertUtilsBean#convert(String[], Class, Locale, String)
+237         */
+238        public static Object convert(String[] values, Class clazz, Locale locale, String pattern) {
+239    
+240            return LocaleConvertUtilsBean.getInstance().convert(values, clazz, locale, pattern);
+241        }
+242    
+243        /**
+244         * <p>Register a custom {@link LocaleConverter} for the specified destination
+245         * <code>Class</code>, replacing any previously registered converter.</p>
+246         * 
+247         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+248         *
+249         * @param converter The LocaleConverter to be registered
+250         * @param clazz The Destination class for conversions performed by this
+251         *  Converter
+252         * @param locale The locale
+253         * @see LocaleConvertUtilsBean#register(LocaleConverter, Class, Locale)
+254         */
+255        public static void register(LocaleConverter converter, Class clazz, Locale locale) {
+256    
+257            LocaleConvertUtilsBean.getInstance().register(converter, clazz, locale);
+258        }
+259    
+260        /**
+261         * <p>Remove any registered {@link LocaleConverter}.</p>
+262         * 
+263         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+264         *
+265         * @see LocaleConvertUtilsBean#deregister()
+266         */
+267        public static void deregister() {
+268    
+269           LocaleConvertUtilsBean.getInstance().deregister();
+270        }
+271    
+272    
+273        /**
+274         * <p>Remove any registered {@link LocaleConverter} for the specified locale.</p>
+275         * 
+276         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+277         *
+278         * @param locale The locale
+279         * @see LocaleConvertUtilsBean#deregister(Locale)
+280         */
+281        public static void deregister(Locale locale) {
+282    
+283            LocaleConvertUtilsBean.getInstance().deregister(locale);
+284        }
+285    
+286    
+287        /**
+288         * <p>Remove any registered {@link LocaleConverter} for the specified locale and Class.</p>
+289         * 
+290         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+291         *
+292         * @param clazz Class for which to remove a registered Converter
+293         * @param locale The locale
+294         * @see LocaleConvertUtilsBean#deregister(Class, Locale)
+295         */
+296        public static void deregister(Class clazz, Locale locale) {
+297    
+298            LocaleConvertUtilsBean.getInstance().deregister(clazz, locale);
+299        }
+300    
+301        /**
+302         * <p>Look up and return any registered {@link LocaleConverter} for the specified
+303         * destination class and locale; if there is no registered Converter, return
+304         * <code>null</code>.</p>
+305         * 
+306         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+307         *
+308         * @param clazz Class for which to return a registered Converter
+309         * @param locale The Locale
+310         * @return The registered locale Converter, if any
+311         * @see LocaleConvertUtilsBean#lookup(Class, Locale)
+312         */
+313        public static LocaleConverter lookup(Class clazz, Locale locale) {
+314    
+315            return LocaleConvertUtilsBean.getInstance().lookup(clazz, locale);
+316        }
+317    
+318        /**
+319         * <p>Look up and return any registered FastHashMap instance for the specified locale.</p>
+320         * 
+321         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+322         *
+323         * @param locale The Locale
+324         * @return The FastHashMap instance contains the all {@link LocaleConverter} types for
+325         *  the specified locale.
+326         * @see LocaleConvertUtilsBean#lookup(Locale)
+327         * @deprecated This method will be modified to return a Map in the next release.
+328         */
+329        protected static FastHashMap lookup(Locale locale) {
+330            return LocaleConvertUtilsBean.getInstance().lookup(locale);
+331        }
+332    
+333        /**
+334         * <p>Create all {@link LocaleConverter} types for specified locale.</p>
+335         * 
+336         * <p>For more details see <code>LocaleConvertUtilsBean</code></p>
+337         *
+338         * @param locale The Locale
+339         * @return The FastHashMap instance contains the all {@link LocaleConverter} types
+340         *  for the specified locale.
+341         * @see LocaleConvertUtilsBean#create(Locale)
+342         * @deprecated This method will be modified to return a Map in the next release.
+343         */
+344        protected static FastHashMap create(Locale locale) {
+345    
+346            return LocaleConvertUtilsBean.getInstance().create(locale);
+347        }
+348    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html new file mode 100644 index 0000000..85885d0 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConvertUtilsBean.html @@ -0,0 +1,632 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    import org.apache.commons.beanutils.BeanUtils;
+021    import org.apache.commons.beanutils.locale.converters.BigDecimalLocaleConverter;
+022    import org.apache.commons.beanutils.locale.converters.BigIntegerLocaleConverter;
+023    import org.apache.commons.beanutils.locale.converters.ByteLocaleConverter;
+024    import org.apache.commons.beanutils.locale.converters.DoubleLocaleConverter;
+025    import org.apache.commons.beanutils.locale.converters.FloatLocaleConverter;
+026    import org.apache.commons.beanutils.locale.converters.IntegerLocaleConverter;
+027    import org.apache.commons.beanutils.locale.converters.LongLocaleConverter;
+028    import org.apache.commons.beanutils.locale.converters.ShortLocaleConverter;
+029    import org.apache.commons.beanutils.locale.converters.StringLocaleConverter;
+030    import org.apache.commons.beanutils.locale.converters.SqlDateLocaleConverter;
+031    import org.apache.commons.beanutils.locale.converters.SqlTimeLocaleConverter;
+032    import org.apache.commons.beanutils.locale.converters.SqlTimestampLocaleConverter;
+033    
+034    import org.apache.commons.collections.FastHashMap;
+035    import org.apache.commons.logging.Log;
+036    import org.apache.commons.logging.LogFactory;
+037    
+038    import java.lang.reflect.Array;
+039    import java.math.BigDecimal;
+040    import java.math.BigInteger;
+041    import java.util.Collection;
+042    import java.util.Locale;
+043    import java.util.Map;
+044    import java.util.Set;
+045    
+046    /**
+047     * <p>Utility methods for converting locale-sensitive String scalar values to objects of the
+048     * specified Class, String arrays to arrays of the specified Class and
+049     * object to locale-sensitive String scalar value.</p>
+050     *
+051     * <p>This class provides the implementations used by the static utility methods in 
+052     * {@link LocaleConvertUtils}.</p>
+053     * 
+054     * <p>The actual {@link LocaleConverter} instance to be used
+055     * can be registered for each possible destination Class. Unless you override them, standard
+056     * {@link LocaleConverter} instances are provided for all of the following
+057     * destination Classes:</p>
+058     * <ul>
+059     * <li>java.lang.BigDecimal</li>
+060     * <li>java.lang.BigInteger</li>
+061     * <li>byte and java.lang.Byte</li>
+062     * <li>double and java.lang.Double</li>
+063     * <li>float and java.lang.Float</li>
+064     * <li>int and java.lang.Integer</li>
+065     * <li>long and java.lang.Long</li>
+066     * <li>short and java.lang.Short</li>
+067     * <li>java.lang.String</li>
+068     * <li>java.sql.Date</li>
+069     * <li>java.sql.Time</li>
+070     * <li>java.sql.Timestamp</li>
+071     * </ul>
+072     *
+073     * <p>For backwards compatibility, the standard locale converters
+074     * for primitive types (and the corresponding wrapper classes).
+075     *
+076     * If you prefer to have another {@link LocaleConverter}
+077     * thrown instead, replace the standard {@link LocaleConverter} instances
+078     * with ones created with the one of the appropriate constructors.
+079     *
+080     * It's important that {@link LocaleConverter} should be registered for
+081     * the specified locale and Class (or primitive type).
+082     *
+083     * @author Yauheny Mikulski
+084     * @since 1.7
+085     */
+086    public class LocaleConvertUtilsBean {
+087        
+088        /** 
+089         * Gets singleton instance.
+090         * This is the same as the instance used by the default {@link LocaleBeanUtilsBean} singleton.
+091         * @return the singleton instance
+092         */
+093        public static LocaleConvertUtilsBean getInstance() {
+094            return LocaleBeanUtilsBean.getLocaleBeanUtilsInstance().getLocaleConvertUtils();
+095        }
+096    
+097        // ----------------------------------------------------- Instance Variables
+098    
+099        /** The locale - default for convertion. */
+100        private Locale defaultLocale = Locale.getDefault();
+101    
+102        /** Indicate whether the pattern is localized or not */
+103        private boolean applyLocalized = false;
+104    
+105        /** The <code>Log</code> instance for this class. */
+106        private Log log = LogFactory.getLog(LocaleConvertUtils.class);
+107    
+108        /** Every entry of the mapConverters is:
+109         *  key = locale
+110         *  value = FastHashMap of converters for the certain locale.
+111         */
+112        private FastHashMap mapConverters = new DelegateFastHashMap(BeanUtils.createCache());
+113    
+114        // --------------------------------------------------------- Constructors
+115    
+116        /**
+117         *  Makes the state by default (deregisters all converters for all locales)
+118         *  and then registers default locale converters.
+119         */
+120        public LocaleConvertUtilsBean() {
+121            mapConverters.setFast(false);
+122            deregister();
+123            mapConverters.setFast(true);
+124        }
+125        
+126        // --------------------------------------------------------- Properties
+127         
+128        /**
+129         * getter for defaultLocale.
+130         * @return the default locale
+131         */
+132        public Locale getDefaultLocale() {
+133    
+134            return defaultLocale;
+135        }
+136    
+137        /**
+138         * setter for defaultLocale.
+139         * @param locale the default locale
+140         */
+141        public void setDefaultLocale(Locale locale) {
+142    
+143            if (locale == null) {
+144                defaultLocale = Locale.getDefault();
+145            }
+146            else {
+147                defaultLocale = locale;
+148            }
+149        }
+150        
+151        /**
+152         * getter for applyLocalized
+153         *
+154         * @return <code>true</code> if pattern is localized,
+155         * otherwise <code>false</code>
+156         */
+157        public boolean getApplyLocalized() {
+158            return applyLocalized;
+159        }
+160    
+161        /**
+162         * setter for applyLocalized
+163         *
+164         * @param newApplyLocalized <code>true</code> if pattern is localized,
+165         * otherwise <code>false</code>
+166         */
+167        public void setApplyLocalized(boolean newApplyLocalized) {
+168            applyLocalized = newApplyLocalized;
+169        }
+170    
+171        // --------------------------------------------------------- Methods
+172    
+173        /**
+174         * Convert the specified locale-sensitive value into a String.
+175         *
+176         * @param value The Value to be converted
+177         * @return the converted value
+178         *
+179         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+180         * underlying Converter
+181         */
+182        public String convert(Object value) {
+183            return convert(value, defaultLocale, null);
+184        }
+185    
+186        /**
+187         * Convert the specified locale-sensitive value into a String
+188         * using the conversion pattern.
+189         *
+190         * @param value The Value to be converted
+191         * @param pattern       The convertion pattern
+192         * @return the converted value
+193         *
+194         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+195         * underlying Converter
+196         */
+197        public String convert(Object value, String pattern) {
+198            return convert(value, defaultLocale, pattern);
+199        }
+200    
+201        /**
+202         * Convert the specified locale-sensitive value into a String
+203         * using the paticular convertion pattern.
+204         *
+205         * @param value The Value to be converted
+206         * @param locale The locale
+207         * @param pattern The convertion pattern
+208         * @return the converted value
+209         *
+210         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+211         * underlying Converter
+212         */
+213        public String convert(Object value, Locale locale, String pattern) {
+214    
+215            LocaleConverter converter = lookup(String.class, locale);
+216    
+217            return (String) converter.convert(String.class, value, pattern);
+218        }
+219    
+220        /**
+221         * Convert the specified value to an object of the specified class (if
+222         * possible).  Otherwise, return a String representation of the value.
+223         *
+224         * @param value The String scalar value to be converted
+225         * @param clazz The Data type to which this value should be converted.
+226         * @return the converted value
+227         *
+228         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+229         * underlying Converter
+230         */
+231        public Object convert(String value, Class clazz) {
+232    
+233            return convert(value, clazz, defaultLocale, null);
+234        }
+235    
+236        /**
+237         * Convert the specified value to an object of the specified class (if
+238         * possible) using the convertion pattern. Otherwise, return a String
+239         * representation of the value.
+240         *
+241         * @param value The String scalar value to be converted
+242         * @param clazz The Data type to which this value should be converted.
+243         * @param pattern The convertion pattern
+244         * @return the converted value
+245         *
+246         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+247         * underlying Converter
+248         */
+249        public Object convert(String value, Class clazz, String pattern) {
+250    
+251            return convert(value, clazz, defaultLocale, pattern);
+252        }
+253    
+254        /**
+255         * Convert the specified value to an object of the specified class (if
+256         * possible) using the convertion pattern. Otherwise, return a String
+257         * representation of the value.
+258         *
+259         * @param value The String scalar value to be converted
+260         * @param clazz The Data type to which this value should be converted.
+261         * @param locale The locale
+262         * @param pattern The convertion pattern
+263         * @return the converted value
+264         *
+265         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+266         * underlying Converter
+267         */
+268        public Object convert(String value, Class clazz, Locale locale, String pattern) {
+269    
+270            if (log.isDebugEnabled()) {
+271                log.debug("Convert string " + value + " to class " +
+272                        clazz.getName() + " using " + locale +
+273                        " locale and " + pattern + " pattern");
+274            }
+275    
+276            LocaleConverter converter = lookup(clazz, locale);
+277    
+278            if (converter == null) {
+279                converter = lookup(String.class, locale);
+280            }
+281            if (log.isTraceEnabled()) {
+282                log.trace("  Using converter " + converter);
+283            }
+284    
+285            return (converter.convert(clazz, value, pattern));
+286        }
+287    
+288        /**
+289         * Convert an array of specified values to an array of objects of the
+290         * specified class (if possible) using the convertion pattern.
+291         *
+292         * @param values Value to be converted (may be null)
+293         * @param clazz Java array or element class to be converted to
+294         * @param pattern The convertion pattern
+295         * @return the converted value
+296         *
+297         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+298         * underlying Converter
+299         */
+300        public Object convert(String[] values, Class clazz, String pattern) {
+301    
+302            return convert(values, clazz, getDefaultLocale(), pattern);
+303        }
+304    
+305       /**
+306        * Convert an array of specified values to an array of objects of the
+307        * specified class (if possible) .
+308        *
+309        * @param values Value to be converted (may be null)
+310        * @param clazz Java array or element class to be converted to
+311        * @return the converted value
+312        *
+313         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+314         * underlying Converter
+315        */
+316       public Object convert(String[] values, Class clazz) {
+317    
+318           return convert(values, clazz, getDefaultLocale(), null);
+319       }
+320    
+321        /**
+322         * Convert an array of specified values to an array of objects of the
+323         * specified class (if possible) using the convertion pattern.
+324         *
+325         * @param values Value to be converted (may be null)
+326         * @param clazz Java array or element class to be converted to
+327         * @param locale The locale
+328         * @param pattern The convertion pattern
+329         * @return the converted value
+330         *
+331         * @throws org.apache.commons.beanutils.ConversionException if thrown by an
+332         * underlying Converter
+333         */
+334        public Object convert(String[] values, Class clazz, Locale locale, String pattern) {
+335    
+336            Class type = clazz;
+337            if (clazz.isArray()) {
+338                type = clazz.getComponentType();
+339            }
+340            if (log.isDebugEnabled()) {
+341                log.debug("Convert String[" + values.length + "] to class " +
+342                        type.getName() + "[] using " + locale +
+343                        " locale and " + pattern + " pattern");
+344            }
+345    
+346            Object array = Array.newInstance(type, values.length);
+347            for (int i = 0; i < values.length; i++) {
+348                Array.set(array, i, convert(values[i], type, locale, pattern));
+349            }
+350    
+351            return (array);
+352        }
+353    
+354        /**
+355         * Register a custom {@link LocaleConverter} for the specified destination
+356         * <code>Class</code>, replacing any previously registered converter.
+357         *
+358         * @param converter The LocaleConverter to be registered
+359         * @param clazz The Destination class for conversions performed by this
+360         *  Converter
+361         * @param locale The locale
+362         */
+363        public void register(LocaleConverter converter, Class clazz, Locale locale) {
+364    
+365            lookup(locale).put(clazz, converter);
+366        }
+367    
+368        /**
+369         * Remove any registered {@link LocaleConverter}.
+370         */
+371        public void deregister() {
+372    
+373            FastHashMap defaultConverter = lookup(defaultLocale);
+374    
+375            mapConverters.setFast(false);
+376    
+377            mapConverters.clear();
+378            mapConverters.put(defaultLocale, defaultConverter);
+379    
+380            mapConverters.setFast(true);
+381        }
+382    
+383    
+384        /**
+385         * Remove any registered {@link LocaleConverter} for the specified locale
+386         *
+387         * @param locale The locale
+388         */
+389        public void deregister(Locale locale) {
+390    
+391            mapConverters.remove(locale);
+392        }
+393    
+394    
+395        /**
+396         * Remove any registered {@link LocaleConverter} for the specified locale and Class.
+397         *
+398         * @param clazz Class for which to remove a registered Converter
+399         * @param locale The locale
+400         */
+401        public void deregister(Class clazz, Locale locale) {
+402    
+403            lookup(locale).remove(clazz);
+404        }
+405    
+406        /**
+407         * Look up and return any registered {@link LocaleConverter} for the specified
+408         * destination class and locale; if there is no registered Converter, return
+409         * <code>null</code>.
+410         *
+411         * @param clazz Class for which to return a registered Converter
+412         * @param locale The Locale
+413         * @return The registered locale Converter, if any
+414         */
+415        public LocaleConverter lookup(Class clazz, Locale locale) {
+416    
+417            LocaleConverter converter = (LocaleConverter) lookup(locale).get(clazz);
+418            
+419            if (log.isTraceEnabled()) {
+420                log.trace("LocaleConverter:" + converter);
+421            }
+422            
+423            return converter;
+424        }
+425    
+426        /**
+427         * Look up and return any registered FastHashMap instance for the specified locale;
+428         * if there is no registered one, return <code>null</code>.
+429         *
+430         * @param locale The Locale
+431         * @return The FastHashMap instance contains the all {@link LocaleConverter} types for
+432         *  the specified locale.
+433         * @deprecated This method will be modified to return a Map in the next release.
+434         */
+435        protected FastHashMap lookup(Locale locale) {
+436            FastHashMap localeConverters;
+437    
+438            if (locale == null) {
+439                localeConverters = (FastHashMap) mapConverters.get(defaultLocale);
+440            }
+441            else {
+442                localeConverters = (FastHashMap) mapConverters.get(locale);
+443    
+444                if (localeConverters == null) {
+445                    localeConverters = create(locale);
+446                    mapConverters.put(locale, localeConverters);
+447                }
+448            }
+449    
+450            return localeConverters;
+451        }
+452    
+453        /**
+454         *  Create all {@link LocaleConverter} types for specified locale.
+455         *
+456         * @param locale The Locale
+457         * @return The FastHashMap instance contains the all {@link LocaleConverter} types
+458         *  for the specified locale.
+459         * @deprecated This method will be modified to return a Map in the next release.
+460         */
+461        protected FastHashMap create(Locale locale) {
+462    
+463            FastHashMap converter = new DelegateFastHashMap(BeanUtils.createCache());
+464            converter.setFast(false);
+465    
+466            converter.put(BigDecimal.class, new BigDecimalLocaleConverter(locale, applyLocalized));
+467            converter.put(BigInteger.class, new BigIntegerLocaleConverter(locale, applyLocalized));
+468    
+469            converter.put(Byte.class, new ByteLocaleConverter(locale, applyLocalized));
+470            converter.put(Byte.TYPE, new ByteLocaleConverter(locale, applyLocalized));
+471    
+472            converter.put(Double.class, new DoubleLocaleConverter(locale, applyLocalized));
+473            converter.put(Double.TYPE, new DoubleLocaleConverter(locale, applyLocalized));
+474    
+475            converter.put(Float.class, new FloatLocaleConverter(locale, applyLocalized));
+476            converter.put(Float.TYPE, new FloatLocaleConverter(locale, applyLocalized));
+477    
+478            converter.put(Integer.class, new IntegerLocaleConverter(locale, applyLocalized));
+479            converter.put(Integer.TYPE, new IntegerLocaleConverter(locale, applyLocalized));
+480    
+481            converter.put(Long.class, new LongLocaleConverter(locale, applyLocalized));
+482            converter.put(Long.TYPE, new LongLocaleConverter(locale, applyLocalized));
+483    
+484            converter.put(Short.class, new ShortLocaleConverter(locale, applyLocalized));
+485            converter.put(Short.TYPE, new ShortLocaleConverter(locale, applyLocalized));
+486    
+487            converter.put(String.class, new StringLocaleConverter(locale, applyLocalized));
+488    
+489            // conversion format patterns of java.sql.* types should correspond to default
+490            // behaviour of toString and valueOf methods of these classes
+491            converter.put(java.sql.Date.class, new SqlDateLocaleConverter(locale, "yyyy-MM-dd"));
+492            converter.put(java.sql.Time.class, new SqlTimeLocaleConverter(locale, "HH:mm:ss"));
+493            converter.put( java.sql.Timestamp.class,
+494                           new SqlTimestampLocaleConverter(locale, "yyyy-MM-dd HH:mm:ss.S")
+495                         );
+496    
+497            converter.setFast(true);
+498    
+499            return converter;
+500        }
+501    
+502        /**
+503         * FastHashMap implementation that uses WeakReferences to overcome
+504         * memory leak problems.
+505         *
+506         * This is a hack to retain binary compatibility with previous
+507         * releases (where FastHashMap is exposed in the API), but
+508         * use WeakHashMap to resolve memory leaks.
+509         */
+510        private static class DelegateFastHashMap extends FastHashMap {
+511    
+512            private final Map map;
+513    
+514            private DelegateFastHashMap(Map map) {
+515                this.map = map;
+516            }
+517            public void clear() {
+518                map.clear();
+519            }
+520            public boolean containsKey(Object key) {
+521                return map.containsKey(key);
+522            }
+523            public boolean containsValue(Object value) {
+524                return map.containsValue(value);
+525            }
+526            public Set entrySet() {
+527                return map.entrySet();
+528            }
+529            public boolean equals(Object o) {
+530                return map.equals(o);
+531            }
+532            public Object get(Object key) {
+533                return map.get(key);
+534            }
+535            public int hashCode() {
+536                return map.hashCode();
+537            }
+538            public boolean isEmpty() {
+539                return map.isEmpty();
+540            }
+541            public Set keySet() {
+542                return map.keySet();
+543            }
+544            public Object put(Object key, Object value) {
+545                return map.put(key, value);
+546            }
+547            public void putAll(Map m) {
+548                map.putAll(m);
+549            }
+550            public Object remove(Object key) {
+551                return map.remove(key);
+552            }
+553            public int size() {
+554                return map.size();
+555            }
+556            public Collection values() {
+557                return map.values();
+558            }
+559            public boolean getFast() {
+560                return BeanUtils.getCacheFast(map);
+561            }
+562            public void setFast(boolean fast) {
+563                BeanUtils.setCacheFast(map, fast);
+564            }
+565        }
+566    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConverter.html new file mode 100644 index 0000000..ca4f2e5 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/LocaleConverter.html @@ -0,0 +1,113 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale;
+019    
+020    import org.apache.commons.beanutils.Converter;
+021    
+022    
+023    /**
+024     * <p>General purpose locale-sensitive data type converter that can be registered and used
+025     * within the BeanUtils package to manage the conversion of objects from
+026     * one type to another.
+027     *
+028     * @author Yauheny Mikulski
+029     */
+030    
+031    public interface LocaleConverter extends Converter {
+032    
+033    
+034        /**
+035         * Convert the specified locale-sensitive input object into an output object of the
+036         * specified type.
+037         *
+038         * @param type Data type to which this value should be converted
+039         * @param value The input value to be converted
+040         * @param pattern The user-defined pattern is used for the input object formatting.
+041         * @return The converted value
+042         *
+043         * @exception org.apache.commons.beanutils.ConversionException if conversion
+044         * cannot be performed successfully
+045         */
+046        public Object convert(Class type, Object value, String pattern);
+047    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html new file mode 100644 index 0000000..dbbcb70 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigDecimalLocaleConverter.html @@ -0,0 +1,298 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.util.Locale;
+021    import java.math.BigDecimal;
+022    import java.text.ParseException;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    /**
+026     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+027     * implementation that converts an incoming
+028     * locale-sensitive String into a <code>java.math.BigDecimal</code> object,
+029     * optionally using a default value or throwing a 
+030     * {@link org.apache.commons.beanutils.ConversionException}
+031     * if a conversion error occurs.</p>
+032     *
+033     * @author Yauheny Mikulski
+034     */
+035    
+036    public class BigDecimalLocaleConverter extends DecimalLocaleConverter {
+037    
+038        // ----------------------------------------------------------- Constructors
+039    
+040        /**
+041         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+042         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+043         * if a conversion error occurs. The locale is the default locale for
+044         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+045         * for the convertion.
+046         *
+047         */
+048        public BigDecimalLocaleConverter() {
+049    
+050            this(false);
+051        }
+052    
+053        /**
+054         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+055         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+056         * if a conversion error occurs. The locale is the default locale for
+057         * this instance of the Java Virtual Machine.
+058         *
+059         * @param locPattern    Indicate whether the pattern is localized or not
+060         */
+061        public BigDecimalLocaleConverter(boolean locPattern) {
+062    
+063            this(Locale.getDefault(), locPattern);
+064        }
+065    
+066        /**
+067         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+068         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+069         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+070         *
+071         * @param locale        The locale
+072         */
+073        public BigDecimalLocaleConverter(Locale locale) {
+074    
+075            this(locale, false);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs.
+082         *
+083         * @param locale        The locale
+084         * @param locPattern    Indicate whether the pattern is localized or not
+085         */
+086        public BigDecimalLocaleConverter(Locale locale, boolean locPattern) {
+087    
+088            this(locale, (String) null, locPattern);
+089        }
+090    
+091        /**
+092         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+093         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+094         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+095         *
+096         * @param locale        The locale
+097         * @param pattern       The convertion pattern
+098         */
+099        public BigDecimalLocaleConverter(Locale locale, String pattern) {
+100    
+101            this(locale, pattern, false);
+102        }
+103    
+104        /**
+105         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+106         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+107         * if a conversion error occurs.
+108         *
+109         * @param locale        The locale
+110         * @param pattern       The convertion pattern
+111         * @param locPattern    Indicate whether the pattern is localized or not
+112         */
+113        public BigDecimalLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+114    
+115            super(locale, pattern, locPattern);
+116        }
+117    
+118        /**
+119         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+120         * that will return the specified default value
+121         * if a conversion error occurs. The locale is the default locale for
+122         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+123         * for the convertion.
+124         *
+125         * @param defaultValue  The default value to be returned
+126         */
+127        public BigDecimalLocaleConverter(Object defaultValue) {
+128    
+129            this(defaultValue, false);
+130        }
+131    
+132        /**
+133         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+134         * that will return the specified default value
+135         * if a conversion error occurs. The locale is the default locale for
+136         * this instance of the Java Virtual Machine.
+137         *
+138         * @param defaultValue  The default value to be returned
+139         * @param locPattern    Indicate whether the pattern is localized or not
+140         */
+141        public BigDecimalLocaleConverter(Object defaultValue, boolean locPattern) {
+142    
+143            this(defaultValue, Locale.getDefault(), locPattern);
+144        }
+145    
+146        /**
+147         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+148         * that will return the specified default value
+149         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+150         *
+151         * @param defaultValue  The default value to be returned
+152         * @param locale        The locale
+153         */
+154        public BigDecimalLocaleConverter(Object defaultValue, Locale locale) {
+155    
+156            this(defaultValue, locale, false);
+157        }
+158    
+159        /**
+160         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+161         * that will return the specified default value
+162         * if a conversion error occurs.
+163         *
+164         * @param defaultValue  The default value to be returned
+165         * @param locale        The locale
+166         * @param locPattern    Indicate whether the pattern is localized or not
+167         */
+168        public BigDecimalLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+169    
+170            this(defaultValue, locale, null, locPattern);
+171        }
+172    
+173        /**
+174         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+175         * that will return the specified default value
+176         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+177         *
+178         * @param defaultValue  The default value to be returned
+179         * @param locale        The locale
+180         * @param pattern       The convertion pattern
+181         */
+182        public BigDecimalLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+183    
+184            this(defaultValue, locale, pattern, false);
+185        }
+186    
+187        /**
+188         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+189         * that will return the specified default value
+190         * if a conversion error occurs.
+191         *
+192         * @param defaultValue  The default value to be returned
+193         * @param locale        The locale
+194         * @param pattern       The convertion pattern
+195         * @param locPattern    Indicate whether the pattern is localized or not
+196         */
+197        public BigDecimalLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+198    
+199            super(defaultValue, locale, pattern, locPattern);
+200        }
+201    
+202        /**
+203         * Convert the specified locale-sensitive input object into an output object of
+204         * BigDecimal type.
+205         *
+206         * @param value The input object to be converted
+207         * @param pattern The pattern is used for the convertion
+208         * @return The converted value
+209         *
+210         * @exception ConversionException if conversion cannot be performed
+211         *  successfully
+212         * @throws ParseException if an error occurs parsing a String to a Number
+213         * @since 1.8.0
+214         */
+215        protected Object parse(Object value, String pattern) throws ParseException {
+216    
+217            Object result = super.parse(value, pattern);
+218    
+219            if (result == null || result instanceof BigDecimal) {
+220                return result;
+221            }
+222    
+223            try {
+224                return new BigDecimal(result.toString());
+225            }
+226            catch (NumberFormatException ex) {
+227                throw new ConversionException("Suplied number is not of type BigDecimal: " + result);
+228            }
+229    
+230        }
+231    
+232    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html new file mode 100644 index 0000000..d9793f1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/BigIntegerLocaleConverter.html @@ -0,0 +1,303 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.util.Locale;
+021    import java.math.BigInteger;
+022    import java.text.ParseException;
+023    import org.apache.commons.beanutils.ConversionException;
+024    
+025    /**
+026     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+027     * implementation that converts an incoming
+028     * locale-sensitive String into a <code>java.math.BigInteger</code> object,
+029     * optionally using a default value or throwing a 
+030     * {@link org.apache.commons.beanutils.ConversionException}
+031     * if a conversion error occurs.</p>
+032     *
+033     * @author Yauheny Mikulski
+034     */
+035    
+036    public class BigIntegerLocaleConverter extends DecimalLocaleConverter {
+037    
+038    
+039        // ----------------------------------------------------------- Constructors
+040    
+041        /**
+042         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+043         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+044         * if a conversion error occurs. The locale is the default locale for
+045         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+046         * for the convertion.
+047         *
+048         */
+049        public BigIntegerLocaleConverter() {
+050    
+051            this(false);
+052        }
+053    
+054        /**
+055         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+056         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+057         * if a conversion error occurs. The locale is the default locale for
+058         * this instance of the Java Virtual Machine.
+059         *
+060         * @param locPattern    Indicate whether the pattern is localized or not
+061         */
+062        public BigIntegerLocaleConverter(boolean locPattern) {
+063    
+064            this(Locale.getDefault(), locPattern);
+065        }
+066    
+067        /**
+068         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+069         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+070         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+071         *
+072         * @param locale        The locale
+073         */
+074        public BigIntegerLocaleConverter(Locale locale) {
+075    
+076            this(locale, false);
+077        }
+078    
+079        /**
+080         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+081         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+082         * if a conversion error occurs.
+083         *
+084         * @param locale        The locale
+085         * @param locPattern    Indicate whether the pattern is localized or not
+086         */
+087        public BigIntegerLocaleConverter(Locale locale, boolean locPattern) {
+088    
+089            this(locale, (String) null, locPattern);
+090        }
+091    
+092        /**
+093         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+094         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+095         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+096         *
+097         * @param locale        The locale
+098         * @param pattern       The convertion pattern
+099         */
+100        public BigIntegerLocaleConverter(Locale locale, String pattern) {
+101    
+102            this(locale, pattern, false);
+103        }
+104    
+105        /**
+106         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+107         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+108         * if a conversion error occurs.
+109         *
+110         * @param locale        The locale
+111         * @param pattern       The convertion pattern
+112         * @param locPattern    Indicate whether the pattern is localized or not
+113         */
+114        public BigIntegerLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+115    
+116            super(locale, pattern, locPattern);
+117        }
+118    
+119        /**
+120         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+121         * that will return the specified default value
+122         * if a conversion error occurs. The locale is the default locale for
+123         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+124         * for the convertion.
+125         *
+126         * @param defaultValue  The default value to be returned
+127         */
+128        public BigIntegerLocaleConverter(Object defaultValue) {
+129    
+130            this(defaultValue, false);
+131        }
+132    
+133        /**
+134         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+135         * that will return the specified default value
+136         * if a conversion error occurs. The locale is the default locale for
+137         * this instance of the Java Virtual Machine.
+138         *
+139         * @param defaultValue  The default value to be returned
+140         * @param locPattern    Indicate whether the pattern is localized or not
+141         */
+142        public BigIntegerLocaleConverter(Object defaultValue, boolean locPattern) {
+143    
+144            this(defaultValue, Locale.getDefault(), locPattern);
+145        }
+146    
+147        /**
+148         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+149         * that will return the specified default value
+150         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+151         *
+152         * @param defaultValue  The default value to be returned
+153         * @param locale        The locale
+154         */
+155        public BigIntegerLocaleConverter(Object defaultValue, Locale locale) {
+156    
+157            this(defaultValue, locale, false);
+158        }
+159    
+160        /**
+161         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+162         * that will return the specified default value
+163         * if a conversion error occurs.
+164         *
+165         * @param defaultValue  The default value to be returned
+166         * @param locale        The locale
+167         * @param locPattern    Indicate whether the pattern is localized or not
+168         */
+169        public BigIntegerLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+170    
+171            this(defaultValue, locale, null, locPattern);
+172        }
+173    
+174        /**
+175         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+176         * that will return the specified default value
+177         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+178         *
+179         * @param defaultValue  The default value to be returned
+180         * @param locale        The locale
+181         * @param pattern       The convertion pattern
+182         */
+183        public BigIntegerLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+184    
+185            this(defaultValue, locale, pattern, false);
+186        }
+187    
+188        /**
+189         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+190         * that will return the specified default value
+191         * if a conversion error occurs.
+192         *
+193         * @param defaultValue  The default value to be returned
+194         * @param locale        The locale
+195         * @param pattern       The convertion pattern
+196         * @param locPattern    Indicate whether the pattern is localized or not
+197         */
+198        public BigIntegerLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+199    
+200            super(defaultValue, locale, pattern, locPattern);
+201        }
+202    
+203        /**
+204         * Convert the specified locale-sensitive input object into an output object of
+205         * BigInteger type.
+206         *
+207         * @param value The input object to be converted
+208         * @param pattern The pattern is used for the convertion
+209         * @return The converted value
+210         *
+211         * @exception ConversionException if conversion cannot be performed
+212         *  successfully
+213         * @throws ParseException if an error occurs parsing a String to a Number
+214         * @since 1.8.0
+215         */
+216        protected Object parse(Object value, String pattern) throws ParseException {
+217    
+218            Object result = super.parse(value, pattern);
+219    
+220            if (result == null || result instanceof BigInteger) {
+221                return result;
+222            }
+223    
+224            if (result instanceof Number) {
+225                return BigInteger.valueOf(((Number)result).longValue());
+226            } 
+227    
+228            try {
+229                return new BigInteger(result.toString());
+230            }
+231            catch (NumberFormatException ex) {
+232                throw new ConversionException("Suplied number is not of type BigInteger: " + result);
+233            }
+234    
+235        }
+236    
+237    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html new file mode 100644 index 0000000..9974518 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ByteLocaleConverter.html @@ -0,0 +1,290 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import org.apache.commons.beanutils.ConversionException;
+021    
+022    import java.util.Locale;
+023    import java.text.ParseException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter}
+028     * implementation that converts an incoming
+029     * locale-sensitive String into a <code>java.lang.Byte</code> object,
+030     * optionally using a default value or throwing a
+031     * {@link org.apache.commons.beanutils.ConversionException}
+032     * if a conversion error occurs.</p>
+033     *
+034     * @author Yauheny Mikulski
+035     */
+036    
+037    public class ByteLocaleConverter extends DecimalLocaleConverter {
+038    
+039    
+040        // ----------------------------------------------------------- Constructors
+041    
+042        /**
+043         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+044         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+045         * if a conversion error occurs. The locale is the default locale for
+046         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+047         * for the convertion.
+048         *
+049         */
+050        public ByteLocaleConverter() {
+051    
+052            this(false);
+053        }
+054    
+055        /**
+056         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+057         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+058         * if a conversion error occurs. The locale is the default locale for
+059         * this instance of the Java Virtual Machine.
+060         *
+061         * @param locPattern    Indicate whether the pattern is localized or not
+062         */
+063        public ByteLocaleConverter(boolean locPattern) {
+064    
+065            this(Locale.getDefault(), locPattern);
+066        }
+067    
+068        /**
+069         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+070         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+071         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+072         *
+073         * @param locale        The locale
+074         */
+075        public ByteLocaleConverter(Locale locale) {
+076    
+077            this(locale, false);
+078        }
+079    
+080        /**
+081         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+082         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+083         * if a conversion error occurs.
+084         *
+085         * @param locale        The locale
+086         * @param locPattern    Indicate whether the pattern is localized or not
+087         */
+088        public ByteLocaleConverter(Locale locale, boolean locPattern) {
+089    
+090            this(locale, (String) null, locPattern);
+091        }
+092    
+093        /**
+094         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+095         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+096         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+097         *
+098         * @param locale        The locale
+099         * @param pattern       The convertion pattern
+100         */
+101        public ByteLocaleConverter(Locale locale, String pattern) {
+102    
+103            this(locale, pattern, false);
+104        }
+105    
+106        /**
+107         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+108         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+109         * if a conversion error occurs.
+110         *
+111         * @param locale        The locale
+112         * @param pattern       The convertion pattern
+113         * @param locPattern    Indicate whether the pattern is localized or not
+114         */
+115        public ByteLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+116    
+117            super(locale, pattern, locPattern);
+118        }
+119    
+120        /**
+121         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+122         * that will return the specified default value
+123         * if a conversion error occurs. The locale is the default locale for
+124         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+125         * for the convertion.
+126         *
+127         * @param defaultValue  The default value to be returned
+128         */
+129        public ByteLocaleConverter(Object defaultValue) {
+130    
+131            this(defaultValue, false);
+132        }
+133    
+134        /**
+135         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+136         * that will return the specified default value
+137         * if a conversion error occurs. The locale is the default locale for
+138         * this instance of the Java Virtual Machine.
+139         *
+140         * @param defaultValue  The default value to be returned
+141         * @param locPattern    Indicate whether the pattern is localized or not
+142         */
+143        public ByteLocaleConverter(Object defaultValue, boolean locPattern) {
+144    
+145            this(defaultValue, Locale.getDefault(), locPattern);
+146        }
+147    
+148        /**
+149         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+150         * that will return the specified default value
+151         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+152         *
+153         * @param defaultValue  The default value to be returned
+154         * @param locale        The locale
+155         */
+156        public ByteLocaleConverter(Object defaultValue, Locale locale) {
+157    
+158            this(defaultValue, locale, false);
+159        }
+160    
+161        /**
+162         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+163         * that will return the specified default value
+164         * if a conversion error occurs.
+165         *
+166         * @param defaultValue  The default value to be returned
+167         * @param locale        The locale
+168         * @param locPattern    Indicate whether the pattern is localized or not
+169         */
+170        public ByteLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+171    
+172            this(defaultValue, locale, null, locPattern);
+173        }
+174    
+175        /**
+176         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+177         * that will return the specified default value
+178         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+179         *
+180         * @param defaultValue  The default value to be returned
+181         * @param locale        The locale
+182         * @param pattern       The convertion pattern
+183         */
+184        public ByteLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+185    
+186            this(defaultValue, locale, pattern, false);
+187        }
+188    
+189       /**
+190         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+191         * that will return the specified default value
+192         * if a conversion error occurs.
+193         *
+194         * @param defaultValue  The default value to be returned
+195         * @param locale        The locale
+196         * @param pattern       The convertion pattern
+197         * @param locPattern    Indicate whether the pattern is localized or not
+198         */
+199        public ByteLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+200    
+201            super(defaultValue, locale, pattern, locPattern);
+202        }
+203    
+204        /**
+205         * Convert the specified locale-sensitive input object into an output object of the
+206         * specified type. This method will return values of type Byte.
+207         *
+208         * @param value The input object to be converted
+209         * @param pattern The pattern is used for the convertion
+210         * @return The converted value
+211         *
+212         * @exception org.apache.commons.beanutils.ConversionException if conversion cannot be performed
+213         *  successfully
+214         * @throws ParseException if an error occurs parsing a String to a Number
+215         */
+216        protected Object parse(Object value, String pattern) throws ParseException {
+217            final Number parsed = (Number) super.parse(value, pattern);
+218            if (parsed.longValue() != parsed.byteValue()) {
+219                throw new ConversionException("Supplied number is not of type Byte: " + parsed.longValue());
+220            }
+221            // now returns property Byte
+222            return new Byte(parsed.byteValue());
+223        }
+224    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html new file mode 100644 index 0000000..f38d3d3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.html @@ -0,0 +1,450 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import org.apache.commons.beanutils.ConversionException;
+021    import org.apache.commons.beanutils.locale.BaseLocaleConverter;
+022    import org.apache.commons.logging.LogFactory;
+023    import org.apache.commons.logging.Log;
+024    
+025    import java.text.ParseException;
+026    import java.text.ParsePosition;
+027    import java.text.SimpleDateFormat;
+028    import java.text.DateFormat;
+029    import java.text.DateFormatSymbols;
+030    import java.util.Locale;
+031    
+032    
+033    /**
+034     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+035     * implementation that converts an incoming
+036     * locale-sensitive String into a <code>java.util.Date</code> object,
+037     * optionally using a default value or throwing a 
+038     * {@link org.apache.commons.beanutils.ConversionException}
+039     * if a conversion error occurs.</p>
+040     *
+041     * @author Yauheny Mikulski
+042     * @author Michael Szlapa
+043     */
+044    
+045    public class DateLocaleConverter extends BaseLocaleConverter {
+046    
+047        // ----------------------------------------------------- Instance Variables
+048    
+049        /** All logging goes through this logger */
+050        private Log log = LogFactory.getLog(DateLocaleConverter.class);
+051    
+052        /** Should the date conversion be lenient? */
+053        boolean isLenient = false;
+054    
+055        /** 
+056         * Default Pattern Characters 
+057         * 
+058         */
+059        private static final String DEFAULT_PATTERN_CHARS = DateLocaleConverter.initDefaultChars();
+060    
+061        // ----------------------------------------------------------- Constructors
+062    
+063        /**
+064         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+065         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+066         * if a conversion error occurs. The locale is the default locale for
+067         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+068         * for the convertion.
+069         *
+070         */
+071        public DateLocaleConverter() {
+072    
+073            this(false);
+074        }
+075    
+076        /**
+077         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+078         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+079         * if a conversion error occurs. The locale is the default locale for
+080         * this instance of the Java Virtual Machine.
+081         *
+082         * @param locPattern    Indicate whether the pattern is localized or not
+083         */
+084        public DateLocaleConverter(boolean locPattern) {
+085    
+086            this(Locale.getDefault(), locPattern);
+087        }
+088    
+089        /**
+090         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+091         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+092         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+093         *
+094         * @param locale        The locale
+095         */
+096        public DateLocaleConverter(Locale locale) {
+097    
+098            this(locale, false);
+099        }
+100    
+101        /**
+102         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+103         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+104         * if a conversion error occurs.
+105         *
+106         * @param locale        The locale
+107         * @param locPattern    Indicate whether the pattern is localized or not
+108         */
+109        public DateLocaleConverter(Locale locale, boolean locPattern) {
+110    
+111            this(locale, (String) null, locPattern);
+112        }
+113    
+114        /**
+115         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+116         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+117         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+118         *
+119         * @param locale        The locale
+120         * @param pattern       The convertion pattern
+121         */
+122        public DateLocaleConverter(Locale locale, String pattern) {
+123    
+124            this(locale, pattern, false);
+125        }
+126    
+127        /**
+128         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+129         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+130         * if a conversion error occurs.
+131         *
+132         * @param locale        The locale
+133         * @param pattern       The convertion pattern
+134         * @param locPattern    Indicate whether the pattern is localized or not
+135         */
+136        public DateLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+137    
+138            super(locale, pattern, locPattern);
+139        }
+140    
+141        /**
+142         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+143         * that will return the specified default value
+144         * if a conversion error occurs. The locale is the default locale for
+145         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+146         * for the convertion.
+147         *
+148         * @param defaultValue  The default value to be returned
+149         */
+150        public DateLocaleConverter(Object defaultValue) {
+151    
+152            this(defaultValue, false);
+153        }
+154    
+155        /**
+156         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+157         * that will return the specified default value
+158         * if a conversion error occurs. The locale is the default locale for
+159         * this instance of the Java Virtual Machine.
+160         *
+161         * @param defaultValue  The default value to be returned
+162         * @param locPattern    Indicate whether the pattern is localized or not
+163         */
+164        public DateLocaleConverter(Object defaultValue, boolean locPattern) {
+165    
+166            this(defaultValue, Locale.getDefault(), locPattern);
+167        }
+168    
+169        /**
+170         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+171         * that will return the specified default value
+172         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+173         *
+174         * @param defaultValue  The default value to be returned
+175         * @param locale        The locale
+176         */
+177        public DateLocaleConverter(Object defaultValue, Locale locale) {
+178    
+179            this(defaultValue, locale, false);
+180        }
+181    
+182        /**
+183         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+184         * that will return the specified default value
+185         * if a conversion error occurs.
+186         *
+187         * @param defaultValue  The default value to be returned
+188         * @param locale        The locale
+189         * @param locPattern    Indicate whether the pattern is localized or not
+190         */
+191        public DateLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+192    
+193            this(defaultValue, locale, null, locPattern);
+194        }
+195    
+196    
+197        /**
+198         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+199         * that will return the specified default value
+200         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+201         *
+202         * @param defaultValue  The default value to be returned
+203         * @param locale        The locale
+204         * @param pattern       The convertion pattern
+205         */
+206        public DateLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+207    
+208            this(defaultValue, locale, pattern, false);
+209        }
+210    
+211        /**
+212         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+213         * that will return the specified default value
+214         * if a conversion error occurs.
+215         *
+216         * @param defaultValue  The default value to be returned
+217         * @param locale        The locale
+218         * @param pattern       The convertion pattern
+219         * @param locPattern    Indicate whether the pattern is localized or not
+220         */
+221        public DateLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+222    
+223            super(defaultValue, locale, pattern, locPattern);
+224        }
+225    
+226        // --------------------------------------------------------- Methods
+227        
+228        /**
+229         * Returns whether date formatting is lenient.
+230         *
+231         * @return true if the <code>DateFormat</code> used for formatting is lenient
+232         * @see java.text.DateFormat#isLenient
+233         */
+234        public boolean isLenient() {
+235            return isLenient;
+236        }
+237        
+238        /**
+239         * Specify whether or not date-time parsing should be lenient.
+240         * 
+241         * @param lenient true if the <code>DateFormat</code> used for formatting should be lenient
+242         * @see java.text.DateFormat#setLenient
+243         */
+244        public void setLenient(boolean lenient) {
+245            isLenient = lenient;
+246        }
+247    
+248        // --------------------------------------------------------- Methods
+249    
+250        /**
+251         * Convert the specified locale-sensitive input object into an output object of the
+252         * specified type.
+253         *
+254         * @param value The input object to be converted
+255         * @param pattern The pattern is used for the convertion
+256         * @return the converted Date value
+257         *
+258         * @exception org.apache.commons.beanutils.ConversionException 
+259         * if conversion cannot be performed successfully
+260         * @throws ParseException if an error occurs parsing
+261         */
+262        protected Object parse(Object value, String pattern) throws ParseException {
+263     
+264            // Handle Date
+265            if (value instanceof java.util.Date) {
+266                return value;
+267            }
+268    
+269            // Handle Calendar
+270            if (value instanceof java.util.Calendar) {
+271                return ((java.util.Calendar)value).getTime();
+272            }
+273    
+274             if (locPattern) {
+275                 pattern = convertLocalizedPattern(pattern, locale);
+276             }
+277     
+278             // Create Formatter - use default if pattern is null
+279             DateFormat formatter = pattern == null ? DateFormat.getDateInstance(DateFormat.SHORT, locale)
+280                                                    : new SimpleDateFormat(pattern, locale);
+281             formatter.setLenient(isLenient);
+282     
+283    
+284             // Parse the Date
+285            ParsePosition pos = new ParsePosition(0);
+286            String strValue = value.toString();
+287            Object parsedValue = formatter.parseObject(strValue, pos);
+288            if (pos.getErrorIndex() > -1) {
+289                throw new ConversionException("Error parsing date '" + value +
+290                        "' at position="+ pos.getErrorIndex());
+291            }
+292            if (pos.getIndex() < strValue.length()) {
+293                throw new ConversionException("Date '" + value +
+294                        "' contains unparsed characters from position=" + pos.getIndex());
+295            }
+296    
+297            return parsedValue;
+298         }
+299       
+300         /**
+301          * Convert a pattern from a localized format to the default format.
+302          *
+303          * @param locale   The locale
+304          * @param localizedPattern The pattern in 'local' symbol format
+305          * @return pattern in 'default' symbol format
+306          */
+307         private String convertLocalizedPattern(String localizedPattern, Locale locale) {
+308            
+309             if (localizedPattern == null) {
+310                return null;
+311             }
+312             
+313             // Note that this is a little obtuse.
+314             // However, it is the best way that anyone can come up with 
+315             // that works with some 1.4 series JVM.
+316             
+317             // Get the symbols for the localized pattern
+318             DateFormatSymbols localizedSymbols = new DateFormatSymbols(locale);
+319             String localChars = localizedSymbols.getLocalPatternChars();
+320     
+321             if (DEFAULT_PATTERN_CHARS.equals(localChars)) {
+322                 return localizedPattern;
+323             }
+324     
+325             // Convert the localized pattern to default
+326             String convertedPattern = null;
+327             try {
+328                 convertedPattern = convertPattern(localizedPattern,
+329                                                    localChars,
+330                                                    DEFAULT_PATTERN_CHARS);
+331             } catch (Exception ex) {
+332                 log.debug("Converting pattern '" + localizedPattern + "' for " + locale, ex);
+333             }
+334             return convertedPattern; 
+335        }
+336         
+337        /**
+338         * <p>Converts a Pattern from one character set to another.</p>
+339         */
+340        private String convertPattern(String pattern, String fromChars, String toChars) {
+341    
+342            StringBuffer converted = new StringBuffer();
+343            boolean quoted = false;
+344    
+345            for (int i = 0; i < pattern.length(); ++i) {
+346                char thisChar = pattern.charAt(i);
+347                if (quoted) {
+348                    if (thisChar == '\'') {
+349                        quoted = false;
+350                    }
+351                } else {
+352                    if (thisChar == '\'') {
+353                       quoted = true;
+354                    } else if ((thisChar >= 'a' && thisChar <= 'z') || 
+355                               (thisChar >= 'A' && thisChar <= 'Z')) {
+356                        int index = fromChars.indexOf(thisChar );
+357                        if (index == -1) {
+358                            throw new IllegalArgumentException(
+359                                "Illegal pattern character '" + thisChar + "'");
+360                        }
+361                        thisChar = toChars.charAt(index);
+362                    }
+363                }
+364                converted.append(thisChar);
+365            }
+366    
+367            if (quoted) {
+368                throw new IllegalArgumentException("Unfinished quote in pattern");
+369            }
+370    
+371            return converted.toString();
+372        }
+373    
+374        /**
+375         * This method is called at class initialization time to define the
+376         * value for constant member DEFAULT_PATTERN_CHARS. All other methods needing
+377         * this data should just read that constant.
+378         */
+379        private static String initDefaultChars() {
+380            DateFormatSymbols defaultSymbols = new DateFormatSymbols(Locale.US);
+381            return defaultSymbols.getLocalPatternChars();
+382        }
+383    
+384    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html new file mode 100644 index 0000000..fd91bb1 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.html @@ -0,0 +1,321 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import org.apache.commons.beanutils.locale.BaseLocaleConverter;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.text.DecimalFormat;
+025    import java.text.ParseException;
+026    import java.util.Locale;
+027    
+028    
+029    /**
+030     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+031     * implementation that converts an incoming
+032     * locale-sensitive String into a <code>java.lang.Number</code> object,
+033     * optionally using a default value or throwing a 
+034     * {@link org.apache.commons.beanutils.ConversionException}
+035     * if a conversion error occurs.</p>
+036     *
+037     * @author Yauheny Mikulski
+038     * @author Yoav Shapira
+039     * @since 1.7
+040     */
+041    
+042    public class DecimalLocaleConverter extends BaseLocaleConverter {
+043    
+044    
+045        // ----------------------------------------------------- Instance Variables
+046    
+047        /** All logging goes through this logger */
+048        private Log log = LogFactory.getLog(DecimalLocaleConverter.class);     
+049    
+050        // ----------------------------------------------------------- Constructors
+051    
+052        /**
+053         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+054         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+055         * if a conversion error occurs. The locale is the default locale for
+056         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+057         * for the convertion.
+058         *
+059         */
+060        public DecimalLocaleConverter() {
+061    
+062            this(false);
+063        }
+064    
+065        /**
+066         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+067         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+068         * if a conversion error occurs. The locale is the default locale for
+069         * this instance of the Java Virtual Machine.
+070         *
+071         * @param locPattern    Indicate whether the pattern is localized or not
+072         */
+073        public DecimalLocaleConverter(boolean locPattern) {
+074    
+075            this(Locale.getDefault(), locPattern);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+082         *
+083         * @param locale        The locale
+084         */
+085        public DecimalLocaleConverter(Locale locale) {
+086    
+087            this(locale, false);
+088        }
+089    
+090        /**
+091         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+092         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+093         * if a conversion error occurs.
+094         *
+095         * @param locale        The locale
+096         * @param locPattern    Indicate whether the pattern is localized or not
+097         */
+098        public DecimalLocaleConverter(Locale locale, boolean locPattern) {
+099    
+100            this(locale, (String) null, locPattern);
+101        }
+102    
+103        /**
+104         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+105         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+106         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+107         *
+108         * @param locale        The locale
+109         * @param pattern       The convertion pattern
+110         */
+111        public DecimalLocaleConverter(Locale locale, String pattern) {
+112    
+113            this(locale, pattern, false);
+114        }
+115    
+116        /**
+117         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+118         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+119         * if a conversion error occurs.
+120         *
+121         * @param locale        The locale
+122         * @param pattern       The convertion pattern
+123         * @param locPattern    Indicate whether the pattern is localized or not
+124         */
+125        public DecimalLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+126    
+127            super(locale, pattern, locPattern);
+128        }
+129    
+130        /**
+131         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+132         * that will return the specified default value
+133         * if a conversion error occurs. The locale is the default locale for
+134         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+135         * for the convertion.
+136         *
+137         * @param defaultValue  The default value to be returned
+138         */
+139        public DecimalLocaleConverter(Object defaultValue) {
+140    
+141            this(defaultValue, false);
+142        }
+143    
+144        /**
+145         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+146         * that will return the specified default value
+147         * if a conversion error occurs. The locale is the default locale for
+148         * this instance of the Java Virtual Machine.
+149         *
+150         * @param defaultValue  The default value to be returned
+151         * @param locPattern    Indicate whether the pattern is localized or not
+152         */
+153        public DecimalLocaleConverter(Object defaultValue, boolean locPattern) {
+154    
+155            this(defaultValue, Locale.getDefault(), locPattern);
+156        }
+157    
+158        /**
+159         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+160         * that will return the specified default value
+161         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+162         *
+163         * @param defaultValue  The default value to be returned
+164         * @param locale        The locale
+165         */
+166        public DecimalLocaleConverter(Object defaultValue, Locale locale) {
+167    
+168            this(defaultValue, locale, false);
+169        }
+170    
+171        /**
+172         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+173         * that will return the specified default value
+174         * if a conversion error occurs.
+175         *
+176         * @param defaultValue  The default value to be returned
+177         * @param locale        The locale
+178         * @param locPattern    Indicate whether the pattern is localized or not
+179         */
+180        public DecimalLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+181    
+182            this(defaultValue, locale, null, locPattern);
+183        }
+184    
+185        /**
+186         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+187         * that will return the specified default value
+188         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+189         *
+190         * @param defaultValue  The default value to be returned
+191         * @param locale        The locale
+192         * @param pattern       The convertion pattern
+193         */
+194        public DecimalLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+195    
+196            this(defaultValue, locale, pattern, false);
+197        }
+198    
+199        /**
+200         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+201         * that will return the specified default value
+202         * if a conversion error occurs.
+203         *
+204         * @param defaultValue  The default value to be returned
+205         * @param locale        The locale
+206         * @param pattern       The convertion pattern
+207         * @param locPattern    Indicate whether the pattern is localized or not
+208         */
+209        public DecimalLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+210    
+211            super(defaultValue, locale, pattern, locPattern);
+212    
+213        }
+214    
+215        // --------------------------------------------------------- Methods
+216    
+217        /**
+218         * Convert the specified locale-sensitive input object into an output 
+219         * object of the specified type.
+220         *
+221         * @param value The input object to be converted
+222         * @param pattern The pattern is used for the convertion
+223         * @return The converted value
+224         *
+225         * @exception org.apache.commons.beanutils.ConversionException if conversion
+226         * cannot be performed successfully
+227         * @throws ParseException if an error occurs parsing a String to a Number
+228         */
+229        protected Object parse(Object value, String pattern) throws ParseException {
+230    
+231            if (value instanceof Number) {
+232                return value;
+233            }
+234    
+235            // Note that despite the ambiguous "getInstance" name, and despite the
+236            // fact that objects returned from this method have the same toString
+237            // representation, each call to getInstance actually returns a new
+238            // object.
+239            DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(locale);
+240    
+241            // if some constructors default pattern to null, it makes only sense 
+242            // to handle null pattern gracefully
+243            if (pattern != null) {
+244                if (locPattern) {
+245                    formatter.applyLocalizedPattern(pattern);
+246                } else {
+247                    formatter.applyPattern(pattern);
+248                }
+249            } else {
+250                log.debug("No pattern provided, using default.");
+251            }
+252    
+253            return formatter.parse((String) value);
+254        }
+255    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html new file mode 100644 index 0000000..3ee70bc --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.html @@ -0,0 +1,293 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    
+021    import java.text.ParseException;
+022    import java.util.Locale;
+023    
+024    
+025    /**
+026     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+027     * implementation that converts an incoming
+028     * locale-sensitive String into a <code>java.lang.Double</code> object,
+029     * optionally using a default value or throwing a 
+030     * {@link org.apache.commons.beanutils.ConversionException}
+031     * if a conversion error occurs.</p>
+032     *
+033     * @author Yauheny Mikulski
+034     */
+035    
+036    public class DoubleLocaleConverter extends DecimalLocaleConverter {
+037    
+038    
+039        // ----------------------------------------------------------- Constructors
+040    
+041        /**
+042         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+043         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+044         * if a conversion error occurs. The locale is the default locale for
+045         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+046         * for the convertion.
+047         *
+048         */
+049        public DoubleLocaleConverter() {
+050    
+051            this(false);
+052        }
+053    
+054        /**
+055         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+056         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+057         * if a conversion error occurs. The locale is the default locale for
+058         * this instance of the Java Virtual Machine.
+059         *
+060         * @param locPattern    Indicate whether the pattern is localized or not
+061         */
+062        public DoubleLocaleConverter(boolean locPattern) {
+063    
+064            this(Locale.getDefault(), locPattern);
+065        }
+066    
+067        /**
+068         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+069         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+070         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+071         *
+072         * @param locale        The locale
+073         */
+074        public DoubleLocaleConverter(Locale locale) {
+075    
+076            this(locale, false);
+077        }
+078    
+079        /**
+080         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+081         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+082         * if a conversion error occurs.
+083         *
+084         * @param locale        The locale
+085         * @param locPattern    Indicate whether the pattern is localized or not
+086         */
+087        public DoubleLocaleConverter(Locale locale, boolean locPattern) {
+088    
+089            this(locale, (String) null, locPattern);
+090        }
+091    
+092        /**
+093         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+094         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+095         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+096         *
+097         * @param locale        The locale
+098         * @param pattern       The convertion pattern
+099         */
+100        public DoubleLocaleConverter(Locale locale, String pattern) {
+101    
+102            this(locale, pattern, false);
+103        }
+104    
+105        /**
+106         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+107         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+108         * if a conversion error occurs.
+109         *
+110         * @param locale        The locale
+111         * @param pattern       The convertion pattern
+112         * @param locPattern    Indicate whether the pattern is localized or not
+113         */
+114        public DoubleLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+115    
+116            super(locale, pattern, locPattern);
+117        }
+118    
+119        /**
+120         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+121         * that will return the specified default value
+122         * if a conversion error occurs. The locale is the default locale for
+123         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+124         * for the convertion.
+125         *
+126         * @param defaultValue  The default value to be returned
+127         */
+128        public DoubleLocaleConverter(Object defaultValue) {
+129    
+130            this(defaultValue, false);
+131        }
+132    
+133        /**
+134         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+135         * that will return the specified default value
+136         * if a conversion error occurs. The locale is the default locale for
+137         * this instance of the Java Virtual Machine.
+138         *
+139         * @param defaultValue  The default value to be returned
+140         * @param locPattern    Indicate whether the pattern is localized or not
+141         */
+142        public DoubleLocaleConverter(Object defaultValue, boolean locPattern) {
+143    
+144            this(defaultValue, Locale.getDefault(), locPattern);
+145        }
+146    
+147        /**
+148         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+149         * that will return the specified default value
+150         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+151         *
+152         * @param defaultValue  The default value to be returned
+153         * @param locale        The locale
+154         */
+155        public DoubleLocaleConverter(Object defaultValue, Locale locale) {
+156    
+157            this(defaultValue, locale, false);
+158        }
+159    
+160        /**
+161         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+162         * that will return the specified default value
+163         * if a conversion error occurs.
+164         *
+165         * @param defaultValue  The default value to be returned
+166         * @param locale        The locale
+167         * @param locPattern    Indicate whether the pattern is localized or not
+168         */
+169        public DoubleLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+170    
+171            this(defaultValue, locale, null, locPattern);
+172        }
+173    
+174        /**
+175         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+176         * that will return the specified default value
+177         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+178         *
+179         * @param defaultValue  The default value to be returned
+180         * @param locale        The locale
+181         * @param pattern       The convertion pattern
+182         */
+183        public DoubleLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+184    
+185            this(defaultValue, locale, pattern, false);
+186        }
+187    
+188        /**
+189         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+190         * that will return the specified default value
+191         * if a conversion error occurs.
+192         *
+193         * @param defaultValue  The default value to be returned
+194         * @param locale        The locale
+195         * @param pattern       The convertion pattern
+196         * @param locPattern    Indicate whether the pattern is localized or not
+197         */
+198        public DoubleLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+199    
+200            super(defaultValue, locale, pattern, locPattern);
+201        }
+202    
+203        /**
+204         * Convert the specified locale-sensitive input object into an output object of the
+205         * specified type. This method will return Double type.
+206         *
+207         * @param value The input object to be converted
+208         * @param pattern The pattern is used for the convertion
+209         * @return The converted value
+210         *
+211         * @throws org.apache.commons.beanutils.ConversionException if conversion cannot be performed
+212         *  successfully
+213         * @throws ParseException if an error occurs parsing a String to a Number
+214         */
+215        protected Object parse(Object value, String pattern) throws ParseException {
+216            Number result = (Number) super.parse(value, pattern);
+217            if (result instanceof Long) {
+218                return new Double(result.doubleValue());
+219            } else {
+220                return (result);
+221            }
+222        }
+223    
+224    
+225    }
+226    
+227    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html new file mode 100644 index 0000000..12724cd --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/FloatLocaleConverter.html @@ -0,0 +1,292 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import org.apache.commons.beanutils.ConversionException;
+021    
+022    import java.util.Locale;
+023    import java.text.ParseException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter}
+028     * implementation that converts an incoming
+029     * locale-sensitive String into a <code>java.math.BigDecimal</code> object,
+030     * optionally using a default value or throwing a
+031     * {@link org.apache.commons.beanutils.ConversionException}
+032     * if a conversion error occurs.</p>
+033     *
+034     * @author Yauheny Mikulski
+035     */
+036    
+037    public class FloatLocaleConverter extends DecimalLocaleConverter {
+038    
+039    
+040        // ----------------------------------------------------------- Constructors
+041    
+042        /**
+043         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+044         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+045         * if a conversion error occurs. The locale is the default locale for
+046         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+047         * for the convertion.
+048         *
+049         */
+050        public FloatLocaleConverter() {
+051    
+052            this(false);
+053        }
+054    
+055        /**
+056         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+057         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+058         * if a conversion error occurs. The locale is the default locale for
+059         * this instance of the Java Virtual Machine.
+060         *
+061         * @param locPattern    Indicate whether the pattern is localized or not
+062         */
+063        public FloatLocaleConverter(boolean locPattern) {
+064    
+065            this(Locale.getDefault(), locPattern);
+066        }
+067    
+068        /**
+069         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+070         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+071         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+072         *
+073         * @param locale        The locale
+074         */
+075        public FloatLocaleConverter(Locale locale) {
+076    
+077            this(locale, false);
+078        }
+079    
+080        /**
+081         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+082         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+083         * if a conversion error occurs.
+084         *
+085         * @param locale        The locale
+086         * @param locPattern    Indicate whether the pattern is localized or not
+087         */
+088        public FloatLocaleConverter(Locale locale, boolean locPattern) {
+089    
+090            this(locale, (String) null, locPattern);
+091        }
+092    
+093        /**
+094         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+095         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+096         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+097         *
+098         * @param locale        The locale
+099         * @param pattern       The convertion pattern
+100         */
+101        public FloatLocaleConverter(Locale locale, String pattern) {
+102    
+103            this(locale, pattern, false);
+104        }
+105    
+106        /**
+107         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+108         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+109         * if a conversion error occurs.
+110         *
+111         * @param locale        The locale
+112         * @param pattern       The convertion pattern
+113         * @param locPattern    Indicate whether the pattern is localized or not
+114         */
+115        public FloatLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+116    
+117            super(locale, pattern, locPattern);
+118        }
+119    
+120        /**
+121         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+122         * that will return the specified default value
+123         * if a conversion error occurs. The locale is the default locale for
+124         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+125         * for the convertion.
+126         *
+127         * @param defaultValue  The default value to be returned
+128         */
+129        public FloatLocaleConverter(Object defaultValue) {
+130    
+131            this(defaultValue, false);
+132        }
+133    
+134        /**
+135         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+136         * that will return the specified default value
+137         * if a conversion error occurs. The locale is the default locale for
+138         * this instance of the Java Virtual Machine.
+139         *
+140         * @param defaultValue  The default value to be returned
+141         * @param locPattern    Indicate whether the pattern is localized or not
+142         */
+143        public FloatLocaleConverter(Object defaultValue, boolean locPattern) {
+144    
+145            this(defaultValue, Locale.getDefault(), locPattern);
+146        }
+147    
+148        /**
+149         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+150         * that will return the specified default value
+151         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+152         *
+153         * @param defaultValue  The default value to be returned
+154         * @param locale        The locale
+155         */
+156        public FloatLocaleConverter(Object defaultValue, Locale locale) {
+157    
+158            this(defaultValue, locale, false);
+159        }
+160    
+161        /**
+162         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+163         * that will return the specified default value
+164         * if a conversion error occurs.
+165         *
+166         * @param defaultValue  The default value to be returned
+167         * @param locale        The locale
+168         * @param locPattern    Indicate whether the pattern is localized or not
+169         */
+170        public FloatLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+171    
+172            this(defaultValue, locale, null, locPattern);
+173        }
+174    
+175        /**
+176         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+177         * that will return the specified default value
+178         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+179         *
+180         * @param defaultValue  The default value to be returned
+181         * @param locale        The locale
+182         * @param pattern       The convertion pattern
+183         */
+184        public FloatLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+185    
+186            this(defaultValue, locale, pattern, false);
+187        }
+188    
+189        /**
+190         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+191         * that will return the specified default value
+192         * if a conversion error occurs.
+193         *
+194         * @param defaultValue  The default value to be returned
+195         * @param locale        The locale
+196         * @param pattern       The convertion pattern
+197         * @param locPattern    Indicate whether the pattern is localized or not
+198         */
+199        public FloatLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+200    
+201            super(defaultValue, locale, pattern, locPattern);
+202        }
+203    
+204       /**
+205        * Convert the specified locale-sensitive input object into an output object of the
+206        * specified type.  This method will return Float value or throw exception if value
+207        * can not be stored in the Float.
+208        *
+209        * @param value The input object to be converted
+210        * @param pattern The pattern is used for the convertion
+211        * @return The converted value
+212        *
+213        * @exception ConversionException if conversion cannot be performed
+214        *  successfully
+215        * @throws ParseException if an error occurs parsing a String to a Number
+216        */
+217       protected Object parse(Object value, String pattern) throws ParseException {
+218          final Number parsed = (Number) super.parse(value, pattern);
+219          double doubleValue = parsed.doubleValue();
+220          double posDouble = (doubleValue >= (double)0) ? doubleValue : (doubleValue * (double)-1);
+221          if (posDouble != 0 && (posDouble < Float.MIN_VALUE || posDouble > Float.MAX_VALUE)) {
+222              throw new ConversionException("Supplied number is not of type Float: "+parsed);
+223          }
+224          return new Float(parsed.floatValue()); // unlike superclass it returns Float type
+225       }
+226    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html new file mode 100644 index 0000000..7533e56 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/IntegerLocaleConverter.html @@ -0,0 +1,290 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import org.apache.commons.beanutils.ConversionException;
+021    
+022    import java.util.Locale;
+023    import java.text.ParseException;
+024    
+025    
+026    /**
+027     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter}
+028     * implementation that converts an incoming
+029     * locale-sensitive String into a <code>java.lang.Integer</code> object,
+030     * optionally using a default value or throwing a
+031     * {@link org.apache.commons.beanutils.ConversionException}
+032     * if a conversion error occurs.</p>
+033     *
+034     * @author Yauheny Mikulski
+035     */
+036    
+037    public class IntegerLocaleConverter extends DecimalLocaleConverter {
+038    
+039    
+040        // ----------------------------------------------------------- Constructors
+041    
+042        /**
+043         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+044         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+045         * if a conversion error occurs. The locale is the default locale for
+046         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+047         * for the convertion.
+048         *
+049         */
+050    
+051        public IntegerLocaleConverter() {
+052    
+053            this(false);
+054        }
+055    
+056        /**
+057         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+058         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+059         * if a conversion error occurs. The locale is the default locale for
+060         * this instance of the Java Virtual Machine.
+061         *
+062         * @param locPattern    Indicate whether the pattern is localized or not
+063         */
+064        public IntegerLocaleConverter(boolean locPattern) {
+065    
+066            this(Locale.getDefault(), locPattern);
+067        }
+068    
+069        /**
+070         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+071         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+072         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+073         *
+074         * @param locale        The locale
+075         */
+076        public IntegerLocaleConverter(Locale locale) {
+077    
+078            this(locale, false);
+079        }
+080    
+081        /**
+082         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+083         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+084         * if a conversion error occurs.
+085         *
+086         * @param locale        The locale
+087         * @param locPattern    Indicate whether the pattern is localized or not
+088         */
+089        public IntegerLocaleConverter(Locale locale, boolean locPattern) {
+090    
+091            this(locale, (String) null, locPattern);
+092        }
+093    
+094        /**
+095         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+096         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+097         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+098         *
+099         * @param locale        The locale
+100         * @param pattern       The convertion pattern
+101         */
+102        public IntegerLocaleConverter(Locale locale, String pattern) {
+103    
+104            this(locale, pattern, false);
+105        }
+106    
+107        /**
+108         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+109         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+110         * if a conversion error occurs.
+111         *
+112         * @param locale        The locale
+113         * @param pattern       The convertion pattern
+114         * @param locPattern    Indicate whether the pattern is localized or not
+115         */
+116        public IntegerLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+117    
+118            super(locale, pattern, locPattern);
+119        }
+120    
+121        /**
+122         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+123         * that will return the specified default value
+124         * if a conversion error occurs. The locale is the default locale for
+125         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+126         * for the convertion.
+127         *
+128         * @param defaultValue  The default value to be returned
+129         */
+130        public IntegerLocaleConverter(Object defaultValue) {
+131    
+132            this(defaultValue, false);
+133        }
+134    
+135        /**
+136         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+137         * that will return the specified default value
+138         * if a conversion error occurs. The locale is the default locale for
+139         * this instance of the Java Virtual Machine.
+140         *
+141         * @param defaultValue  The default value to be returned
+142         * @param locPattern    Indicate whether the pattern is localized or not
+143         */
+144        public IntegerLocaleConverter(Object defaultValue, boolean locPattern) {
+145    
+146            this(defaultValue, Locale.getDefault(), locPattern);
+147        }
+148    
+149        /**
+150         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+151         * that will return the specified default value
+152         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+153         *
+154         * @param defaultValue  The default value to be returned
+155         * @param locale        The locale
+156         */
+157        public IntegerLocaleConverter(Object defaultValue, Locale locale) {
+158    
+159            this(defaultValue, locale, false);
+160        }
+161    
+162        /**
+163         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+164         * that will return the specified default value
+165         * if a conversion error occurs.
+166         *
+167         * @param defaultValue  The default value to be returned
+168         * @param locale        The locale
+169         * @param locPattern    Indicate whether the pattern is localized or not
+170         */
+171        public IntegerLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+172    
+173            this(defaultValue, locale, null, locPattern);
+174        }
+175    
+176        /**
+177         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+178         * that will return the specified default value
+179         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+180         *
+181         * @param defaultValue  The default value to be returned
+182         * @param locale        The locale
+183         * @param pattern       The convertion pattern
+184         */
+185        public IntegerLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+186    
+187            this(defaultValue, locale, pattern, false);
+188        }
+189    
+190        /**
+191         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+192         * that will return the specified default value
+193         * if a conversion error occurs.
+194         *
+195         * @param defaultValue  The default value to be returned
+196         * @param locale        The locale
+197         * @param pattern       The convertion pattern
+198         * @param locPattern    Indicate whether the pattern is localized or not
+199         */
+200        public IntegerLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+201    
+202            super(defaultValue, locale, pattern, locPattern);
+203        }
+204    
+205        /**
+206         * Convert the specified locale-sensitive input object into an output object of the
+207         * specified type. This method will return Integer type.
+208         *
+209         * @param value The input object to be converted
+210         * @param pattern The pattern is used for the convertion
+211         * @return The converted value
+212         *
+213         * @exception ConversionException if conversion cannot be performed
+214         *  successfully
+215         * @throws ParseException if an error occurs parsing a String to a Number
+216         */
+217        protected Object parse(Object value, String pattern) throws ParseException {
+218            final Number parsed = (Number) super.parse(value, pattern);
+219            if (parsed.longValue() != parsed.intValue()) {
+220                throw new ConversionException("Suplied number is not of type Integer: " + parsed.longValue());
+221            }
+222            return new Integer(parsed.intValue()); // unlike superclass it will return proper Integer
+223        }
+224    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html new file mode 100644 index 0000000..2868396 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/LongLocaleConverter.html @@ -0,0 +1,292 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.util.Locale;
+021    import java.text.ParseException;
+022    
+023    
+024    /**
+025     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+026     * implementation that converts an incoming
+027     * locale-sensitive String into a <code>java.lang.Long</code> object,
+028     * optionally using a default value or throwing a 
+029     * {@link org.apache.commons.beanutils.ConversionException}
+030     * if a conversion error occurs.</p>
+031     *
+032     * @author Yauheny Mikulski
+033     */
+034    
+035    public class LongLocaleConverter extends DecimalLocaleConverter {
+036    
+037    
+038        // ----------------------------------------------------------- Constructors
+039    
+040        /**
+041         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+042         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+043         * if a conversion error occurs. The locale is the default locale for
+044         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+045         * for the convertion.
+046         *
+047         */
+048        public LongLocaleConverter() {
+049    
+050            this(false);
+051        }
+052    
+053        /**
+054         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+055         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+056         * if a conversion error occurs. The locale is the default locale for
+057         * this instance of the Java Virtual Machine.
+058         *
+059         * @param locPattern    Indicate whether the pattern is localized or not
+060         */
+061        public LongLocaleConverter(boolean locPattern) {
+062    
+063            this(Locale.getDefault(), locPattern);
+064        }
+065    
+066        /**
+067         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+068         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+069         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+070         *
+071         * @param locale        The locale
+072         */
+073        public LongLocaleConverter(Locale locale) {
+074    
+075            this(locale, false);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs.
+082         *
+083         * @param locale        The locale
+084         * @param locPattern    Indicate whether the pattern is localized or not
+085         */
+086        public LongLocaleConverter(Locale locale, boolean locPattern) {
+087    
+088            this(locale, (String) null, locPattern);
+089        }
+090    
+091        /**
+092         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+093         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+094         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+095         *
+096         * @param locale        The locale
+097         * @param pattern       The convertion pattern
+098         */
+099        public LongLocaleConverter(Locale locale, String pattern) {
+100    
+101            this(locale, pattern, false);
+102        }
+103    
+104        /**
+105         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+106         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+107         * if a conversion error occurs.
+108         *
+109         * @param locale        The locale
+110         * @param pattern       The convertion pattern
+111         * @param locPattern    Indicate whether the pattern is localized or not
+112         */
+113        public LongLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+114    
+115            super(locale, pattern, locPattern);
+116        }
+117    
+118        /**
+119         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+120         * that will return the specified default value
+121         * if a conversion error occurs. The locale is the default locale for
+122         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+123         * for the convertion.
+124         *
+125         * @param defaultValue  The default value to be returned
+126         */
+127        public LongLocaleConverter(Object defaultValue) {
+128    
+129            this(defaultValue, false);
+130        }
+131    
+132        /**
+133         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+134         * that will return the specified default value
+135         * if a conversion error occurs. The locale is the default locale for
+136         * this instance of the Java Virtual Machine.
+137         *
+138         * @param defaultValue  The default value to be returned
+139         * @param locPattern    Indicate whether the pattern is localized or not
+140         */
+141        public LongLocaleConverter(Object defaultValue, boolean locPattern) {
+142    
+143            this(defaultValue, Locale.getDefault(), locPattern);
+144        }
+145    
+146        /**
+147         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+148         * that will return the specified default value
+149         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+150         *
+151         * @param defaultValue  The default value to be returned
+152         * @param locale        The locale
+153         */
+154        public LongLocaleConverter(Object defaultValue, Locale locale) {
+155    
+156            this(defaultValue, locale, false);
+157        }
+158    
+159        /**
+160         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+161         * that will return the specified default value
+162         * if a conversion error occurs.
+163         *
+164         * @param defaultValue  The default value to be returned
+165         * @param locale        The locale
+166         * @param locPattern    Indicate whether the pattern is localized or not
+167         */
+168        public LongLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+169    
+170            this(defaultValue, locale, null, locPattern);
+171        }
+172    
+173        /**
+174         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+175         * that will return the specified default value
+176         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+177         *
+178         * @param defaultValue  The default value to be returned
+179         * @param locale        The locale
+180         * @param pattern       The convertion pattern
+181         */
+182        public LongLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+183    
+184            this(defaultValue, locale, pattern, false);
+185        }
+186    
+187        /**
+188         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+189         * that will return the specified default value
+190         * if a conversion error occurs.
+191         *
+192         * @param defaultValue  The default value to be returned
+193         * @param locale        The locale
+194         * @param pattern       The convertion pattern
+195         * @param locPattern    Indicate whether the pattern is localized or not
+196         */
+197        public LongLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+198    
+199            super(defaultValue, locale, pattern, locPattern);
+200        }
+201    
+202        /**
+203         * Convert the specified locale-sensitive input object into an output object of the
+204         * specified type. This method will return a Long type.
+205         *
+206         * @param value The input object to be converted
+207         * @param pattern The pattern is used for the convertion
+208         * @return The converted value
+209         *
+210         * @exception org.apache.commons.beanutils.ConversionException if conversion
+211         * cannot be performed successfully
+212         * @throws ParseException if an error occurs parsing a String to a Number
+213         * @since 1.8.0
+214         */
+215        protected Object parse(Object value, String pattern) throws ParseException {
+216    
+217            Object result = super.parse(value, pattern);
+218    
+219            if (result == null || result instanceof Long) {
+220                return result;
+221            }
+222    
+223            return new Long(((Number)result).longValue());
+224    
+225        }
+226    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html new file mode 100644 index 0000000..018027f --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/ShortLocaleConverter.html @@ -0,0 +1,299 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.util.Locale;
+021    import java.text.ParseException;
+022    import org.apache.commons.beanutils.ConversionException;
+023    
+024    
+025    /**
+026     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+027     * implementation that converts an incoming
+028     * locale-sensitive String into a <code>java.lang.Short</code> object,
+029     * optionally using a default value or throwing a 
+030     * {@link org.apache.commons.beanutils.ConversionException}
+031     * if a conversion error occurs.</p>
+032     *
+033     * @author Yauheny Mikulski
+034     */
+035    
+036    public class ShortLocaleConverter extends DecimalLocaleConverter {
+037    
+038        // ----------------------------------------------------------- Constructors
+039    
+040        /**
+041         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+042         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+043         * if a conversion error occurs. The locale is the default locale for
+044         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+045         * for the convertion.
+046         *
+047         */
+048        public ShortLocaleConverter() {
+049    
+050            this(false);
+051        }
+052    
+053        /**
+054         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+055         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+056         * if a conversion error occurs. The locale is the default locale for
+057         * this instance of the Java Virtual Machine.
+058         *
+059         * @param locPattern    Indicate whether the pattern is localized or not
+060         */
+061        public ShortLocaleConverter(boolean locPattern) {
+062    
+063            this(Locale.getDefault(), locPattern);
+064        }
+065    
+066        /**
+067         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+068         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+069         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+070         *
+071         * @param locale        The locale
+072         */
+073        public ShortLocaleConverter(Locale locale) {
+074    
+075            this(locale, false);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs.
+082         *
+083         * @param locale        The locale
+084         * @param locPattern    Indicate whether the pattern is localized or not
+085         */
+086        public ShortLocaleConverter(Locale locale, boolean locPattern) {
+087    
+088            this(locale, (String) null, locPattern);
+089        }
+090    
+091        /**
+092         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+093         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+094         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+095         *
+096         * @param locale        The locale
+097         * @param pattern       The convertion pattern
+098         */
+099        public ShortLocaleConverter(Locale locale, String pattern) {
+100    
+101            this(locale, pattern, false);
+102        }
+103    
+104        /**
+105         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+106         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+107         * if a conversion error occurs.
+108         *
+109         * @param locale        The locale
+110         * @param pattern       The convertion pattern
+111         * @param locPattern    Indicate whether the pattern is localized or not
+112         */
+113        public ShortLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+114    
+115            super(locale, pattern, locPattern);
+116        }
+117    
+118        /**
+119         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+120         * that will return the specified default value
+121         * if a conversion error occurs. The locale is the default locale for
+122         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+123         * for the convertion.
+124         *
+125         * @param defaultValue  The default value to be returned
+126         */
+127        public ShortLocaleConverter(Object defaultValue) {
+128    
+129            this(defaultValue, false);
+130        }
+131    
+132        /**
+133         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+134         * that will return the specified default value
+135         * if a conversion error occurs. The locale is the default locale for
+136         * this instance of the Java Virtual Machine.
+137         *
+138         * @param defaultValue  The default value to be returned
+139         * @param locPattern    Indicate whether the pattern is localized or not
+140         */
+141        public ShortLocaleConverter(Object defaultValue, boolean locPattern) {
+142    
+143            this(defaultValue, Locale.getDefault(), locPattern);
+144        }
+145    
+146        /**
+147         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+148         * that will return the specified default value
+149         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+150         *
+151         * @param defaultValue  The default value to be returned
+152         * @param locale        The locale
+153         */
+154        public ShortLocaleConverter(Object defaultValue, Locale locale) {
+155    
+156            this(defaultValue, locale, false);
+157        }
+158    
+159        /**
+160         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+161         * that will return the specified default value
+162         * if a conversion error occurs.
+163         *
+164         * @param defaultValue  The default value to be returned
+165         * @param locale        The locale
+166         * @param locPattern    Indicate whether the pattern is localized or not
+167         */
+168        public ShortLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+169    
+170            this(defaultValue, locale, null, locPattern);
+171        }
+172    
+173        /**
+174         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+175         * that will return the specified default value
+176         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+177         *
+178         * @param defaultValue  The default value to be returned
+179         * @param locale        The locale
+180         * @param pattern       The convertion pattern
+181         */
+182        public ShortLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+183    
+184            this(defaultValue, locale, pattern, false);
+185        }
+186    
+187        /**
+188         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+189         * that will return the specified default value
+190         * if a conversion error occurs.
+191         *
+192         * @param defaultValue  The default value to be returned
+193         * @param locale        The locale
+194         * @param pattern       The convertion pattern
+195         * @param locPattern    Indicate whether the pattern is localized or not
+196         */
+197        public ShortLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+198    
+199            super(defaultValue, locale, pattern, locPattern);
+200        }
+201    
+202        /**
+203         * Convert the specified locale-sensitive input object into an output object of the
+204         * specified type. This method will return values of type Short.
+205         *
+206         * @param value The input object to be converted
+207         * @param pattern The pattern is used for the convertion
+208         * @return The converted value
+209         *
+210         * @exception org.apache.commons.beanutils.ConversionException if conversion cannot be performed
+211         *  successfully
+212         * @throws ParseException if an error occurs parsing a String to a Number
+213         * @since 1.8.0
+214         */
+215        protected Object parse(Object value, String pattern) throws ParseException {
+216    
+217            Object result = super.parse(value, pattern);
+218    
+219            if (result == null || result instanceof Short) {
+220                return result;
+221            }
+222    
+223            Number parsed = (Number)result;
+224            if (parsed.longValue() != parsed.shortValue()) {
+225                throw new ConversionException("Supplied number is not of type Short: " + parsed.longValue());
+226            }
+227    
+228            // now returns property Short
+229            return new Short(parsed.shortValue());
+230        }
+231    
+232    }
+233    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html new file mode 100644 index 0000000..b0ec957 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlDateLocaleConverter.html @@ -0,0 +1,287 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.sql.Date;
+021    import java.text.ParseException;
+022    import java.util.Locale;
+023    
+024    /**
+025     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+026     * implementation that converts an incoming
+027     * locale-sensitive String into a <code>java.sql.Date</code> object,
+028     * optionally using a default value or throwing a 
+029     * {@link org.apache.commons.beanutils.ConversionException}
+030     * if a conversion error occurs.</p>
+031     *
+032     * @author Yauheny Mikulski
+033     */
+034    
+035    public class SqlDateLocaleConverter extends DateLocaleConverter {
+036    
+037    
+038        // ----------------------------------------------------------- Constructors
+039    
+040        /**
+041         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+042         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+043         * if a conversion error occurs. The locale is the default locale for
+044         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+045         * for the convertion.
+046         *
+047         */
+048        public SqlDateLocaleConverter() {
+049    
+050            this(false);
+051        }
+052    
+053        /**
+054         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+055         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+056         * if a conversion error occurs. The locale is the default locale for
+057         * this instance of the Java Virtual Machine.
+058         *
+059         * @param locPattern    Indicate whether the pattern is localized or not
+060         */
+061        public SqlDateLocaleConverter(boolean locPattern) {
+062    
+063            this(Locale.getDefault(), locPattern);
+064        }
+065    
+066        /**
+067         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+068         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+069         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+070         *
+071         * @param locale        The locale
+072         */
+073        public SqlDateLocaleConverter(Locale locale) {
+074    
+075            this(locale, false);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs.
+082         *
+083         * @param locale        The locale
+084         * @param locPattern    Indicate whether the pattern is localized or not
+085         */
+086        public SqlDateLocaleConverter(Locale locale, boolean locPattern) {
+087    
+088            this(locale, (String) null, locPattern);
+089        }
+090    
+091        /**
+092         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+093         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+094         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+095         *
+096         * @param locale        The locale
+097         * @param pattern       The convertion pattern
+098         */
+099        public SqlDateLocaleConverter(Locale locale, String pattern) {
+100    
+101            this(locale, pattern, false);
+102        }
+103    
+104        /**
+105         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+106         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+107         * if a conversion error occurs.
+108         *
+109         * @param locale        The locale
+110         * @param pattern       The convertion pattern
+111         * @param locPattern    Indicate whether the pattern is localized or not
+112         */
+113        public SqlDateLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+114    
+115            super(locale, pattern, locPattern);
+116        }
+117    
+118        /**
+119         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+120         * that will return the specified default value
+121         * if a conversion error occurs. The locale is the default locale for
+122         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+123         * for the convertion.
+124         *
+125         * @param defaultValue  The default value to be returned
+126         */
+127        public SqlDateLocaleConverter(Object defaultValue) {
+128    
+129            this(defaultValue, false);
+130        }
+131    
+132        /**
+133         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+134         * that will return the specified default value
+135         * if a conversion error occurs. The locale is the default locale for
+136         * this instance of the Java Virtual Machine.
+137         *
+138         * @param defaultValue  The default value to be returned
+139         * @param locPattern    Indicate whether the pattern is localized or not
+140         */
+141        public SqlDateLocaleConverter(Object defaultValue, boolean locPattern) {
+142    
+143            this(defaultValue, Locale.getDefault(), locPattern);
+144        }
+145    
+146        /**
+147         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+148         * that will return the specified default value
+149         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+150         *
+151         * @param defaultValue  The default value to be returned
+152         * @param locale        The locale
+153         */
+154        public SqlDateLocaleConverter(Object defaultValue, Locale locale) {
+155    
+156            this(defaultValue, locale, false);
+157        }
+158    
+159        /**
+160         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+161         * that will return the specified default value
+162         * if a conversion error occurs.
+163         *
+164         * @param defaultValue  The default value to be returned
+165         * @param locale        The locale
+166         * @param locPattern    Indicate whether the pattern is localized or not
+167         */
+168        public SqlDateLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+169    
+170            this(defaultValue, locale, null, locPattern);
+171        }
+172    
+173        /**
+174         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+175         * that will return the specified default value
+176         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+177         *
+178         * @param defaultValue  The default value to be returned
+179         * @param locale        The locale
+180         * @param pattern       The convertion pattern
+181         */
+182        public SqlDateLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+183    
+184            this(defaultValue, locale, pattern, false);
+185        }
+186    
+187        /**
+188         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+189         * that will return the specified default value
+190         * if a conversion error occurs.
+191         *
+192         * @param defaultValue  The default value to be returned
+193         * @param locale        The locale
+194         * @param pattern       The convertion pattern
+195         * @param locPattern    Indicate whether the pattern is localized or not
+196         */
+197        public SqlDateLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+198    
+199            super(defaultValue, locale, pattern, locPattern);
+200        }
+201    
+202    
+203        // --------------------------------------------------------- Methods
+204    
+205        /**
+206         * Convert the specified locale-sensitive input object into an output object of the
+207         * specified type.
+208         *
+209         * @param value The input object to be converted
+210         * @param pattern The pattern is used for the convertion
+211         * @return The converted value
+212         *
+213         * @exception org.apache.commons.beanutils.ConversionException if conversion
+214         * cannot be performed successfully
+215         * @throws ParseException if an error occurs parsing a String to a Number
+216         */
+217        protected Object parse(Object value, String pattern) throws ParseException {
+218    
+219            return new Date(((java.util.Date) super.parse(value, pattern)).getTime());
+220        }
+221    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html new file mode 100644 index 0000000..567079d --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimeLocaleConverter.html @@ -0,0 +1,286 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.sql.Time;
+021    import java.text.ParseException;
+022    import java.util.Locale;
+023    
+024    /**
+025     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+026     * implementation that converts an incoming
+027     * locale-sensitive String into a <code>java.sql.Time</code> object,
+028     * optionally using a default value or throwing a 
+029     * {@link org.apache.commons.beanutils.ConversionException}
+030     * if a conversion error occurs.</p>
+031     *
+032     * @author Yauheny Mikulski
+033     */
+034    
+035    public class SqlTimeLocaleConverter extends DateLocaleConverter {
+036    
+037    
+038        // ----------------------------------------------------------- Constructors
+039    
+040        /**
+041         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+042         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+043         * if a conversion error occurs. The locale is the default locale for
+044         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+045         * for the convertion.
+046         *
+047         */
+048        public SqlTimeLocaleConverter() {
+049    
+050            this(false);
+051        }
+052    
+053        /**
+054         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+055         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+056         * if a conversion error occurs. The locale is the default locale for
+057         * this instance of the Java Virtual Machine.
+058         *
+059         * @param locPattern    Indicate whether the pattern is localized or not
+060         */
+061        public SqlTimeLocaleConverter(boolean locPattern) {
+062    
+063            this(Locale.getDefault(), locPattern);
+064        }
+065    
+066        /**
+067         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+068         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+069         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+070         *
+071         * @param locale        The locale
+072         */
+073        public SqlTimeLocaleConverter(Locale locale) {
+074    
+075            this(locale, false);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs.
+082         *
+083         * @param locale        The locale
+084         * @param locPattern    Indicate whether the pattern is localized or not
+085         */
+086        public SqlTimeLocaleConverter(Locale locale, boolean locPattern) {
+087    
+088            this(locale, (String) null, locPattern);
+089        }
+090    
+091        /**
+092         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+093         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+094         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+095         *
+096         * @param locale        The locale
+097         * @param pattern       The convertion pattern
+098         */
+099        public SqlTimeLocaleConverter(Locale locale, String pattern) {
+100    
+101            this(locale, pattern, false);
+102        }
+103    
+104        /**
+105         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+106         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+107         * if a conversion error occurs.
+108         *
+109         * @param locale        The locale
+110         * @param pattern       The convertion pattern
+111         * @param locPattern    Indicate whether the pattern is localized or not
+112         */
+113        public SqlTimeLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+114    
+115            super(locale, pattern, locPattern);
+116        }
+117    
+118        /**
+119         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+120         * that will return the specified default value
+121         * if a conversion error occurs. The locale is the default locale for
+122         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+123         * for the convertion.
+124         *
+125         * @param defaultValue  The default value to be returned
+126         */
+127        public SqlTimeLocaleConverter(Object defaultValue) {
+128    
+129            this(defaultValue, false);
+130        }
+131    
+132        /**
+133         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+134         * that will return the specified default value
+135         * if a conversion error occurs. The locale is the default locale for
+136         * this instance of the Java Virtual Machine.
+137         *
+138         * @param defaultValue  The default value to be returned
+139         * @param locPattern    Indicate whether the pattern is localized or not
+140         */
+141        public SqlTimeLocaleConverter(Object defaultValue, boolean locPattern) {
+142    
+143            this(defaultValue, Locale.getDefault(), false);
+144        }
+145    
+146        /**
+147         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+148         * that will return the specified default value
+149         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+150         *
+151         * @param defaultValue  The default value to be returned
+152         * @param locale        The locale
+153         */
+154        public SqlTimeLocaleConverter(Object defaultValue, Locale locale) {
+155    
+156            this(defaultValue, locale, false);
+157        }
+158    
+159        /**
+160         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+161         * that will return the specified default value
+162         * if a conversion error occurs.
+163         *
+164         * @param defaultValue  The default value to be returned
+165         * @param locale        The locale
+166         * @param locPattern    Indicate whether the pattern is localized or not
+167         */
+168        public SqlTimeLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+169    
+170            this(defaultValue, locale, null, locPattern);
+171        }
+172    
+173        /**
+174         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+175         * that will return the specified default value
+176         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+177         *
+178         * @param defaultValue  The default value to be returned
+179         * @param locale        The locale
+180         * @param pattern       The convertion pattern
+181         */
+182        public SqlTimeLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+183    
+184            this(defaultValue, locale, pattern, false);
+185        }
+186    
+187        /**
+188         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+189         * that will return the specified default value
+190         * if a conversion error occurs.
+191         *
+192         * @param defaultValue  The default value to be returned
+193         * @param locale        The locale
+194         * @param pattern       The convertion pattern
+195         * @param locPattern    Indicate whether the pattern is localized or not
+196         */
+197        public SqlTimeLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+198    
+199            super(defaultValue, locale, pattern, locPattern);
+200        }
+201    
+202        // --------------------------------------------------------- Methods
+203    
+204        /**
+205         * Convert the specified locale-sensitive input object into an output object of the
+206         * specified type.
+207         *
+208         * @param value The input object to be converted
+209         * @param pattern The pattern is used for the convertion
+210         * @return The converted value
+211         *
+212         * @exception org.apache.commons.beanutils.ConversionException if conversion
+213         * cannot be performed successfully
+214         * @throws ParseException if an error occurs parsing a String to a Number
+215         */
+216        protected Object parse(Object value, String pattern) throws ParseException {
+217    
+218            return new Time(((java.util.Date) super.parse(value, pattern)).getTime());
+219        }
+220    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html new file mode 100644 index 0000000..8bf72f2 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/SqlTimestampLocaleConverter.html @@ -0,0 +1,285 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import java.sql.Timestamp;
+021    import java.text.ParseException;
+022    import java.util.Locale;
+023    
+024    /**
+025     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+026     * implementation that converts an incoming
+027     * locale-sensitive String into a <code>java.sql.Timestamp</code> object,
+028     * optionally using a default value or throwing a 
+029     * {@link org.apache.commons.beanutils.ConversionException}
+030     * if a conversion error occurs.</p>
+031     *
+032     * @author Yauheny Mikulski
+033     */
+034    
+035    public class SqlTimestampLocaleConverter extends DateLocaleConverter {
+036    
+037    
+038        // ----------------------------------------------------------- Constructors
+039    
+040        /**
+041         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+042         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+043         * if a conversion error occurs. The locale is the default locale for
+044         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+045         * for the convertion.
+046         *
+047         */
+048        public SqlTimestampLocaleConverter() {
+049    
+050            this(false);
+051        }
+052    
+053        /**
+054         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+055         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+056         * if a conversion error occurs. The locale is the default locale for
+057         * this instance of the Java Virtual Machine.
+058         *
+059         * @param locPattern    Indicate whether the pattern is localized or not
+060         */
+061        public SqlTimestampLocaleConverter(boolean locPattern) {
+062    
+063            this(Locale.getDefault(), locPattern);
+064        }
+065    
+066        /**
+067         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+068         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+069         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+070         *
+071         * @param locale        The locale
+072         */
+073        public SqlTimestampLocaleConverter(Locale locale) {
+074    
+075            this(locale, (String) null);
+076        }
+077    
+078        /**
+079         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+080         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+081         * if a conversion error occurs.
+082         *
+083         * @param locale        The locale
+084         * @param locPattern    Indicate whether the pattern is localized or not
+085         */
+086        public SqlTimestampLocaleConverter(Locale locale, boolean locPattern) {
+087    
+088            this(locale, (String) null);
+089        }
+090    
+091        /**
+092         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+093         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+094         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+095         *
+096         * @param locale        The locale
+097         * @param pattern       The convertion pattern
+098         */
+099        public SqlTimestampLocaleConverter(Locale locale, String pattern) {
+100    
+101            this(locale, pattern, false);
+102        }
+103    
+104        /**
+105         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+106         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+107         * if a conversion error occurs.
+108         *
+109         * @param locale        The locale
+110         * @param pattern       The convertion pattern
+111         * @param locPattern    Indicate whether the pattern is localized or not
+112         */
+113        public SqlTimestampLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+114    
+115            super(locale, pattern, locPattern);
+116        }
+117    
+118        /**
+119         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+120         * that will return the specified default value
+121         * if a conversion error occurs. The locale is the default locale for
+122         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+123         * for the convertion.
+124         *
+125         * @param defaultValue  The default value to be returned
+126         */
+127        public SqlTimestampLocaleConverter(Object defaultValue) {
+128            this(defaultValue, false);
+129        }
+130    
+131        /**
+132         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+133         * that will return the specified default value
+134         * if a conversion error occurs. The locale is the default locale for
+135         * this instance of the Java Virtual Machine.
+136         *
+137         * @param defaultValue  The default value to be returned
+138         * @param locPattern    Indicate whether the pattern is localized or not
+139         */
+140        public SqlTimestampLocaleConverter(Object defaultValue, boolean locPattern) {
+141    
+142            this(defaultValue, Locale.getDefault(), locPattern);
+143        }
+144    
+145        /**
+146         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+147         * that will return the specified default value
+148         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+149         *
+150         * @param defaultValue  The default value to be returned
+151         * @param locale        The locale
+152         */
+153        public SqlTimestampLocaleConverter(Object defaultValue, Locale locale) {
+154    
+155            this(defaultValue, locale, false);
+156        }
+157    
+158        /**
+159         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+160         * that will return the specified default value
+161         * if a conversion error occurs.
+162         *
+163         * @param defaultValue  The default value to be returned
+164         * @param locale        The locale
+165         * @param locPattern    Indicate whether the pattern is localized or not
+166         */
+167        public SqlTimestampLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+168    
+169            this(defaultValue, locale, null, locPattern);
+170        }
+171    
+172        /**
+173         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+174         * that will return the specified default value
+175         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+176         *
+177         * @param defaultValue  The default value to be returned
+178         * @param locale        The locale
+179         * @param pattern       The convertion pattern
+180         */
+181        public SqlTimestampLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+182    
+183            this(defaultValue, locale, pattern, false);
+184        }
+185    
+186        /**
+187         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter} 
+188         * that will return the specified default value
+189         * if a conversion error occurs.
+190         *
+191         * @param defaultValue  The default value to be returned
+192         * @param locale        The locale
+193         * @param pattern       The convertion pattern
+194         * @param locPattern    Indicate whether the pattern is localized or not
+195         */
+196        public SqlTimestampLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+197    
+198            super(defaultValue, locale, pattern, locPattern);
+199        }
+200    
+201        // --------------------------------------------------------- Methods
+202    
+203        /**
+204         * Convert the specified locale-sensitive input object into an output object of the
+205         * specified type.
+206         *
+207         * @param value The input object to be converted
+208         * @param pattern The pattern is used for the convertion
+209         * @return The converted value
+210         *
+211         * @exception org.apache.commons.beanutils.ConversionException if conversion
+212         * cannot be performed successfully
+213         * @throws ParseException if an error occurs parsing a String to a Number
+214         */
+215        protected Object parse(Object value, String pattern) throws ParseException {
+216    
+217            return new Timestamp(((java.util.Date) super.parse(value, pattern)).getTime());
+218        }
+219    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html new file mode 100644 index 0000000..94edd63 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/beanutils/locale/converters/StringLocaleConverter.html @@ -0,0 +1,357 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017     
+018    package org.apache.commons.beanutils.locale.converters;
+019    
+020    import org.apache.commons.beanutils.locale.BaseLocaleConverter;
+021    import org.apache.commons.logging.Log;
+022    import org.apache.commons.logging.LogFactory;
+023    
+024    import java.math.BigDecimal;
+025    import java.math.BigInteger;
+026    import java.text.DecimalFormat;
+027    import java.text.NumberFormat;
+028    import java.text.ParseException;
+029    import java.text.SimpleDateFormat;
+030    import java.util.Date;
+031    import java.util.Locale;
+032    
+033    
+034    /**
+035     * <p>Standard {@link org.apache.commons.beanutils.locale.LocaleConverter}
+036     * implementation that converts an incoming
+037     * locale-sensitive object into a <code>java.lang.String</code> object,
+038     * optionally using a default value or throwing a
+039     * {@link org.apache.commons.beanutils.ConversionException}
+040     * if a conversion error occurs.</p>
+041     *
+042     * @author Yauheny Mikulski
+043     */
+044    
+045    public class StringLocaleConverter extends BaseLocaleConverter {
+046    
+047        // ----------------------------------------------------- Instance Variables
+048    
+049        /** All logging goes through this logger */
+050        private Log log = LogFactory.getLog(StringLocaleConverter.class);     //msz fix
+051    
+052    
+053        // ----------------------------------------------------------- Constructors
+054    
+055        /**
+056         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+057         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+058         * if a conversion error occurs. The locale is the default locale for
+059         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+060         * for the convertion.
+061         *
+062         */
+063        public StringLocaleConverter() {
+064    
+065            this(false);
+066        }
+067    
+068        /**
+069         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+070         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+071         * if a conversion error occurs. The locale is the default locale for
+072         * this instance of the Java Virtual Machine.
+073         *
+074         * @param locPattern    Indicate whether the pattern is localized or not
+075         */
+076        public StringLocaleConverter(boolean locPattern) {
+077    
+078            this(Locale.getDefault(), locPattern);
+079        }
+080    
+081        /**
+082         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+083         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+084         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+085         *
+086         * @param locale        The locale
+087         */
+088        public StringLocaleConverter(Locale locale) {
+089    
+090            this(locale, false);
+091        }
+092    
+093        /**
+094         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+095         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+096         * if a conversion error occurs.
+097         *
+098         * @param locale        The locale
+099         * @param locPattern    Indicate whether the pattern is localized or not
+100         */
+101        public StringLocaleConverter(Locale locale, boolean locPattern) {
+102    
+103            this(locale, (String) null, locPattern);
+104        }
+105    
+106        /**
+107         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+108         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+109         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+110         *
+111         * @param locale        The locale
+112         * @param pattern       The convertion pattern
+113         */
+114        public StringLocaleConverter(Locale locale, String pattern) {
+115    
+116            this(locale, pattern, false);
+117        }
+118    
+119        /**
+120         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+121         * that will throw a {@link org.apache.commons.beanutils.ConversionException}
+122         * if a conversion error occurs.
+123         *
+124         * @param locale        The locale
+125         * @param pattern       The convertion pattern
+126         * @param locPattern    Indicate whether the pattern is localized or not
+127         */
+128        public StringLocaleConverter(Locale locale, String pattern, boolean locPattern) {
+129    
+130            super(locale, pattern, locPattern);
+131        }
+132    
+133        /**
+134         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+135         * that will return the specified default value
+136         * if a conversion error occurs. The locale is the default locale for
+137         * this instance of the Java Virtual Machine and an unlocalized pattern is used
+138         * for the convertion.
+139         *
+140         * @param defaultValue  The default value to be returned
+141         */
+142        public StringLocaleConverter(Object defaultValue) {
+143    
+144            this(defaultValue, false);
+145        }
+146    
+147        /**
+148         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+149         * that will return the specified default value
+150         * if a conversion error occurs. The locale is the default locale for
+151         * this instance of the Java Virtual Machine.
+152         *
+153         * @param defaultValue  The default value to be returned
+154         * @param locPattern    Indicate whether the pattern is localized or not
+155         */
+156        public StringLocaleConverter(Object defaultValue, boolean locPattern) {
+157    
+158            this(defaultValue, Locale.getDefault(), locPattern);
+159        }
+160    
+161        /**
+162         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+163         * that will return the specified default value
+164         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+165         *
+166         * @param defaultValue  The default value to be returned
+167         * @param locale        The locale
+168         */
+169        public StringLocaleConverter(Object defaultValue, Locale locale) {
+170    
+171            this(defaultValue, locale, false);
+172        }
+173    
+174        /**
+175         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+176         * that will return the specified default value
+177         * if a conversion error occurs.
+178         *
+179         * @param defaultValue  The default value to be returned
+180         * @param locale        The locale
+181         * @param locPattern    Indicate whether the pattern is localized or not
+182         */
+183        public StringLocaleConverter(Object defaultValue, Locale locale, boolean locPattern) {
+184    
+185            this(defaultValue, locale, null, locPattern);
+186        }
+187    
+188        /**
+189         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+190         * that will return the specified default value
+191         * if a conversion error occurs. An unlocalized pattern is used for the convertion.
+192         *
+193         * @param defaultValue  The default value to be returned
+194         * @param locale        The locale
+195         * @param pattern       The convertion pattern
+196         */
+197        public StringLocaleConverter(Object defaultValue, Locale locale, String pattern) {
+198    
+199            this(defaultValue, locale, pattern, false);
+200        }
+201    
+202        /**
+203         * Create a {@link org.apache.commons.beanutils.locale.LocaleConverter}
+204         * that will return the specified default value
+205         * if a conversion error occurs.
+206         *
+207         * @param defaultValue  The default value to be returned
+208         * @param locale        The locale
+209         * @param pattern       The convertion pattern
+210         * @param locPattern    Indicate whether the pattern is localized or not
+211         */
+212        public StringLocaleConverter(Object defaultValue, Locale locale, String pattern, boolean locPattern) {
+213    
+214            super(defaultValue, locale, pattern, locPattern);
+215        }
+216    
+217        // --------------------------------------------------------- Methods
+218    
+219        /**
+220         * Convert the specified locale-sensitive input object into an output object of the
+221         * specified type.
+222         *
+223         * @param value The input object to be converted
+224         * @param pattern The pattern is used for the convertion
+225         * @return The converted value
+226         *
+227         * @exception org.apache.commons.beanutils.ConversionException if conversion
+228         * cannot be performed successfully
+229         * @throws ParseException if an error occurs
+230         */
+231        protected Object parse(Object value, String pattern) throws ParseException {
+232    
+233            String result = null;
+234    
+235            if ((value instanceof Integer) ||
+236                    (value instanceof Long) ||
+237                    (value instanceof BigInteger) ||
+238                    (value instanceof Byte) ||
+239                    (value instanceof Short)) {
+240    
+241                result = getDecimalFormat(locale, pattern).format(((Number) value).longValue());
+242            }
+243            else if ((value instanceof Double) ||
+244                    (value instanceof BigDecimal) ||
+245                    (value instanceof Float)) {
+246    
+247                result = getDecimalFormat(locale, pattern).format(((Number) value).doubleValue());
+248            }
+249            else if (value instanceof Date) { // java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp
+250    
+251                SimpleDateFormat dateFormat =
+252                        new SimpleDateFormat(pattern, locale);
+253    
+254                result = dateFormat.format(value);
+255            }
+256            else {
+257                result = value.toString();
+258            }
+259    
+260            return result;
+261        }
+262    
+263        /**
+264         * Make an instance of DecimalFormat.
+265         *
+266         * @param locale The locale
+267         * @param pattern The pattern is used for the convertion
+268         * @return The format for the locale and pattern
+269         *
+270         * @exception ConversionException if conversion cannot be performed
+271         *  successfully
+272         * @throws ParseException if an error occurs parsing a String to a Number
+273         */
+274        private DecimalFormat getDecimalFormat(Locale locale, String pattern) {
+275    
+276            DecimalFormat numberFormat = (DecimalFormat) NumberFormat.getInstance(locale);
+277    
+278            // if some constructors default pattern to null, it makes only sense to handle null pattern gracefully
+279            if (pattern != null) {
+280                if (locPattern) {
+281                    numberFormat.applyLocalizedPattern(pattern);
+282                } else {
+283                    numberFormat.applyPattern(pattern);
+284                }
+285            } else {
+286                log.debug("No pattern provided, using default.");
+287            }
+288    
+289            return numberFormat;
+290        }
+291    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/ArrayStack.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/ArrayStack.html new file mode 100644 index 0000000..7e6daa7 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/ArrayStack.html @@ -0,0 +1,266 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.collections;
+018    
+019    import java.util.ArrayList;
+020    import java.util.EmptyStackException;
+021    
+022    /**
+023     * An implementation of the {@link java.util.Stack} API that is based on an
+024     * <code>ArrayList</code> instead of a <code>Vector</code>, so it is not
+025     * synchronized to protect against multi-threaded access.  The implementation
+026     * is therefore operates faster in environments where you do not need to
+027     * worry about multiple thread contention.
+028     * <p>
+029     * The removal order of an <code>ArrayStack</code> is based on insertion 
+030     * order: The most recently added element is removed first.  The iteration
+031     * order is <i>not</i> the same as the removal order.  The iterator returns
+032     * elements from the bottom up, whereas the {@link #remove()} method removes
+033     * them from the top down.
+034     * <p>
+035     * Unlike <code>Stack</code>, <code>ArrayStack</code> accepts null entries.
+036     * <p>
+037     * <strong>Note:</strong> this class should be bytecode-identical to the 
+038     * version in commons collections. This is required to allow backwards 
+039     * compability with both previous versions of BeanUtils and also allow 
+040     * coexistance with both collections 2.1 and 3.0.
+041     *
+042     * @see java.util.Stack
+043     * @since Commons Collections 1.0
+044     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+045     * 
+046     * @author Craig R. McClanahan
+047     * @author Paul Jack
+048     * @author Stephen Colebourne
+049     */
+050    public class ArrayStack extends ArrayList implements Buffer {
+051    
+052        /** Ensure serialization compatibility */    
+053        private static final long serialVersionUID = 2130079159931574599L;
+054    
+055        /**
+056         * Constructs a new empty <code>ArrayStack</code>. The initial size
+057         * is controlled by <code>ArrayList</code> and is currently 10.
+058         */
+059        public ArrayStack() {
+060            super();
+061        }
+062    
+063        /**
+064         * Constructs a new empty <code>ArrayStack</code> with an initial size.
+065         * 
+066         * @param initialSize  the initial size to use
+067         * @throws IllegalArgumentException  if the specified initial size
+068         *  is negative
+069         */
+070        public ArrayStack(int initialSize) {
+071            super(initialSize);
+072        }
+073    
+074        /**
+075         * Return <code>true</code> if this stack is currently empty.
+076         * <p>
+077         * This method exists for compatibility with <code>java.util.Stack</code>.
+078         * New users of this class should use <code>isEmpty</code> instead.
+079         * 
+080         * @return true if the stack is currently empty
+081         */
+082        public boolean empty() {
+083            return isEmpty();
+084        }
+085    
+086        /**
+087         * Returns the top item off of this stack without removing it.
+088         *
+089         * @return the top item on the stack
+090         * @throws EmptyStackException  if the stack is empty
+091         */
+092        public Object peek() throws EmptyStackException {
+093            int n = size();
+094            if (n <= 0) {
+095                throw new EmptyStackException();
+096            } else {
+097                return get(n - 1);
+098            }
+099        }
+100    
+101        /**
+102         * Returns the n'th item down (zero-relative) from the top of this
+103         * stack without removing it.
+104         *
+105         * @param n  the number of items down to go
+106         * @return the n'th item on the stack, zero relative
+107         * @throws EmptyStackException  if there are not enough items on the
+108         *  stack to satisfy this request
+109         */
+110        public Object peek(int n) throws EmptyStackException {
+111            int m = (size() - n) - 1;
+112            if (m < 0) {
+113                throw new EmptyStackException();
+114            } else {
+115                return get(m);
+116            }
+117        }
+118    
+119        /**
+120         * Pops the top item off of this stack and return it.
+121         *
+122         * @return the top item on the stack
+123         * @throws EmptyStackException  if the stack is empty
+124         */
+125        public Object pop() throws EmptyStackException {
+126            int n = size();
+127            if (n <= 0) {
+128                throw new EmptyStackException();
+129            } else {
+130                return remove(n - 1);
+131            }
+132        }
+133    
+134        /**
+135         * Pushes a new item onto the top of this stack. The pushed item is also
+136         * returned. This is equivalent to calling <code>add</code>.
+137         *
+138         * @param item  the item to be added
+139         * @return the item just pushed
+140         */
+141        public Object push(Object item) {
+142            add(item);
+143            return item;
+144        }
+145    
+146        /**
+147         * Returns the one-based position of the distance from the top that the
+148         * specified object exists on this stack, where the top-most element is
+149         * considered to be at distance <code>1</code>.  If the object is not
+150         * present on the stack, return <code>-1</code> instead.  The
+151         * <code>equals()</code> method is used to compare to the items
+152         * in this stack.
+153         *
+154         * @param object  the object to be searched for
+155         * @return the 1-based depth into the stack of the object, or -1 if not found
+156         */
+157        public int search(Object object) {
+158            int i = size() - 1;        // Current index
+159            int n = 1;                 // Current distance
+160            while (i >= 0) {
+161                Object current = get(i);
+162                if ((object == null && current == null) ||
+163                    (object != null && object.equals(current))) {
+164                    return n;
+165                }
+166                i--;
+167                n++;
+168            }
+169            return -1;
+170        }
+171    
+172        /**
+173         * Returns the element on the top of the stack.
+174         *
+175         * @return the element on the top of the stack
+176         * @throws BufferUnderflowException  if the stack is empty
+177         */
+178        public Object get() {
+179            int size = size();
+180            if (size == 0) {
+181                throw new BufferUnderflowException();
+182            }
+183            return get(size - 1);
+184        }
+185    
+186        /**
+187         * Removes the element on the top of the stack.
+188         *
+189         * @return the removed element 
+190         * @throws BufferUnderflowException  if the stack is empty
+191         */
+192        public Object remove() {
+193            int size = size();
+194            if (size == 0) {
+195                throw new BufferUnderflowException();
+196            }
+197            return remove(size - 1);
+198        }
+199    
+200    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/Buffer.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/Buffer.html new file mode 100644 index 0000000..fe250e3 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/Buffer.html @@ -0,0 +1,135 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.collections;
+018    
+019    import java.util.Collection;
+020    
+021    /**
+022     * Defines a collection that allows objects to be removed in some well-defined order.
+023     * <p>
+024     * The removal order can be based on insertion order (eg, a FIFO queue or a
+025     * LIFO stack), on access order (eg, an LRU cache), on some arbitrary comparator
+026     * (eg, a priority queue) or on any other well-defined ordering.
+027     * <p>
+028     * Note that the removal order is not necessarily the same as the iteration
+029     * order.  A <code>Buffer</code> implementation may have equivalent removal
+030     * and iteration orders, but this is not required.
+031     * <p>
+032     * This interface does not specify any behavior for 
+033     * {@link Object#equals(Object)} and {@link Object#hashCode} methods.  It
+034     * is therefore possible for a <code>Buffer</code> implementation to also
+035     * also implement {@link java.util.List}, {@link java.util.Set} or 
+036     * {@link Bag}.
+037     * <p>
+038     * <strong>Note:</strong> this class should be bytecode-identical to the 
+039     * version in commons collections. This is required to allow backwards 
+040     * compability with both previous versions of BeanUtils and also allow 
+041     * coexistance with both collections 2.1 and 3.0.
+042     *
+043     * @since Commons Collections 2.1
+044     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+045     * 
+046     * @author Avalon
+047     * @author Berin Loritsch
+048     * @author Paul Jack
+049     * @author Stephen Colebourne
+050     */
+051    public interface Buffer extends Collection {
+052    
+053        /**
+054         * Gets and removes the next object from the buffer.
+055         *
+056         * @return the next object in the buffer, which is also removed
+057         * @throws BufferUnderflowException if the buffer is already empty
+058         */
+059        Object remove();
+060    
+061        /**
+062         * Gets the next object from the buffer without removing it.
+063         *
+064         * @return the next object in the buffer, which is not removed
+065         * @throws BufferUnderflowException if the buffer is empty
+066         */
+067        Object get();
+068    
+069    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/BufferUnderflowException.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/BufferUnderflowException.html new file mode 100644 index 0000000..8756dc4 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/BufferUnderflowException.html @@ -0,0 +1,143 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.collections;
+018    
+019    import java.util.NoSuchElementException;
+020    
+021    /**
+022     * The BufferUnderflowException is used when the buffer is already empty.
+023     * <p>
+024     * NOTE: From version 3.0, this exception extends NoSuchElementException.
+025     * 
+026     * @since Commons Collections 2.1
+027     * @version $Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
+028     *
+029     * @author Avalon
+030     * @author Berin Loritsch
+031     * @author Jeff Turner
+032     * @author Paul Jack
+033     * @author Stephen Colebourne
+034     */
+035    public class BufferUnderflowException extends NoSuchElementException {
+036        
+037        /** The root cause throwable */
+038        private final Throwable throwable;
+039    
+040        /**
+041         * Constructs a new <code>BufferUnderflowException</code>.
+042         */
+043        public BufferUnderflowException() {
+044            super();
+045            throwable = null;
+046        }
+047    
+048        /** 
+049         * Construct a new <code>BufferUnderflowException</code>.
+050         * 
+051         * @param message  the detail message for this exception
+052         */
+053        public BufferUnderflowException(String message) {
+054            this(message, null);
+055        }
+056    
+057        /** 
+058         * Construct a new <code>BufferUnderflowException</code>.
+059         * 
+060         * @param message  the detail message for this exception
+061         * @param exception  the root cause of the exception
+062         */
+063        public BufferUnderflowException(String message, Throwable exception) {
+064            super(message);
+065            throwable = exception;
+066        }
+067    
+068        /**
+069         * Gets the root cause of the exception.
+070         *
+071         * @return the root cause
+072         */
+073        public final Throwable getCause() {
+074            return throwable;
+075        }
+076        
+077    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/FastHashMap.html b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/FastHashMap.html new file mode 100644 index 0000000..dac1ae0 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/src-html/org/apache/commons/collections/FastHashMap.html @@ -0,0 +1,786 @@ + + +
+001    /*
+002     * Licensed to the Apache Software Foundation (ASF) under one or more
+003     * contributor license agreements.  See the NOTICE file distributed with
+004     * this work for additional information regarding copyright ownership.
+005     * The ASF licenses this file to You under the Apache License, Version 2.0
+006     * (the "License"); you may not use this file except in compliance with
+007     * the License.  You may obtain a copy of the License at
+008     *
+009     *      http://www.apache.org/licenses/LICENSE-2.0
+010     *
+011     * Unless required by applicable law or agreed to in writing, software
+012     * distributed under the License is distributed on an "AS IS" BASIS,
+013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+014     * See the License for the specific language governing permissions and
+015     * limitations under the License.
+016     */
+017    package org.apache.commons.collections;
+018    
+019    import java.util.Collection;
+020    import java.util.ConcurrentModificationException;
+021    import java.util.HashMap;
+022    import java.util.Iterator;
+023    import java.util.Map;
+024    import java.util.Set;
+025    
+026    /**
+027     * <p>A customized implementation of <code>java.util.HashMap</code> designed
+028     * to operate in a multithreaded environment where the large majority of
+029     * method calls are read-only, instead of structural changes.  When operating
+030     * in "fast" mode, read calls are non-synchronized and write calls perform the
+031     * following steps:</p>
+032     * <ul>
+033     * <li>Clone the existing collection
+034     * <li>Perform the modification on the clone
+035     * <li>Replace the existing collection with the (modified) clone
+036     * </ul>
+037     * <p>When first created, objects of this class default to "slow" mode, where
+038     * all accesses of any type are synchronized but no cloning takes place.  This
+039     * is appropriate for initially populating the collection, followed by a switch
+040     * to "fast" mode (by calling <code>setFast(true)</code>) after initialization
+041     * is complete.</p>
+042     *
+043     * <p><strong>NOTE</strong>: If you are creating and accessing a
+044     * <code>HashMap</code> only within a single thread, you should use
+045     * <code>java.util.HashMap</code> directly (with no synchronization), for
+046     * maximum performance.</p>
+047     *
+048     * <p><strong>NOTE</strong>: <i>This class is not cross-platform.  
+049     * Using it may cause unexpected failures on some architectures.</i>
+050     * It suffers from the same problems as the double-checked locking idiom.  
+051     * In particular, the instruction that clones the internal collection and the 
+052     * instruction that sets the internal reference to the clone can be executed 
+053     * or perceived out-of-order.  This means that any read operation might fail 
+054     * unexpectedly, as it may be reading the state of the internal collection
+055     * before the internal collection is fully formed.
+056     * For more information on the double-checked locking idiom, see the
+057     * <a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html">
+058     * Double-Checked Locking Idiom Is Broken Declaration</a>.</p>
+059     *
+060     * @since Commons Collections 1.0
+061     * @version $Revision: 555845 $ $Date: 2007-07-13 03:52:05 +0100 (Fri, 13 Jul 2007) $
+062     * 
+063     * @author Craig R. McClanahan
+064     * @author Stephen Colebourne
+065     */
+066    public class FastHashMap extends HashMap {
+067    
+068        /**
+069         * The underlying map we are managing.
+070         */
+071        protected HashMap map = null;
+072    
+073        /**
+074         * Are we currently operating in "fast" mode?
+075         */
+076        protected boolean fast = false;
+077    
+078        // Constructors
+079        // ----------------------------------------------------------------------
+080    
+081        /**
+082         * Construct an empty map.
+083         */
+084        public FastHashMap() {
+085            super();
+086            this.map = new HashMap();
+087        }
+088    
+089        /**
+090         * Construct an empty map with the specified capacity.
+091         *
+092         * @param capacity  the initial capacity of the empty map
+093         */
+094        public FastHashMap(int capacity) {
+095            super();
+096            this.map = new HashMap(capacity);
+097        }
+098    
+099        /**
+100         * Construct an empty map with the specified capacity and load factor.
+101         *
+102         * @param capacity  the initial capacity of the empty map
+103         * @param factor  the load factor of the new map
+104         */
+105        public FastHashMap(int capacity, float factor) {
+106            super();
+107            this.map = new HashMap(capacity, factor);
+108        }
+109    
+110        /**
+111         * Construct a new map with the same mappings as the specified map.
+112         *
+113         * @param map  the map whose mappings are to be copied
+114         */
+115        public FastHashMap(Map map) {
+116            super();
+117            this.map = new HashMap(map);
+118        }
+119    
+120    
+121        // Property access
+122        // ----------------------------------------------------------------------
+123    
+124        /**
+125         *  Returns true if this map is operating in fast mode.
+126         *
+127         *  @return true if this map is operating in fast mode
+128         */
+129        public boolean getFast() {
+130            return (this.fast);
+131        }
+132    
+133        /**
+134         *  Sets whether this map is operating in fast mode.
+135         *
+136         *  @param fast true if this map should operate in fast mode
+137         */
+138        public void setFast(boolean fast) {
+139            this.fast = fast;
+140        }
+141    
+142    
+143        // Map access
+144        // ----------------------------------------------------------------------
+145        // These methods can forward straight to the wrapped Map in 'fast' mode.
+146        // (because they are query methods)
+147    
+148        /**
+149         * Return the value to which this map maps the specified key.  Returns
+150         * <code>null</code> if the map contains no mapping for this key, or if
+151         * there is a mapping with a value of <code>null</code>.  Use the
+152         * <code>containsKey()</code> method to disambiguate these cases.
+153         *
+154         * @param key  the key whose value is to be returned
+155         * @return the value mapped to that key, or null
+156         */
+157        public Object get(Object key) {
+158            if (fast) {
+159                return (map.get(key));
+160            } else {
+161                synchronized (map) {
+162                    return (map.get(key));
+163                }
+164            }
+165        }
+166    
+167        /**
+168         * Return the number of key-value mappings in this map.
+169         * 
+170         * @return the current size of the map
+171         */
+172        public int size() {
+173            if (fast) {
+174                return (map.size());
+175            } else {
+176                synchronized (map) {
+177                    return (map.size());
+178                }
+179            }
+180        }
+181    
+182        /**
+183         * Return <code>true</code> if this map contains no mappings.
+184         * 
+185         * @return is the map currently empty
+186         */
+187        public boolean isEmpty() {
+188            if (fast) {
+189                return (map.isEmpty());
+190            } else {
+191                synchronized (map) {
+192                    return (map.isEmpty());
+193                }
+194            }
+195        }
+196    
+197        /**
+198         * Return <code>true</code> if this map contains a mapping for the
+199         * specified key.
+200         *
+201         * @param key  the key to be searched for
+202         * @return true if the map contains the key
+203         */
+204        public boolean containsKey(Object key) {
+205            if (fast) {
+206                return (map.containsKey(key));
+207            } else {
+208                synchronized (map) {
+209                    return (map.containsKey(key));
+210                }
+211            }
+212        }
+213    
+214        /**
+215         * Return <code>true</code> if this map contains one or more keys mapping
+216         * to the specified value.
+217         *
+218         * @param value  the value to be searched for
+219         * @return true if the map contains the value
+220         */
+221        public boolean containsValue(Object value) {
+222            if (fast) {
+223                return (map.containsValue(value));
+224            } else {
+225                synchronized (map) {
+226                    return (map.containsValue(value));
+227                }
+228            }
+229        }
+230    
+231        // Map modification
+232        // ----------------------------------------------------------------------
+233        // These methods perform special behaviour in 'fast' mode.
+234        // The map is cloned, updated and then assigned back.
+235        // See the comments at the top as to why this won't always work.
+236    
+237        /**
+238         * Associate the specified value with the specified key in this map.
+239         * If the map previously contained a mapping for this key, the old
+240         * value is replaced and returned.
+241         *
+242         * @param key  the key with which the value is to be associated
+243         * @param value  the value to be associated with this key
+244         * @return the value previously mapped to the key, or null
+245         */
+246        public Object put(Object key, Object value) {
+247            if (fast) {
+248                synchronized (this) {
+249                    HashMap temp = (HashMap) map.clone();
+250                    Object result = temp.put(key, value);
+251                    map = temp;
+252                    return (result);
+253                }
+254            } else {
+255                synchronized (map) {
+256                    return (map.put(key, value));
+257                }
+258            }
+259        }
+260    
+261        /**
+262         * Copy all of the mappings from the specified map to this one, replacing
+263         * any mappings with the same keys.
+264         *
+265         * @param in  the map whose mappings are to be copied
+266         */
+267        public void putAll(Map in) {
+268            if (fast) {
+269                synchronized (this) {
+270                    HashMap temp = (HashMap) map.clone();
+271                    temp.putAll(in);
+272                    map = temp;
+273                }
+274            } else {
+275                synchronized (map) {
+276                    map.putAll(in);
+277                }
+278            }
+279        }
+280    
+281        /**
+282         * Remove any mapping for this key, and return any previously
+283         * mapped value.
+284         *
+285         * @param key  the key whose mapping is to be removed
+286         * @return the value removed, or null
+287         */
+288        public Object remove(Object key) {
+289            if (fast) {
+290                synchronized (this) {
+291                    HashMap temp = (HashMap) map.clone();
+292                    Object result = temp.remove(key);
+293                    map = temp;
+294                    return (result);
+295                }
+296            } else {
+297                synchronized (map) {
+298                    return (map.remove(key));
+299                }
+300            }
+301        }
+302    
+303        /**
+304         * Remove all mappings from this map.
+305         */
+306        public void clear() {
+307            if (fast) {
+308                synchronized (this) {
+309                    map = new HashMap();
+310                }
+311            } else {
+312                synchronized (map) {
+313                    map.clear();
+314                }
+315            }
+316        }
+317    
+318        // Basic object methods
+319        // ----------------------------------------------------------------------
+320        
+321        /**
+322         * Compare the specified object with this list for equality.  This
+323         * implementation uses exactly the code that is used to define the
+324         * list equals function in the documentation for the
+325         * <code>Map.equals</code> method.
+326         *
+327         * @param o  the object to be compared to this list
+328         * @return true if the two maps are equal
+329         */
+330        public boolean equals(Object o) {
+331            // Simple tests that require no synchronization
+332            if (o == this) {
+333                return (true);
+334            } else if (!(o instanceof Map)) {
+335                return (false);
+336            }
+337            Map mo = (Map) o;
+338    
+339            // Compare the two maps for equality
+340            if (fast) {
+341                if (mo.size() != map.size()) {
+342                    return (false);
+343                }
+344                Iterator i = map.entrySet().iterator();
+345                while (i.hasNext()) {
+346                    Map.Entry e = (Map.Entry) i.next();
+347                    Object key = e.getKey();
+348                    Object value = e.getValue();
+349                    if (value == null) {
+350                        if (!(mo.get(key) == null && mo.containsKey(key))) {
+351                            return (false);
+352                        }
+353                    } else {
+354                        if (!value.equals(mo.get(key))) {
+355                            return (false);
+356                        }
+357                    }
+358                }
+359                return (true);
+360                
+361            } else {
+362                synchronized (map) {
+363                    if (mo.size() != map.size()) {
+364                        return (false);
+365                    }
+366                    Iterator i = map.entrySet().iterator();
+367                    while (i.hasNext()) {
+368                        Map.Entry e = (Map.Entry) i.next();
+369                        Object key = e.getKey();
+370                        Object value = e.getValue();
+371                        if (value == null) {
+372                            if (!(mo.get(key) == null && mo.containsKey(key))) {
+373                                return (false);
+374                            }
+375                        } else {
+376                            if (!value.equals(mo.get(key))) {
+377                                return (false);
+378                            }
+379                        }
+380                    }
+381                    return (true);
+382                }
+383            }
+384        }
+385    
+386        /**
+387         * Return the hash code value for this map.  This implementation uses
+388         * exactly the code that is used to define the list hash function in the
+389         * documentation for the <code>Map.hashCode</code> method.
+390         * 
+391         * @return suitable integer hash code
+392         */
+393        public int hashCode() {
+394            if (fast) {
+395                int h = 0;
+396                Iterator i = map.entrySet().iterator();
+397                while (i.hasNext()) {
+398                    h += i.next().hashCode();
+399                }
+400                return (h);
+401            } else {
+402                synchronized (map) {
+403                    int h = 0;
+404                    Iterator i = map.entrySet().iterator();
+405                    while (i.hasNext()) {
+406                        h += i.next().hashCode();
+407                    }
+408                    return (h);
+409                }
+410            }
+411        }
+412    
+413        /**
+414         * Return a shallow copy of this <code>FastHashMap</code> instance.
+415         * The keys and values themselves are not copied.
+416         * 
+417         * @return a clone of this map
+418         */
+419        public Object clone() {
+420            FastHashMap results = null;
+421            if (fast) {
+422                results = new FastHashMap(map);
+423            } else {
+424                synchronized (map) {
+425                    results = new FastHashMap(map);
+426                }
+427            }
+428            results.setFast(getFast());
+429            return (results);
+430        }
+431    
+432        // Map views
+433        // ----------------------------------------------------------------------
+434        
+435        /**
+436         * Return a collection view of the mappings contained in this map.  Each
+437         * element in the returned collection is a <code>Map.Entry</code>.
+438         * @return the set of map Map entries
+439         */
+440        public Set entrySet() {
+441            return new EntrySet();
+442        }
+443    
+444        /**
+445         * Return a set view of the keys contained in this map.
+446         * @return the set of the Map's keys
+447         */
+448        public Set keySet() {
+449            return new KeySet();
+450        }
+451    
+452        /**
+453         * Return a collection view of the values contained in this map.
+454         * @return the set of the Map's values
+455         */
+456        public Collection values() {
+457            return new Values();
+458        }
+459    
+460        // Map view inner classes
+461        // ----------------------------------------------------------------------
+462    
+463        /**
+464         * Abstract collection implementation shared by keySet(), values() and entrySet().
+465         */
+466        private abstract class CollectionView implements Collection {
+467    
+468            public CollectionView() {
+469            }
+470    
+471            protected abstract Collection get(Map map);
+472            protected abstract Object iteratorNext(Map.Entry entry);
+473    
+474    
+475            public void clear() {
+476                if (fast) {
+477                    synchronized (FastHashMap.this) {
+478                        map = new HashMap();
+479                    }
+480                } else {
+481                    synchronized (map) {
+482                        get(map).clear();
+483                    }
+484                }
+485            }
+486    
+487            public boolean remove(Object o) {
+488                if (fast) {
+489                    synchronized (FastHashMap.this) {
+490                        HashMap temp = (HashMap) map.clone();
+491                        boolean r = get(temp).remove(o);
+492                        map = temp;
+493                        return r;
+494                    }
+495                } else {
+496                    synchronized (map) {
+497                        return get(map).remove(o);
+498                    }
+499                }
+500            }
+501    
+502            public boolean removeAll(Collection o) {
+503                if (fast) {
+504                    synchronized (FastHashMap.this) {
+505                        HashMap temp = (HashMap) map.clone();
+506                        boolean r = get(temp).removeAll(o);
+507                        map = temp;
+508                        return r;
+509                    }
+510                } else {
+511                    synchronized (map) {
+512                        return get(map).removeAll(o);
+513                    }
+514                }
+515            }
+516    
+517            public boolean retainAll(Collection o) {
+518                if (fast) {
+519                    synchronized (FastHashMap.this) {
+520                        HashMap temp = (HashMap) map.clone();
+521                        boolean r = get(temp).retainAll(o);
+522                        map = temp;
+523                        return r;
+524                    }
+525                } else {
+526                    synchronized (map) {
+527                        return get(map).retainAll(o);
+528                    }
+529                }
+530            }
+531    
+532            public int size() {
+533                if (fast) {
+534                    return get(map).size();
+535                } else {
+536                    synchronized (map) {
+537                        return get(map).size();
+538                    }
+539                }
+540            }
+541    
+542    
+543            public boolean isEmpty() {
+544                if (fast) {
+545                    return get(map).isEmpty();
+546                } else {
+547                    synchronized (map) {
+548                        return get(map).isEmpty();
+549                    }
+550                }
+551            }
+552    
+553            public boolean contains(Object o) {
+554                if (fast) {
+555                    return get(map).contains(o);
+556                } else {
+557                    synchronized (map) {
+558                        return get(map).contains(o);
+559                    }
+560                }
+561            }
+562    
+563            public boolean containsAll(Collection o) {
+564                if (fast) {
+565                    return get(map).containsAll(o);
+566                } else {
+567                    synchronized (map) {
+568                        return get(map).containsAll(o);
+569                    }
+570                }
+571            }
+572    
+573            public Object[] toArray(Object[] o) {
+574                if (fast) {
+575                    return get(map).toArray(o);
+576                } else {
+577                    synchronized (map) {
+578                        return get(map).toArray(o);
+579                    }
+580                }
+581            }
+582    
+583            public Object[] toArray() {
+584                if (fast) {
+585                    return get(map).toArray();
+586                } else {
+587                    synchronized (map) {
+588                        return get(map).toArray();
+589                    }
+590                }
+591            }
+592    
+593    
+594            public boolean equals(Object o) {
+595                if (o == this) {
+596                    return true;
+597                }
+598                if (fast) {
+599                    return get(map).equals(o);
+600                } else {
+601                    synchronized (map) {
+602                        return get(map).equals(o);
+603                    }
+604                }
+605            }
+606    
+607            public int hashCode() {
+608                if (fast) {
+609                    return get(map).hashCode();
+610                } else {
+611                    synchronized (map) {
+612                        return get(map).hashCode();
+613                    }
+614                }
+615            }
+616    
+617            public boolean add(Object o) {
+618                throw new UnsupportedOperationException();
+619            }
+620    
+621            public boolean addAll(Collection c) {
+622                throw new UnsupportedOperationException();
+623            }
+624    
+625            public Iterator iterator() {
+626                return new CollectionViewIterator();
+627            }
+628    
+629            private class CollectionViewIterator implements Iterator {
+630    
+631                private Map expected;
+632                private Map.Entry lastReturned = null;
+633                private Iterator iterator;
+634    
+635                public CollectionViewIterator() {
+636                    this.expected = map;
+637                    this.iterator = expected.entrySet().iterator();
+638                }
+639     
+640                public boolean hasNext() {
+641                    if (expected != map) {
+642                        throw new ConcurrentModificationException();
+643                    }
+644                    return iterator.hasNext();
+645                }
+646    
+647                public Object next() {
+648                    if (expected != map) {
+649                        throw new ConcurrentModificationException();
+650                    }
+651                    lastReturned = (Map.Entry)iterator.next();
+652                    return iteratorNext(lastReturned);
+653                }
+654    
+655                public void remove() {
+656                    if (lastReturned == null) {
+657                        throw new IllegalStateException();
+658                    }
+659                    if (fast) {
+660                        synchronized (FastHashMap.this) {
+661                            if (expected != map) {
+662                                throw new ConcurrentModificationException();
+663                            }
+664                            FastHashMap.this.remove(lastReturned.getKey());
+665                            lastReturned = null;
+666                            expected = map;
+667                        }
+668                    } else {
+669                        iterator.remove();
+670                        lastReturned = null;
+671                    }
+672                }
+673            }
+674        }
+675    
+676        /**
+677         * Set implementation over the keys of the FastHashMap
+678         */
+679        private class KeySet extends CollectionView implements Set {
+680        
+681            protected Collection get(Map map) {
+682                return map.keySet();
+683            }
+684        
+685            protected Object iteratorNext(Map.Entry entry) {
+686                return entry.getKey();
+687            }
+688        
+689        }
+690        
+691        /**
+692         * Collection implementation over the values of the FastHashMap
+693         */
+694        private class Values extends CollectionView {
+695        
+696            protected Collection get(Map map) {
+697                return map.values();
+698            }
+699        
+700            protected Object iteratorNext(Map.Entry entry) {
+701                return entry.getValue();
+702            }
+703        }
+704        
+705        /**
+706         * Set implementation over the entries of the FastHashMap
+707         */
+708        private class EntrySet extends CollectionView implements Set {
+709        
+710            protected Collection get(Map map) {
+711                return map.entrySet();
+712            }
+713        
+714            protected Object iteratorNext(Map.Entry entry) {
+715                return entry;
+716            }
+717        
+718        }
+719    
+720    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/stylesheet.css b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/stylesheet.css new file mode 100644 index 0000000..6ea9e51 --- /dev/null +++ b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/apidocs/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF; color:#000000 } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ +.TableRowColor { background: #FFFFFF; color:#000000 } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} + diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3-javadoc.jar b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..d0dd5ab968195d524c8b8ee0dc237eea66b4e055 GIT binary patch literal 1342391 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 V64r#W~n(QI|4Y&Iog!jU?BU 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�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

  • (&C4kT?RC@ja1N8>VN`3eMQC6Bg{E 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℞76$R1h#*(^TA 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

    IKJ@9oh6KY3 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

    Vwcmi$T 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 literal 0 HcmV?d00001 diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3-sources.jar b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-1.8.3-sources.jar new file mode 100644 index 0000000000000000000000000000000000000000..422d23dd0e4726e670abf9bafb5430bd386e7aa6 GIT binary patch literal 296761 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 z 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 z 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 XRdGSg1cTiL|8Rn3on7i6JA?fXwd{~& literal 0 HcmV?d00001 diff --git a/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-bean-collections-1.8.3.jar b/beanutils/commons-beanutils-1.8.3-bin/commons-beanutils-1.8.3/commons-beanutils-bean-collections-1.8.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..fdffaa1dfc2e5a193298f37cbb5410691c2fe6e1 GIT binary patch literal 26574 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 UAPWOSdhW&-k7$Q2^duWC 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 z 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 Cq5*~g literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/LICENSE.txt b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/NOTICE.txt b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/NOTICE.txt new file mode 100644 index 0000000..53a733a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/NOTICE.txt @@ -0,0 +1,6 @@ +Apache Commons Logging +Copyright 2003-2007 The Apache Software Foundation + +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/RELEASE-NOTES.txt b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/RELEASE-NOTES.txt new file mode 100644 index 0000000..1345af9 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/RELEASE-NOTES.txt @@ -0,0 +1,166 @@ + + +$Id: RELEASE-NOTES.txt 597240 2007-11-21 22:50:06Z dennisl $ + + Commons Logging Package + Version 1.1.1 + Release Notes + +INTRODUCTION: +============ + +This release of Apache Commons Logging is a maintenance release, with just a +couple of fixes for using Commons Logging under restrictive security policies. + +All core classes were compiled with Maven using a 1.4.x JDK, with target set +to 1.1 and source set to 1.2. Commons Logging may work on some +augmented 1.1 series JREs but it is recommended that those wish to run +on 1.1 JREs download the source and create a custom implementation by +stripping out all the complex classloader management code. + +For further details, please see the Apache Commons Logging website: + http://commons.apache.org/logging/ + +For the very latest news, hints, FAQs etc. please see the +Apache Commons Logging wiki site: + http://wiki.apache.org/commons/Logging + +Note that some containers (some versions of Apache Tomcat and JBoss in +particular) prevent webapps, ejbs, etc from overriding the commons-logging +implementation provided by the container. This means that bundling this +updated implementation with a deployed application may not have any effect. +See the commons-logging site and/or the wiki for more information. + +== New Features Since 1.1.0 == + +None. + +== Incompatibilities == + +The protected method LogFactory.getContextClassLoader has been reverted to pre-1.1 +behaviour. In earlier releases, this method did not use an AccessController when +obtaining the context classloader. In version 1.1 it did. In this release, it has +reverted to not using an AccessController; any user-level code that needs to obtain +a context classloader should itself create an AccessController, and call the +LogFactory.getContextClassLoader method via the doPrivileged method. This fixes a +potential security issue, where untrusted code could get access to the context +classloader if a signed Commons Logging library was in the classpath. + +== Dependencies == + +Commons Logging has no mandatory dependencies. + +Java 1.2 and later are supported. It may be possible to use this release with +java 1.1 but this has not been tested; the unit tests certainly don't run on +that version. + +== Distributed Jar Files == + +File commons-logging-nn.jar is the one most people will want. It provides the +base implementation and adapters to a number of popular logging libraries. + +File commons-logging-adapters-nn.jar includes only the adapters to various +concrete logging libraries. When commons-logging-nn.jar or +commons-logging-api-nn.jar is deployed in a container classpath, then this +adapters-only jar file should be deployed in the webapp, not the complete Commons +Logging distribution. This ensures that the core Log/LogFactory classes are only +deployed via one classloader, thus avoiding "Log4JLogger does not implement Log" +and similar problems. + +File commons-logging-api-nn.jar provides minimal adapters to external logging +libraries, just the internally implemented SimpleLog and NoOpLog classes +plus Jdk14Logger (which is currently required by Apache Tomcat). + +The file commons-logging-api-nn.jar may be used as a declared dependency for +projects that care about "transitive dependencies" and can't handle jar files +such as commons-logging-nn.jar which have "optional" dependencies depending on +how they are used. In addition, this jar file can be useful for "rebundlers" of +Commons Logging who recompile the source-code but who may not be able to +recompile against the full set of supported adapters; such projects should be +able to at least recreate an equivalent of this jar file. + +== General Notes == + +The Apache Commons project has migrated to the Subversion version control system +(previously, CVS was used). There should be no effect on users of the Commons +Logging library, but obviously the process of examining the latest source code, +and of creating patches for Commons Logging has now changed. Please see the +Apache Commons website for details (http://commons.apache.org/). + +The Apache Commons project has now moved to using the Apache JIRA installation +as its bugtracking system (formerly, the Apache Bugzilla installation was used). + +All source files for this release have been updated to reflect the new Apache +Software Foundation licensing rules. The terms and conditions are unaltered; +this merely affects how those are presented in the source files. See + http://www.apache.org/legal/src-headers.html + +This release can be built/tested with Maven 2.0.x as well as Ant. Note that +building with Maven 1.x is no longer supported. The files used to build Commons +Logging with Maven 1.x will be removed in a future version of Commons Logging. + +== Bugs Fixed == + +* LOGGING-106: Commons Logging 1.1 was completely unusable under a security + policy that prevented access to system properties. Even signing/authorising + the Commons Logging library was not sufficient. This has been fixed by (a) + catching SecurityException and falling back to a sensible default, and (b) + using AccessController so Commons Logging can be granted privileges without + needing the caller to have them too. + +* LOGGING-107: Commons Logging 1.1 auto-discovery failed under a security + policy that prevented calls to ClassLoader.getParent. Signing/authorising the + Commons Logging library was not sufficient as an AccessController was not used. + This has been fixed by catching SecurityException and using an AccessController. + +* LOGGING-111, LOGGING-114: Show the contents of chained exceptions, to make + debugging easier, in particular when using Commons Logging together with Log4J. + +* LOGGING-113: pom.xml in maven repository does not list dependencies as optional. + +* LOGGING-115: NPE thrown due to exception message logging. + +* LOGGING-117: Unit tests fail on linux with java16. + +* LOGGING-118: Generate source and binary archives. + +* MEV-392 (http://jira.codehaus.org/browse/MEV-392) + As Commons Logging didn't provide a Maven2 pom.xml file, one was helpfully + created by people not involved with the commons-logging project and published + to the standard maven repositories. Unfortunately this pom declared normal + dependencies on all the logging libraries that are supported by the core + Commons Logging distribution, meaning they all get pulled into a project that + declares a dependency on Commons Logging 1.1. This release now provides an + "official" pom.xml which declares these dependencies as optional so they aren't + automatically included in projects that depend on Commons Logging 1.1.1. + +* (no bug#): Fix thread-safety bug (SimpleDateFormat.format is not thread-safe). + Thanks to Martin Wilson of bright-interactive for the bug report. + +* (no bug#): Security issue regarding access to context classloader (see + incompatibilities section above). + +DEPRECATIONS: +============ + + (These are carried forward from Version 1.0.4) + +[LogSource] Previously deprecated, replaced by LogFactory. + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1-javadoc.jar b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..83e063f1dc33578293f397d6c141b6439c911a49 GIT binary patch literal 141401 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�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 POB#MA@F9nvO91}|cOkw; literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1.jar b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..8758a96b70cfba9466bacca19c0d99b87cf53734 GIT binary patch literal 60841 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

      {@^= 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 He!Ti0B=`{t literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-api-1.1.1.jar b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-api-1.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..bd4511684badd0cc710df5169b98e7b8f351858e GIT binary patch literal 52313 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 literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-tests.jar b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-tests.jar new file mode 100644 index 0000000000000000000000000000000000000000..4b96759e9b15ef2994bd6d1229dd2aaf5faa8e09 GIT binary patch literal 111279 zcmb?@19WCxvUY6Swr$(CZ9D07I%daa$F{AG)3M#LZU5i&Pl3`p$sR4t)dv1Q^B3Q8*3HkNZ6 zr=6v5%4coHFSq9FU@G%~^g_s}7q_Q{d4v4LKdJcd4ErJU2Vwq0gM*X3gR{PgrSq?K)&GmJvHh=fA>wqW?&$y+c!%_B@%rtii+G znVhe@3fj^A^Cx%b+f7;@-AQHj(c9Oxs}T4HSjYz}x=NJ_ZeCv}ySH9z=4gqg(-(yC!& zg5|2iLY+X5^IumoALLT7_$)le6O7ARH#O*u~NfX zoqI2QZO?F~4$i~@v1x5ULUYsh8d@P#7O*uXu9Un9LoyBlCpk@wA(e#G^2PkANk7mH ztS4B3V-E|4TW$$OSOJBPrPSIz^RvlVy{C4%zT&W*O$o1IJH{ntK8IO&vShh$x@5y9abJ>zK+FY;Oe$ptGHxCWlvg1Eope?!`it0sxiNP;_Jt_Fch0o3Hv%)IfVU)Z)~bh@=(k~4Mp^g`Yz$>3YD z6q8Ury*&Vr5bNjQPysu%PjNtb`Z37?TXsoi=c~0LDIpH$@Wi$3RV&Jac5kd@(cS~K z>kFqHSR^%3amw3jF^5rN0&|%IEL_SQ-7oT(Z>t9{oazZV3V@D7R*41mVE7dRU#f21 z>TkH43luTES8d)va~w)rPvBl~n~iNK_^qt99%@#H;p*WaffT1Wy_JG}bM3L-YtWRc zJtcG)d9#xpU1TKE^^AoumB#U%p<@BeeXGd9$ETp>p1KcC72x*m%BX1j9S*LIzp&iR zKvJA+N>8UaKoHXw_@4DL8Ua-wzSL-G0>j*J)TZA8g3HD;UHLvK4vU(I9tEkjzzxkP&vmRf_-;EPH}Jqo1-I+s{kxfNUt_!>FWDp)S)c7A+C zD~#L%fJkE!DQXx|S?p9Xxm1p8LP`9>22sK@)|dJ1K~4l^wiSA;NphXy0!4TfwoAx< zhuu_(7?VY|dMKYSQjbK^;ed)8-Se`(w(NEQ+&ms2>w;6FY4Kiss20S%m&jU(?J~P( zOIESSs3NAzc-x=zx>HzFwk)r%Oy~4|Y^9p%p)EW^j8;pq#`w+yV4xoaMcPnA-JvbG zitr7LYwH`J?TD!lD_9iu6qpb`w{0ycq0~@s0KZ9d0TLa7p|cB63Tmm<5}`VQvlq|r zBEYe_t7r&GmBzk7y78;=nNi1D?~2hgVWf%(n%UN4JFGgnsO(w}CS6R=3`GZel(3Wx z8U!9{3iI?T>Qs$ReT9o_O1wiB`X+lqp+L8L(@1<0q9B4FYd9fBKht;I#p-{K4OE?hpZqbDgh_8|C~?aa@2&lRn%iE4Scuf6dA}a z%@3AawZBy*QRcAHbot6~6MS+(9Or|u<)G9;*>{nF0?`}3<2qKjpSQzA*PC`(_>CB2cjIv<5}bR{ z+$Qmv!Plff*4}~7b-J16;8P4HonZWk{QRS^bET)QHJQ%=b-@j}AG1SuL4%5;*<2%e z;KO~b0DK<504jdPU1UTA=TW>Xk1-(2fRXLygK8V;w69)c!R5#-|GK!VN{wC8v;Jb^ z#!*cKIb4D5SQl{ODyJp8q^T|NZE}hN*GfO@0sRbV*b77zu@ooyer=O~$Yd4DMd5}gd9YP~iCrl4|1@v^ad^rYGXKDm@ zqI~dPy(=|5`rNh;@M`I1D1;X0ZR8r^TPBW*(r1n{ zlFlL~th-f{Pgg(56fIBks=w^#MD-*1-wC>7kgxK#+I$LZ#+ar+*1o636t2lQ95-#O zQw1i`K=g2)?^SjOz{16+Tj8)v0m|)$k)Er$n9?PnQG@bSj*W$cnj$Pn=f{pF7(Z}^ zDS1dv!Ok;}5gbtshM-l!{^y!^-;<7EE4vy>>j-U1+$4&qq5o^_uLgCTFDp4PojM;UK%}{CY7wr@G ztI!|$Aafl-og~Omjh(>aJLb7QP=na21+7*#z_ytpG5~02@BZA;jFB)n!59X?b;BYv zR0pXk;ER_WZ;K4_YuXvCibqtTjnmaxklj;1shvTgF87C22VyhC=D7@8%rU&NPBUAW zj2M@6V@oD1l=JILN;G+Rrowk-T2iD);G4z^Jth6(S4t&Oqsp<(heZk)qsWX?7fWzl zfsjMIrN^SWAb;wy)(Ehp<8u|~Mr9P@8RjV&KT9LkLC0}yaNyJp*`y>!)@0%6k`_jD zlAh_IdZcQX2wnW6gLS`X)IC! zE~6AhAH)#LgzgfXvF#@yr3Pc8i1xuD#RWW{a51rRbmdJ67xceH-j(^ra*uS=B$4()Y}w6VRvcuvnUWDv(;0jZ79(#90Z`;RryME;SsB=o3_p!H?(N z*XLuP@=mW7osKr`$~UjqncJgI1b*F(j#tEbotJ9wuJ-p-p@X$6AJ>k(1#mRIfzvHG zoV(4}ExA>n=C%$^edmVVm0mD=G=X*CaaNM0_C`|8v@g5AhHSZF6GT$&G-+nfi}n$znf;0ko(!I&o)iZXaDp z33zdK-$I?w*R7aKP!KeFC;EZ}o40xp?gxPd4y0lqL~dJ+y6jbGKhsa}37NH%q`{&qc4>mQpUw~sM$g2m!zGFLE>91DVR9h;!LAzS1(Aw+x6pz44h$yHiEc~a;*yQTpJ zjRP+8mW;{!Doj`~mY9(<#>MUHU1Z&`kvN;W&~gYX-?98ydMFO1WysfZNkru1b7^2+ zWH3IF=`!;f_d0jR+a6h@OU+GIUO*WP%%x7X)YB3w5-d!GQ)Y@=&)BAZ!vQ7}R*xE^ zf>(@~X}R3{IV{FC2}m1bgEjoZ7cuaaO-z@=w@O`ILw%wHOuUQU&VDm?mwzK0+ENQ3 z)a#;(ey8ee(>{NMZ=JMf;}xBb;>8+e#!@JI4y<-S2%9gkL@bu;QLC)b2?z>=ggf93 z%$^ceWbY(d-yHG5f@!mCjSvJmr}X@(R?dr#u2SYcoDS6Wc(#x$8yx{s z;4%-dlY3~y&5b>xWed)CKl+j=A)&e7j?}x5FA|BA+m%eizQZ zoD*Z(bc-JR;aT-X$SWXAys5lvdYez8wA?%`SU$E3fr{?J?_qp*_nw02h8O}wr}O23 zXVPQsku4#cQA{PDgUI#OOn8Qg6LTp@AW0bFexk$a39tFt>hmj-N+GF!@8q{Fythnd zl=#S5xebS2>3|o%B8-Q3i7wzvvbu`Iv|YurYS)nU!V`RKpO1R_5V};etFk&DNK-7e5Nl$uDS{HetvKRUw|on}Zsn z<;HCoUEreYk_GaPpr^Y$&xDhCIuB@?g)V7x-*w$7i4C`mm}O#;S5%asB`XL{Ze}9{ zvwo9D_$@Mv=Owl4vWcO-NDqwZfyby2lh|Gp4#qLl?D=+^ODK1 zR#Fkj$xs&AF*gCTED1&#jgm89X-Z3cjk`liVo8wp-Js{)*bY4~+h`*UI@eG-7bFZP zQdiB1tf2ZQoaPf}=jG+^M=zHX^j(CJO+WV>;YK~%{qC38IM>_! z%RF_yyXyJm8$}LcQ;k6Jjc-#ValVkHyP|$8ZtkCvUs_eWObv&U=QmeYt;yMflRvL* zDKb*-N0UFVTT;6e=obd%hU!EZ(yhT6?IMezqqBoH8L<v$~dRJ&m$FqmEcJmm3Ow!QHQCzhtknf63WfKZyVV!g)8?* zPHS6FMaKQQCn@^rSmWEWk$Nklp!!xGfx4j4tlmMoZ1NyxoFmn;Ms`nlIrcZ{vWJw} zvsgz^SXd-!SXvg)GL;9gn#WByS@uu0)VTTqL51B*HL$PUlek_Cx<1Ou&z-wmK;&W} zYscK3bBXLB=~!Gk$|2Ud%K7^(>kw!-2-lJL*@n@WpAhpbp9*n}`@AJ#(lObXp{QGT zS=P`Ip&iwcaz+E~R6x6sFw2Pcq>VU!IOI~n$xMW)Ue;0{PUtQ{_u@TN97kkMQPKSdO2eRB{&n4c5ut1~xJbXk*w2Olx0D0$!r#2? zv;};%46p$K9#x?PeUwd=)Zy!s0}291i9VST9bk}B>5aiGAH8W{hX5s~^A~+C*e5!a z!KOjx-m@H@Id@@rUOfUGEa1zjkYH4iQ325U9raXBVf;qVx(wcV@eaU2z8P8iQ|PNCsSne zZg5&Mixi}Qi-B>l2>4x7egJ4;uyuYWS@ns^t7k+M3RMkFi4XfxLRc3w#Dium7yRQe zlrw%P1DB}?Ikl=kg_+Qq&InK5BnyLSA1RgG_{TQkwMt*c#~<*R5=NP)AzB&6}e( zYJ$5I&@{`TVVn9`>>{L#Lvd|F$(yN{7g090Iv)Vx`{i8--^0bXT;lj z3y7%S23B0KpkLOqE2ZCo{*@OTfCv}$KDbo!gG>J+c_nD$B4Oxk;qohD{3j_W%F6dD zAY_P3Ti5veZlPoF4kzDP!+p4VUnIJHpIeEdzGY)KmVBSHB)k)y znT5-6N6WkKw9|NL(*XmlW;dkrIQF=J-p*qc{mQ>RQIQBk?s&8%DRn@9GZFn!Z|Rc8 z=ZsK>Xr<-OBxB3I3fa?|C`1*ROHBp?DV%~4=ardGm=iVzVxkF+2JY~aH2@QdFK3(;kT(R}%lGUCQ6FTxXrc;e&TLtoK+d`;B{C{1jNi(t7J~ zKP}WR1{XGT{&T?+)t;4+)luHi7}CqjEKn{K5m_yKV=OA>(HgV@O9LgKg)XPuBeo3Gqc*-=s>1b;)grj&v~QIz4uq^9-qH$ z_=qz(GJE#qCV(z1UC8(IZEB3cDAqw3T!Z3y!n}DuCH~C7f5go=r7w*aQm6EXw zW1ya+EB_}`S z#t2j8Xf+AWFjkuFpbRzs%!pQFw~=O@28*=Y4~A>cj)dq;wg=5IItSYU1LPlj0cm3- zHgXe|?DYvbiB~0phDHKHChbaFpaZw%fp6lq)PycN^oK9`fqNbk`GHA-%;IeomK}Xe za*n~8$XPlpwq~rxN_8&i(M?Oe(5vP6+?Du^9>0I$cB)|c3(j#G>T+t2SdA~=0rTe^U;~SV*?@`A}!kq80L<|ntcx* zRf6~G%73^{#~DHoebuLthJa2DlS-YmM;K)c@n?cb%G)p3+_K5y2f)0lCCuUO1Ulnr zg6I*D&s1R>!;hnPfTKoU=u?r+Sl16wHVE>?j}<&J=U=aWVh8%0p!OnK=r! zR9E9-yz5UOo2n3Z?N~`w+oRY?%F!X6;=657n-p`Du553g8&%rFJTdJ{nu&)bcmmb^ z+;nEEE*={Lzr*Irq(2(cj>?wB!Q}F)(_mA1fe3=*#Svhh7ki+e4}0kMgFj5pc&A8{ zZxf^9ZzH3A+hRuj7O@HKO}R~ts=tkmy0MiMetyvrj(?GtTr1x4!zJWc*Wlb@)M>4} zxNu$-lw2^2wF0JO!9oUw=DKjfGJ$71??+<;53fz+{cPEDqnGsk$s+7^74HTBdAY9a;I_$TDqe5Knh%+@mtuuDgRPB#Ar zZoRqY@YxjRD8q89TLHLF2j3*weaQkvpMwH9`p9X#WG_&1QC%&tkZ%%lHFG_6&yj?> zT1Q?x5vrjju~g-KMc}7#dI)*sl!PA9>nG7Ux&R*O>&3pSiWHs;zF`tBV;<@T#&t&D z&P*fCPKme(ZxFGO@3q>Fv z*j;tv%PUb7QBe3*CL`2uL*f)72*y!r;S=^T#&Ju<$&!@(#K>gZri`=5sVh2UM^Ipp zA}8uyo4Nya3FT?JwrFH@av=_-?xjnVN>d4;?SjS$9knMo4&4_TkaowKf; z&eOYmUU5NbewKt|H<$cO@?W7k`-z-*B(ExCAlY*TF}_vDbXJ=1O?s4GrTnKfs4Qwx z4N3ARs55E}RmH?-Mel;2)}ZhpNwyQ=xmpNr*7H%O_MEKT2e&}{rJjOK$4@H!P3_%P z6(qg+(~t`p6n0v%#0soUo^~Ed8?0$amXZefuhY>@8H){|QlpjU1MZ+uw=L#C{btpI zRpEzEa%CIZF|r8bc|ip6g~3F^ zOJ{`FLYhBp!PSV#yS?*tv8J2FQBLA((ha2pHN&mlcco=W@poPKW7M9JvgHA0J3|<*&!IBxs&Hbf^mUB1dR$gkXyqVa%(RIOP8j}~a zT2P%c3_;W~XBCli7a+ENW#leHr>7q8DGGl5#CuB+@YNlCLl#KH7a6mng{?`2H~f|U z0^1;iiMJGRwAye*Eq;SE4g0YFk$`DkgSiM@806 zu8^p1WNRi0RHHK2n$O8deWvd}YtoM`FLKbde7&d&OOo(fdx3YAl@&3d0xnh_Ou zh~gvmD6cXgc9-MkBlswuQ0y70Z0qcUzYOpKv*B)#Ccs>LNgp6nC@?#&AcxpIK;PLk z`#B}(lN7(C=^j84_a~0)>dU0i#DOy79zG+)qa9xN6vfn-y4g{nxe|F{9sx!|CEjj} zeE`*9%$4uWocsVP$N``#+4zQfV( z@3AH-GEkoNH!~rNq|EpJ`orWJLttrUW`&bn0DU0nu<#?HIaHsG*Q6)v0pW*kF*2 zB)2wQn@{O$6_ffqWky7iWLV#1KAh>L)54(Xgg(C2)KBL>TFm9l?Qay|B>H&pz#Vbry)INp+6bn{a(zhwCot5QLFa07S7-CA zG{<%tEP~M^+D$~EbrvGy@YWRSxJwh8=DzzkT3^+gEzi}PEv1(hFy2s#AAzgV6_e_& zyJRO}`hS{>%UrM_{*Iu*C>7i>Fo_y*&iugcnN%wjt~jlfxRqm8h^rG^-OFrcsLu*( zevbQe+HS~5Ln$I(ITO$8RVyxkCKBCzv$#`KW-4^-y1E9nh61IPgnxN4VqdO|IZJ#px{Nt9vkEm8j|NmW8EtP8u-{L~f_RqWz6 zDsvtwtayq$KjC^x2D z8D3G}m|fmomL5x_Hb6m%BGrLZdO*%viVQ^<54D;bR^1Xz!r<|sbFwhU3(ip5%i5XFQBMyT4$J{6~&zPI(Si_TBtPxM}1=RY_g2@(99v$)T> z?>knUH%2cezI45ZDdF@@;PFH_6OBh;Tp54|^VWav2|y5IBMhCA(z%Jjxi-K_emLah zb4X1_PIm-V$219+45kqNDu{?^9sr4`j5lkPk3=DZv6<-^ypO48;1Rn?8k{WJPPC;8IG8KB#E{0yJ4I8pdyp`VGiPR2 zpD>j%iv-D&tHyV)?`Bg)EHE>i|s@~S%j2h*EmgRFf-{rlA$ES zN|n78n5Hxq4Q(!GQv#)%)Ii7e(xkzaT# zY+@qiVyr2a37@ZIP%jz_rRG(?Td8~cP@RAwS5JJ4e~KwlHs#WSs#h3ZHBJzEix3<; znPVzRv0j_z>07HCDFv8_Nt()&sv4RMQk6Qq}xQGNc=vFDcHvBFJ}&tISx^Ym>S4;6X7A=KMzd?P`f~ z`j3kkhs@eAP_~+GGPK1$pmYrbWN0@;b`CI*lZ^360H}Ufs|8KjF0_%((s5#KUyKEp zGwTtW9G(NO){D0!Ay_r#;?%?NbL}rMHzSJ5Gy8{XG4RJgxR+I}K(zgX@e+fl1}o6( zrMX~73kwJe1z6u(aa1!H&0#Mct=q&?e~_%6(w0tr3%71LR@9VlvF0*Zi(HM=TS|yO z6LU@TXA6@a(fIODJ9)Embsjl+PX)So)5gMmJF)Kwp#sb!DYdPcLtC-g zZ0L7Ga#!G=Yz$3%F2>dFC0@^rSQI^8i|}y4bak(I0zDvh2tn40k@z_sAtHmSs4P4? zi%2P(;NW}oDW={ZWycVzE?Q`3@-vDGLYpI2rW(?#9Ma1TL0Ba$QyqDiR#C}YW}l2Y zqFF2Z_zx=mj)W^sqrxf(W?nkxFC0Hav^s9@Cl!FCpKw|hVk4t$oJ^b{@q)hztGp+^ zz)bgt8Bl)?KJVi!efPA=C!EG69)ni#RfM`DvW#qdso%dqc6r!`2Huo=vl4lE>pGBQmfNa zqmyU#O->5V;4TkYd~x9yzoXdP^a902OP+w^e0J$HutbUg$<=P0S3UzLqL5+Fdw#E`x2?4~zxHHK>UyipzxqOB%~x+>@ATis*$! z#iTdMP-LVhPHtx6C^(3K7kBs_3orIEfQv6sT-96SySU40X!J;9wB)S<=b6N`tiz5cR1eM_94 z(kuwXPIi$f)S3bQW*s zo)Y-=rA+SjJR-|pIc1$nseD76^*Mg7(*+k!d!uKZ4MGPW*S8v}tT6*sZ~3^U_Bzti zPf3S(&U@kYlt-@h%|_^>S(-l(az0lm$#Fk2GH-L9`HQs1S@PE79zQmOOA$7SF;i)3 zU9V$pl5tCSg0Lu8H@Oo#eU^o2xAf8I$-0H!j$+?a3132`@E#-dXWmp<{mNb=no@4&BGwI|S1sha3GsLo}!3q-o$s)NeUazV^v`V%25X%H7|Jvaag4*62V z*CRLh*F|LDo-3LGHZJWQ_8wWX^*$)F!Vd!p+$2qq*<-V7LDCoEXYMf7Eq_t&e;ml> z<5ynm_ifAaTUBRWPZ~3*?(wLbI%zU;G=Kc+mneM<54hw5?oDl`3!W?`$E9xQ2h!9f z54?jK6=|<`1tp`mL_aDt?49qzlBm*PKC}cdI=~QdGl4F^jQ6?WrodgXN-t>iB_2!N z)DM~A>aZ_(Ul=aLbyP0Nfz>a}fxjT)h=CM~M1-?~K11nkQ$mM(y3cp(U$TR0F97$$ zWjN_9jCid1S-D5CoYI9N;=z7Kg|2z<>dtuYqOZkeI}YlZzAfuvRcJR}qcor%<@^Yb zRxLT2ExYddqgC$Hp69F5rF+V8eR@u7_H*2+d{HnFiNh2s@GtgKR%DrK6d%}cqY5L0ZiyTYik zWhRo_AK6(#t5LaVAZj3>hRl)J9KEinqIP3(5qe{_|A^Ju`CLo#8b~Ci?h8y)g>rKL zscg-bDv5VR4RL3Ve+9w%Cs}oP&Rs3g2pV233J?%&%|l}F%G)<94xf9uv5QH>Gp?ec zy+|9awh){q8MS&|<;_@HuiHnhC~&3C<`g@pL)Qv^fAJ+9-2tPNx6y+D)VgkuJ60mh zzE2i;A__KnMaqSN^>zzlQS1rJKP&U__LWf|6rfGTy{`w zWX;oB5pKcb#rtjaAVa6`?v1Lok*txdY*Dcvb_xSu^@Il#zj%vw+qI53N29pFkPe*f zc34A#EzsC-V}Z#o1Ltd}D`J}%QH=wQQvaF2EGV>+tUNu{oaD^nS)4hA8p|F!Ea*bWXdRs{y9@msA6nU}yas zjDBCXzD8er8Z8BVaaa%>ciVP7!zI4+e4F+pzqilr7q{F78RZRuqK!m+kC>Ierj=>? z&M`a(L3^J2imYI{lARoo-%Ys;Gqv3I@Fh+03ANAXP1;ph`arXya~#ow{x!qiK%jWQ zS4rWD2c$dIDQ+aJ&?)Z?0?WyX zOQtQQC%^0)$F7^zDb|DYBduNop0r}3N2p-2-l@%lHw_O+aJ7JAa}NQ(O%%+O@A!qJ zZy2=KP5YpgV~F!14)}Nj;1{9zFR=vOS{H|$vcRL8Gq6YWGykYXx(ajKLG>f>B4 zaNJ7{yb#Z%0kMo|?dF^p(`-H5EXCAf63aPtd*VxdXpQ=oDeb4sSq5#*maOlK-|5M& zlK92H{Y(Pqv0#5+Tl)-qpeI9+7|^o?&i(UK*m8{y+Wc`;APumW+r2%wwRfiEY(Hcc zdJj~w7cW>Z<1#Wp{rDk$$ajvYSO_m-)3onf7Z-g!g^!n6tP?TjOF0c0bLW0AV5L3@Nv>~qk@8N)4M;?>?TQpVBjHX-*NmWjW~Ob_xBfDe>i=wjRZC&o=6m(8)# zV!c%Spw)~dol~jhU4qFKw3x+bnf?|oHWPo_uZ5<0>3Fl#E2#GUusQqZdXL}^ANoX_2nue4%^3UE*eC=Vni-Q*gFXYZD0 z$tI~(SI>sI32&1k&CHqk**vL>A;MeTbZwyG>lJse) zxA+JB-|#c_fghcN00elJMF{0s8;^QEY%48rs{{)h>9l>+bt#{e{zd3Zo}`YfIR;J5 z=B(buUim-p)8sG)i&vleW@pz4=0ZRIKjO#f-X6@_J6&RS81n27{4D(gKhJA+ID--( z9kEPfc5cm|_6%mc-@{ntW6=K#KU@Km2<=8E(2rL)oZH2GZN!W|WIC`6lcZI7stZDx5_6(bbpZ z^YswErL>x{Bx|CLJX?ST0@f{fW`23d+di#U)jahFaH#e}+Exxmz50{&l;c(4onND7-k|>#NUMxO`~No} zG5xQAbd?jL#yQ!irbrwEW0|mx1%`p@*3>2)_TE`%Z4u)o#Qo#b^?G`XpE;GHR(Ut2 z1FcZG=&48XnU5INPLgFbc@7fJ%;ZFy!7VC|G8 zIXVHkk1zmL>97Ib#5jcn(AvLA{%=5fx%f9Ab^87SlKKA;NHdgj5j!!$ZvOuOQsDnj zASH*qe!lVS*pjX)kt_{q>D;gX_llWypQXCp4@Q#sU?hqE$e#V3k$xSl{%cAie#93W zCym9id7Kn3!;$!9(USg#Bp#|0JNIOy_s`}FlLWVcZYlSB9qi7)^eVaa8h*+@$05Sd zNWVC#wh3Ycb{v_K;!r|1Np^Mt`{V+WIwG$5GEGvRQ6;(r%XMrEeKG}^!svr5sACj} z!Z@fCj^#VeE@b;jU8{}*jWLwj5<&wr^5UOXBBC0LPpd^R97G3kDG(6JfI1v3ejJgr zcOn3b6v-RE=NZ%#cTUcDC&d$KT7^Crt!7p^$e?x+AJ)EW+wP}rcagpO;O==(o6YSA zSb}qd#=iu}FEtyrTU#yHL}G$Dnb-D(S!4TIB3Dk%p$kGyVD6d?A!;fM;O9xkTdN-Y zcZ7&+cC|uHdAJ379Gj%`GtFxV&qP|SQO(!0VTax#Xo#^iDMzD%3XGSx-n8Bin`ZD~ z)5>|4<;WTIr_D{`1=#rPe@==lPBIM>jwN5D>{xdCH`PD*c+mc&<;06GmvHCAiMntZ z%9oG#PGZM}7HHPNR%+9mZ|5Z( zJWVGvv2+x%Ot&7F`8eP6iM@Vjo%qwiwflPj8H|DC_sj=B|2CA>ip`K_@w~-JhR}~N zpG4V^MTRV>CM=c{)n5LplA}~syE@c06_it>DhE_JRwE%P`}xcyxH_FQ6%S`J>uR(o zC^Qust4<{*_%?v@}byrl<5G=+zXFuYIcrujn)j!({3veR3lzkb<6WcY^F z1FlciPk5*|3I~ErcBulp!7*2CQDR~&G*B>BA)Kc#_VPpC zQuB>XWRlIatj%^hVM?-^C?|FWsVFI1U3p@o<4@u>4YT#BS%IQDa6&2NEe+jB7k}$K{oax59c{b z4d&kau>ul%ROZ%VyhJ)tJ@aFo6}y1=aAzR0e!n^5t5JNS;T*6O#7!TaoRB>*pRE=K z(qf&Daqs0oW^HDP=b1GeQxav-N#U5IbnQ;0!URt0} z9OvB<&cY?_;rB)Z)onK&qXQ2p`C|{T2`HPShTBo2Bp03#X1-1DYCozJf&C{VTq^TA zq)SiCJ7^EZL1~ZFMaPY}D0K&|9(|V=)Gx%J=aJGv`>iI010WBtH(cApzZ`hLRyohO zsWl;6tK7po6)dQW3H4xettVI>bp^5v7Z>dWCHvY_dT0;wn`Vx0;XLA?Y)gm@dbSf+ zn|`i8G0lrQPP43{RyZArGt~7=b*t4XdoK8?&-E55rSM`uo4y!_b(?2kZN1jO3Sz52 zXxJEEzAbn007_oCuVc=4kgYX-6O~pF7rSkwUEZW9y}W)9RjYm;UeOgjr$)}cV&M@f zLx9zGptrzfEZ$;*r$@0@QNLSpbk8oZ22eFOWU^>Z(@7Gi7Vd}45252YX0#q7TguGF zwan1Vz+Gf%juoKiO+@e-Y7;q5#pqVPdk5-wtT{T4!!GS3ZiM{o6zWyBf!(Gs-3(wj zaI%pf<$B};xY$V!yHMZZIGSj`tZm~KYUjVsx63if^T;+O$WR6roao%_X}86 z(#fGnoLd3F?--k_{^=LER+rTeID|HP?bkdB@Kbn-$x}?va0%*&g*$hs7Ij9D>G7Wt zUwO0&#I&=gj;!m|CiQxfIwizGV>^e`qNo?y+5%6XsSZ|=HsXp6#6h`<72!}%xRw|6 zdrXnb%tC~xCWC`pa2MOX-3Xlek=)?f#f7K#pehr{atSSoabQEJ4#I;!lLO6_<(DGC zilgeQhTloVO2uj+pC;y_g=W@@bFmuPydCVq`Xhs&5f6 zdqCv9@cVxsGQ{~vV(^eTf^BTK*@T~GTXrIwRr{ZB1F!nMZ;|lr-CwYrhX{?eJcE!^1J(??MfGRRR9!Txe&ilHqPDBZxoV za3t0!>J9bba)o|;)BoP(5^=S)^%V6mHg))wC;qccS)ont<3LD;?1=_ONFWH7h_JZ8 zPk$tlcwdlO3xIocXD7Hd;w#`Db45bM3qWraqf-JBuFA!=)XdC|wu!2Hco)aO)0i2G zZjNp=LyZw3$jp&kmGO1`F$fpg1Nlr^YQr*>1Fa_wT%w!t1l2jtoHl+*$n{xXiCzLl zwe?vux(IH@g&$v$l4~jqoCo;x)oE2EIb?KV2aPCegT6AG!<>gVj5?cMd#GVwJ6&cB zoA#q~kp?zZ(lL3KV1-<6++F5*AR*2pAd$VZnWmf3&HHP2(cDdLe%n+x0>|?n=M}>R z(NU}m*yds;rv-ZnV4t+64&w;Un2I{folvbuG6W8ocUh!j|MxN$^Q%6j!H;s{2222e zzjznPAFuUMH#M~WM={HKous1W^i;amv0Fn?BfzS-i%?0C!8u0Za zp@B41jG!MT#$-wji-$zep3+LB(ps>pXlR_5(nhZj68NgEje2Z1H{YPuFxR-OTV|X1 zw%@`2|0w&$;LhHy%UB)Tww-ir+qP}nwr$()*mlQGe(BiG^nLG4)x7_ynmhC9RGq5x zZJ+h*XYIAtrjb|dV|d#_4B?ta7cqPCqKdghKE2HWax7O?EBH)P!l#hssU*ia_qvrK}UaArNl__oXI?O%~-X3FZ;b<`0*yyb-RTW}kjQYr$jg?Hu6Dkky*g{i9e7v<5#odxMF&8QJk)rJ@gNzeN~YoL$)k*RBLb@kOkXk90pX|`r9a)lkq#woL|p6U!>+GEnC2y5(##>~ zqla$_%Iht=ix{%Q;aag^Gi)Xkoda2|qZZ2%YvK=qz$D_*%{%1i zSh-gLy$q{pmRUCP;eL&+7KX?DAXsST4gks&`cxjk*ee90!+VCxze1~yc$*hm8)uF#Mg(5h5U$^E?BNLZgyFsu_kVfl4}IVC4SIy%tU18*-R&F0y<-8SDtTl(J%l<_ z#g+Arml||meXU~3K&a1@v&u%J4EiSTD}!irD^2E?ITe*Dt)fhhRSzSrRF~Hm=eXIr zgkscW(Uw%JL}cexDzhr~m3&I}osP{@r)3L|%$tlg3%h8x(2NQ~k$G>|PZIFquqI{_ zc2-2?!ygn}7?B(KG|I@SroX1m*);>TGsGy{MN_h}YRW9m5wqfOmR0hpF}6|A%6zn7 zsb#)W3J%Gt6Xfx#DlL(D#99An3jqjWN8loh>lDHpiO@MD;4=osLo-ozo7r45vgCe1 z6zhudFq1M)cQ6-X`wpACOo-yvIUJqV-NK-7z&C9#+eI`_+Q*G}TZih}mlby#MW(o_ z|3b|@q=v8YhjcRgi8gWj+pjIV_7}?vt`x4zoYt7mbgM1V57(SgFjwbBiFggSI+o4& z5u50#STJrD@0s=43qEBvravf~Qjv!cKlJ1I=BH_-+9}+4v9U~UD7?|V1w)H}=)ekK zb0P9AG0xqJ7HOWa=P*g2UPz+F#s(EJPO(;N#>^PayBc;+&5LRtU~QM53DA2(F}2L= zWFfPaH)=}GMs3@Y);t-myS+{{_OjnMhX(K{vY#2c;i$K3a1R08a&t`d4W3T=<+h?A#k7HSuT8)kfre`fB;M8Q^85`7#uLXoo`} zixGJ1yHohC5ulJzn1d^&!D}g<2WTBYhTlPs0DQLJn4r113g)SP$b`00< zJJ84p1ILM7%Ngd!m)114Ps53yUOYQouQ_h>A$%ttnS=7`ZU*zc#Qt@8_ey$Vm~uH% zLOLdtH?@T80WP_7#9BWdsD99&owS$^!52$Jx~3b#U;yF2yJASB1yun0*fXB&fV5v8 zXy*>}RvHYPn`JtT37L1&Pa|7g#uzPV^vk-HQ#@=zg{Ph5wi~TMU*rQ}g6xKMc0EDVe^LrWKv@jPBg6 zOA6DNSyR$VQ`|~p99u&YojD$gvoNa(u2dtMc{ZDQsBK5SyBEB(lBpmk2ehCk=aj#& zO|wk?iV9nh6u6)Q8Px1vk=DN7a?5gzL7PynwvV&#-?PCJ@p3OdYB0fZ4C}G`@iq72VyROuZ#P4h>UliU? zP>5;xx36%XSL3|i+;V$U&yHC6oZRUgZl%`+iCk>}35I(zjZv#Fiiu@sR6M@u=l$6L z4OKFrv|3pYInTp)iV_`Z_MohVKdbh5LZ?kdm1QNp!=T%m%G1@(dYjf-UNy6O+BkCE zPv@jv$mpkVp;+2Vn*9`MFOQOF$Yd=#EY`)ShuDY8g<(rmnL$YIJ3aX-CCw-=C*1QQ z&T}LBmc5s8pQ%4J^_wGHpQOPdAlMoZ%wwe`UjIBVe7D>gN5jE}A8+q`JaISmSlPjs z+Dv*A<1(YsxRETDqAJBKC6tKejDR>5JY5#UNa&s?nr@-?#R%buLZ9s80&7OM0$NGOtZqqYYPD^O@6m)~n$@;z`HmI3;h3Q}&qo zS@k^74fzo&n2n5B&l&w5LitY7JYp_WIYJf4Xy2yidno*$(}J$6oBN3AJn7_z^I1 zXGlHIetRwEvs?4NwmzFZ4DW!VoX)@R@nlBsfbYs+j_l5Ol&0_<-{EB5!5%+BhrT;F zNc)Qub@y2Qfaf~n8}z@AOW2rY4qX09+`a!M%Kisw?!QAjh5sur@!wLb|9woWqHCYc zi0WIv{Oyq1*PjBVz@#@|)jm$& zwU`LvB5_+qZ!{3|Fi<}Jok@4F6dP2j(;>MLK}tQ=_}brT#s!TE7}=x}Q>%r5W!FNS z5UrGc zmt3?er7%rprVOM(to9ac>ZQV))MFHXBn&1PW35sVQk}lviHX0Q(#H#(_B9u{?X~K> zOHJ&@xZG9|JJeO0HOJ>Ry*uLigp5l}G+cI=(8+q>5H|x7mOg7UI_M3!2jWhyBus^~ za{~i2s8oC~Y8MZe0(69=0SWRT^<$2Z94TozI6|T}6MDmkDMAn3KD}SqOxIw)O!6Y6 zYeaTEGM)s2?bjXn;~v}-O1dQzt7Ugn2$@<^%q}AJz_ar8K<&X-zJ(1~54ON!?wkKX zvP-my{lfZN#U6i?5B>wm{(n}opn~K-bc3qa&VO?dcsUyBv=wmQ9Z?!bbGt~ zRSCM6@_&Cla=;qn!y&cb^aZd16GXfqwu>_FBHdzNK~Y8^I&j22f|)fSjg?6}d-ELd zJ^PRz07p66IC@aUg>QA>jg2|_43bPbUO3#8$%Itfftt$c4Z_h%uLqMC!srUf1_5&cJgX?f z(T?RrJCzmT(wDES$2SD-2?8emQoDv;9_pzA#xWh!;8%WkazZA)%7%- z13r+SI#nQb-aq^kqQ+8RCr*Sk4fns<_+UBos2^DEK3cwc%Z(nU2MiId;;1lus*q8<=n%EsXeSABroQVfqT zj)t<+<1alEy-HnS8f$hX5@pM@G0he?qxPoC%grFahkBL;@hIEs*d0m% zz?M>9Kali%7mpc?L+Y>&(#d9{hwt#Z^u}P)Eas-xhr8E{RIxY~hOHXLXdC7Cyx;1k zS|<02P-*A!IjHOsZG=Nmspi-gZ@7qvkF<$h0ozN81tR!$%FN!dPbD5f`!JU@P9bO4 zA;(Ay0@s}ag6PXWWp=R0j#|()l0D-1E?i>zqXzob-~V7N>lxf(ApU}m)?d)!|GzVq z|0n2(x!TzL6Ll{CmA>*{sH19qFlw8;s1OD7Dx0OWMM|eCGeBg}ho+hKujrK| z%Quk^I@8e!R+gJ&th^u!!*v?0F;X|_#?iE^tKZwsb33WuFMnR^GenTOiPIX1_u2wf zk=$(IjY3u=cbBv`eD+DV|r5j?M zgN{?MksBzR_JF=hrY-1TytRZCUR7&A(}@dL+~vf7A


      +
      +

      +Constant Field Values

      +
      +
      +Contents + + + + + + +
      +org.apache.*
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      org.apache.commons.logging.LogFactory
      +public static final java.lang.StringDIAGNOSTICS_DEST_PROPERTY"org.apache.commons.logging.diagnostics.dest"
      +public static final java.lang.StringFACTORY_DEFAULT"org.apache.commons.logging.impl.LogFactoryImpl"
      +public static final java.lang.StringFACTORY_PROPERTIES"commons-logging.properties"
      +public static final java.lang.StringFACTORY_PROPERTY"org.apache.commons.logging.LogFactory"
      +public static final java.lang.StringHASHTABLE_IMPLEMENTATION_PROPERTY"org.apache.commons.logging.LogFactory.HashtableImpl"
      +public static final java.lang.StringPRIORITY_KEY"priority"
      +protected static final java.lang.StringSERVICE_ID"META-INF/services/org.apache.commons.logging.LogFactory"
      +public static final java.lang.StringTCCL_KEY"use_tccl"
      + +

      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      org.apache.commons.logging.impl.LogFactoryImpl
      +public static final java.lang.StringALLOW_FLAWED_CONTEXT_PROPERTY"org.apache.commons.logging.Log.allowFlawedContext"
      +public static final java.lang.StringALLOW_FLAWED_DISCOVERY_PROPERTY"org.apache.commons.logging.Log.allowFlawedDiscovery"
      +public static final java.lang.StringALLOW_FLAWED_HIERARCHY_PROPERTY"org.apache.commons.logging.Log.allowFlawedHierarchy"
      +public static final java.lang.StringLOG_PROPERTY"org.apache.commons.logging.Log"
      +protected static final java.lang.StringLOG_PROPERTY_OLD"org.apache.commons.logging.log"
      + +

      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      org.apache.commons.logging.impl.SimpleLog
      +protected static final java.lang.StringDEFAULT_DATE_TIME_FORMAT"yyyy/MM/dd HH:mm:ss:SSS zzz"
      +public static final intLOG_LEVEL_ALL0
      +public static final intLOG_LEVEL_DEBUG2
      +public static final intLOG_LEVEL_ERROR5
      +public static final intLOG_LEVEL_FATAL6
      +public static final intLOG_LEVEL_INFO3
      +public static final intLOG_LEVEL_OFF7
      +public static final intLOG_LEVEL_TRACE1
      +public static final intLOG_LEVEL_WARN4
      +protected static final java.lang.StringsystemPrefix"org.apache.commons.logging.simplelog."
      + +

      + +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/deprecated-list.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/deprecated-list.html new file mode 100644 index 0000000..84c01c4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/deprecated-list.html @@ -0,0 +1,189 @@ + + + + + + + +Deprecated List (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Deprecated API

      +
      + + + + + + + + +
      +Deprecated Classes
      org.apache.commons.logging.LogSource +
      +          Use LogFactory instead - The default factory + implementation performs exactly the same algorithm as this class did 
      +  +

      + + + + + + + + + + + + + + + + + + + + +
      +Deprecated Methods
      org.apache.commons.logging.impl.LogFactoryImpl.getLogClassName() +
      +          Never invoked by this class; subclasses should not assume + it will be. 
      org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor() +
      +          Never invoked by this class; subclasses should not assume + it will be. 
      org.apache.commons.logging.impl.LogFactoryImpl.isJdk13LumberjackAvailable() +
      +          Never invoked by this class; subclasses should not assume + it will be. 
      org.apache.commons.logging.impl.LogFactoryImpl.isJdk14Available() +
      +          Never invoked by this class; subclasses should not assume + it will be. 
      org.apache.commons.logging.impl.LogFactoryImpl.isLog4JAvailable() +
      +          Never invoked by this class; subclasses should not assume + it will be. 
      +  +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/help-doc.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/help-doc.html new file mode 100644 index 0000000..322b3b4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/help-doc.html @@ -0,0 +1,194 @@ + + + + + + + +API Help (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +How This API Document Is Organized

      +
      +This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

      +Overview

      +
      + +

      +The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +

      +Package

      +
      + +

      +Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

        +
      • Interfaces (italic)
      • Classes
      • Exceptions
      • Errors
      +
      +

      +Class/Interface

      +
      + +

      +Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

        +
      • Class inheritance diagram
      • Direct Subclasses
      • All Known Subinterfaces
      • All Known Implementing Classes
      • Class/interface declaration
      • Class/interface description +

        +

      • Nested Class Summary
      • Field Summary
      • Constructor Summary
      • Method Summary +

        +

      • Field Detail
      • Constructor Detail
      • Method Detail
      +Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
      +

      +Use

      +
      +Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
      +

      +Tree (Class Hierarchy)

      +
      +There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
      +
      +

      +Deprecated API

      +
      +The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
      +

      +Index

      +
      +The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
      +

      +Prev/Next

      +These links take you to the next or previous class, interface, package, or related page.

      +Frames/No Frames

      +These links show and hide the HTML frames. All pages are available with or without frames. +

      +

      +Serialized Form

      +Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

      + + +This help file applies to API documentation generated using the standard doclet. + +
      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index-all.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index-all.html new file mode 100644 index 0000000..ec1713d --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index-all.html @@ -0,0 +1,1248 @@ + + + + + + + +Index (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +A C D E F G H I J K L M N O P R S T V W
      +

      +A

      +
      +
      ALLOW_FLAWED_CONTEXT_PROPERTY - +Static variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The name (org.apache.commons.logging.Log.allowFlawedContext) + of the system property which can be set true/false to + determine system behaviour when a bad context-classloader is encountered. + +
      ALLOW_FLAWED_DISCOVERY_PROPERTY - +Static variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The name (org.apache.commons.logging.Log.allowFlawedDiscovery) + of the system property which can be set true/false to + determine system behaviour when a bad logging adapter class is + encountered during logging discovery. +
      ALLOW_FLAWED_HIERARCHY_PROPERTY - +Static variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The name (org.apache.commons.logging.Log.allowFlawedHierarchy) + of the system property which can be set true/false to + determine system behaviour when a logging adapter class is + encountered which has bound to the wrong Log class implementation. + +
      AvalonLogger - class org.apache.commons.logging.impl.AvalonLogger.
      Implementation of commons-logging Log interface that delegates all + logging calls to the Avalon logging abstraction: the Logger interface. +
      AvalonLogger(Logger) - +Constructor for class org.apache.commons.logging.impl.AvalonLogger +
      Constructs an AvalonLogger that outputs to the given + Logger instance. +
      AvalonLogger(String) - +Constructor for class org.apache.commons.logging.impl.AvalonLogger +
      Constructs an AvalonLogger that will log to a child + of the Logger set by calling AvalonLogger.setDefaultLogger(org.apache.avalon.framework.logger.Logger). +
      attributes - +Variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      Configuration attributes. +
      +
      +

      +C

      +
      +
      cause - +Variable in class org.apache.commons.logging.LogConfigurationException +
      The underlying cause of this exception. +
      containsKey(Object) - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      contextDestroyed(ServletContextEvent) - +Method in class org.apache.commons.logging.impl.ServletContextCleaner +
      Invoked when a webapp is undeployed, this tells the LogFactory + class to release any logging information related to the current + contextClassloader. +
      contextInitialized(ServletContextEvent) - +Method in class org.apache.commons.logging.impl.ServletContextCleaner +
      Invoked when a webapp is deployed. +
      createFactory(String, ClassLoader) - +Static method in class org.apache.commons.logging.LogFactory +
      Implements the operations described in the javadoc for newFactory. +
      currentLogLevel - +Variable in class org.apache.commons.logging.impl.SimpleLog +
      The current log level +
      +
      +

      +D

      +
      +
      DEFAULT_DATE_TIME_FORMAT - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      The default format to use when formating dates +
      DIAGNOSTICS_DEST_PROPERTY - +Static variable in class org.apache.commons.logging.LogFactory +
      The name (org.apache.commons.logging.diagnostics.dest) + of the property used to enable internal commons-logging + diagnostic output, in order to get information on what logging + implementations are being discovered, what classloaders they + are loaded through, etc. + +
      dateFormatter - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Used to format times. + +
      dateTimeFormat - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      The date and time format to use in the log message +
      debug(Object) - +Method in interface org.apache.commons.logging.Log +
      Log a message with debug log level. +
      debug(Object, Throwable) - +Method in interface org.apache.commons.logging.Log +
      Log an error with debug log level. +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +
      debug(Object) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +
      debug(Object) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.FINE. +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.FINE. +
      debug(Object) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.FINE. +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.FINE. +
      debug(Object) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.DEBUG. +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.DEBUG. +
      debug(Object) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.DEBUG. +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.DEBUG. +
      debug(Object) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      debug(Object) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG. +
      debug(Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG. +
      directGetContextClassLoader() - +Static method in class org.apache.commons.logging.LogFactory +
      Return the thread context class loader if available; otherwise return + null. + +
      dummyLevel - +Static variable in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      This member variable simply ensures that any attempt to initialise + this class in a pre-1.4 JVM will result in an ExceptionInInitializerError. + +
      dummyLevel - +Static variable in class org.apache.commons.logging.impl.Jdk14Logger +
      This member variable simply ensures that any attempt to initialise + this class in a pre-1.4 JVM will result in an ExceptionInInitializerError. + +
      +
      +

      +E

      +
      +
      elements() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      entrySet() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      error(Object) - +Method in interface org.apache.commons.logging.Log +
      Log a message with error log level. +
      error(Object, Throwable) - +Method in interface org.apache.commons.logging.Log +
      Log an error with error log level. +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.error. +
      error(Object) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.error. +
      error(Object) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.SEVERE. +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.SEVERE. +
      error(Object) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.SEVERE. +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.SEVERE. +
      error(Object) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.ERROR. +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.ERROR. +
      error(Object) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.ERROR. +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.ERROR. +
      error(Object) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      error(Object) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR. +
      error(Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR. +
      +
      +

      +F

      +
      +
      FACTORY_DEFAULT - +Static variable in class org.apache.commons.logging.LogFactory +
      The fully qualified class name of the fallback LogFactory + implementation class to use, if no other can be found. +
      FACTORY_PROPERTIES - +Static variable in class org.apache.commons.logging.LogFactory +
      The name (commons-logging.properties) of the properties file to search for. +
      FACTORY_PROPERTY - +Static variable in class org.apache.commons.logging.LogFactory +
      The name (org.apache.commons.logging.LogFactory) of the property + used to identify the LogFactory implementation + class name. +
      factories - +Static variable in class org.apache.commons.logging.LogFactory +
      The previously constructed LogFactory instances, keyed by + the ClassLoader with which it was created. +
      fatal(Object) - +Method in interface org.apache.commons.logging.Log +
      Log a message with fatal log level. +
      fatal(Object, Throwable) - +Method in interface org.apache.commons.logging.Log +
      Log an error with fatal log level. +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.fatalError. +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.fatalError. +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.SEVERE. +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.SEVERE. +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.SEVERE. +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.SEVERE. +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.FATAL. +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.FATAL. +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.FATAL_ERROR. +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.FATAL_ERROR. +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      fatal(Object) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Log a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL. +
      fatal(Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL. +
      +
      +

      +G

      +
      +
      get(Object) - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      getAttribute(String) - +Method in class org.apache.commons.logging.LogFactory +
      Return the configuration attribute with the specified name (if any), + or null if there is no such attribute. +
      getAttribute(String) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Return the configuration attribute with the specified name (if any), + or null if there is no such attribute. +
      getAttributeNames() - +Method in class org.apache.commons.logging.LogFactory +
      Return an array containing the names of all currently defined + configuration attributes. +
      getAttributeNames() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Return an array containing the names of all currently defined + configuration attributes. +
      getCause() - +Method in class org.apache.commons.logging.LogConfigurationException +
      Return the underlying cause of this exception (if any). +
      getClassLoader(Class) - +Static method in class org.apache.commons.logging.LogFactory +
      Safely get access to the classloader for the specified class. + +
      getClassLoader(Class) - +Static method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Workaround for bug in Java1.2; in theory this method is not needed. + +
      getContextClassLoader() - +Static method in class org.apache.commons.logging.LogFactory +
      Returns the current context classloader. + +
      getContextClassLoader() - +Static method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Gets the context classloader. + +
      getFactory() - +Static method in class org.apache.commons.logging.LogFactory +
      Construct (if necessary) and return a LogFactory + instance, using the following ordered lookup procedure to determine + the name of the implementation class to be loaded. +
      getInstance(Class) - +Method in class org.apache.commons.logging.LogFactory +
      Convenience method to derive a name from the specified class and + call getInstance(String) with it. +
      getInstance(String) - +Method in class org.apache.commons.logging.LogFactory +
      Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes. +
      getInstance(String) - +Static method in class org.apache.commons.logging.LogSource +
      Deprecated. Get a Log instance by class name +
      getInstance(Class) - +Static method in class org.apache.commons.logging.LogSource +
      Deprecated. Get a Log instance by class +
      getInstance(Class) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Convenience method to derive a name from the specified class and + call getInstance(String) with it. +
      getInstance(String) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes. +
      getLevel() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Get logging level. +
      getLog(Class) - +Static method in class org.apache.commons.logging.LogFactory +
      Convenience method to return a named logger, without the application + having to care about factories. +
      getLog(String) - +Static method in class org.apache.commons.logging.LogFactory +
      Convenience method to return a named logger, without the application + having to care about factories. +
      getLogClassName() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +
      getLogConstructor() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +
      getLogNames() - +Static method in class org.apache.commons.logging.LogSource +
      Deprecated. Returns a String array containing the names of + all logs known to me. +
      getLogger() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Gets the Avalon logger implementation used to perform logging. +
      getLogger() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Return the native Logger instance we are using. +
      getLogger() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Return the native Logger instance we are using. +
      getLogger() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Return the native Logger instance we are using. +
      getLogger() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Return the underlying Logger we are using. +
      +
      +

      +H

      +
      +
      HASHTABLE_IMPLEMENTATION_PROPERTY - +Static variable in class org.apache.commons.logging.LogFactory +
      Setting this system property + (org.apache.commons.logging.LogFactory.HashtableImpl) + value allows the Hashtable used to store + classloaders to be substituted by an alternative implementation. + +
      +
      +

      +I

      +
      +
      info(Object) - +Method in interface org.apache.commons.logging.Log +
      Log a message with info log level. +
      info(Object, Throwable) - +Method in interface org.apache.commons.logging.Log +
      Log an error with info log level. +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.info. +
      info(Object) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.info. +
      info(Object) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.INFO. +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.INFO. +
      info(Object) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.INFO. +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.INFO. +
      info(Object) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.INFO. +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.INFO. +
      info(Object) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.INFO. +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.INFO. +
      info(Object) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      info(Object) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO. +
      info(Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO. +
      instances - +Variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The Log instances that have + already been created, keyed by logger name. +
      isDebugEnabled() - +Method in interface org.apache.commons.logging.Log +
      Is debug logging currently enabled? +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Is logging to + org.apache.avalon.framework.logger.Logger.debug enabled? +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Is debug logging currently enabled? +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Is debug logging currently enabled? +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Check whether the Log4j Logger used is enabled for DEBUG priority. +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Checks whether the LogKit logger will log messages of priority DEBUG. +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Debug is never enabled. +
      isDebugEnabled() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Are debug messages currently enabled? +
      isDiagnosticsEnabled() - +Static method in class org.apache.commons.logging.LogFactory +
      Indicates true if the user has enabled internal logging. + +
      isDiagnosticsEnabled() - +Static method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Workaround for bug in Java1.2; in theory this method is not needed. + +
      isEmpty() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      isErrorEnabled() - +Method in interface org.apache.commons.logging.Log +
      Is error logging currently enabled? +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Is logging to + org.apache.avalon.framework.logger.Logger.error enabled? +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Is error logging currently enabled? +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Is error logging currently enabled? +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Check whether the Log4j Logger used is enabled for ERROR priority. +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Checks whether the LogKit logger will log messages of priority ERROR. +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Error is never enabled. +
      isErrorEnabled() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Are error messages currently enabled? +
      isFatalEnabled() - +Method in interface org.apache.commons.logging.Log +
      Is fatal logging currently enabled? +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Is logging to + org.apache.avalon.framework.logger.Logger.fatalError enabled? +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Is fatal logging currently enabled? +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Is fatal logging currently enabled? +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Check whether the Log4j Logger used is enabled for FATAL priority. +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Checks whether the LogKit logger will log messages of priority FATAL_ERROR. +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Fatal is never enabled. +
      isFatalEnabled() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Are fatal messages currently enabled? +
      isInfoEnabled() - +Method in interface org.apache.commons.logging.Log +
      Is info logging currently enabled? +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Is logging to + org.apache.avalon.framework.logger.Logger.info enabled? +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Is info logging currently enabled? +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Is info logging currently enabled? +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Check whether the Log4j Logger used is enabled for INFO priority. +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Checks whether the LogKit logger will log messages of priority INFO. +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Info is never enabled. +
      isInfoEnabled() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Are info messages currently enabled? +
      isJdk13LumberjackAvailable() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +
      isJdk14Available() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +
      isLevelEnabled(int) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Is the given log level currently enabled? +
      isLog4JAvailable() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +
      isTraceEnabled() - +Method in interface org.apache.commons.logging.Log +
      Is trace logging currently enabled? +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Is logging to + org.apache.avalon.framework.logger.Logger.debug enabled? +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Is trace logging currently enabled? +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Is trace logging currently enabled? +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Check whether the Log4j Logger used is enabled for TRACE priority. + +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Checks whether the LogKit logger will log messages of priority DEBUG. +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Trace is never enabled. +
      isTraceEnabled() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Are trace messages currently enabled? +
      isWarnEnabled() - +Method in interface org.apache.commons.logging.Log +
      Is warn logging currently enabled? +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Is logging to + org.apache.avalon.framework.logger.Logger.warn enabled? +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Is warn logging currently enabled? +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Is warn logging currently enabled? +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Check whether the Log4j Logger used is enabled for WARN priority. +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Checks whether the LogKit logger will log messages of priority WARN. +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Warn is never enabled. +
      isWarnEnabled() - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Are warn messages currently enabled? +
      +
      +

      +J

      +
      +
      Jdk13LumberjackLogger - class org.apache.commons.logging.impl.Jdk13LumberjackLogger.
      Implementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that are + available in SourceForge's Lumberjack for JDKs prior to 1.4.
      Jdk13LumberjackLogger(String) - +Constructor for class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Construct a named instance of this Logger. +
      Jdk14Logger - class org.apache.commons.logging.impl.Jdk14Logger.
      Implementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that were + introduced in the Merlin release (JDK 1.4).
      Jdk14Logger(String) - +Constructor for class org.apache.commons.logging.impl.Jdk14Logger +
      Construct a named instance of this Logger. +
      jdk14IsAvailable - +Static variable in class org.apache.commons.logging.LogSource +
      Deprecated. Is JDK 1.4 logging available +
      +
      +

      +K

      +
      +
      keySet() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      keys() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      +
      +

      +L

      +
      +
      LOG_LEVEL_ALL - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Enable all logging levels +
      LOG_LEVEL_DEBUG - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      "Debug" level logging. +
      LOG_LEVEL_ERROR - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      "Error" level logging. +
      LOG_LEVEL_FATAL - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      "Fatal" level logging. +
      LOG_LEVEL_INFO - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      "Info" level logging. +
      LOG_LEVEL_OFF - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Enable no logging levels +
      LOG_LEVEL_TRACE - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      "Trace" level logging. +
      LOG_LEVEL_WARN - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      "Warn" level logging. +
      LOG_PROPERTY - +Static variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The name (org.apache.commons.logging.Log) of the system + property identifying our Log implementation class. +
      LOG_PROPERTY_OLD - +Static variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The deprecated system property used for backwards compatibility with + old versions of JCL. +
      Log - interface org.apache.commons.logging.Log.
      A simple logging interface abstracting logging APIs.
      Log4JLogger - class org.apache.commons.logging.impl.Log4JLogger.
      Implementation of Log that maps directly to a + Logger for log4J version 1.2. +
      Log4JLogger() - +Constructor for class org.apache.commons.logging.impl.Log4JLogger +
        +
      Log4JLogger(String) - +Constructor for class org.apache.commons.logging.impl.Log4JLogger +
      Base constructor. +
      Log4JLogger(Logger) - +Constructor for class org.apache.commons.logging.impl.Log4JLogger +
      For use with a log4j factory. +
      LogConfigurationException - exception org.apache.commons.logging.LogConfigurationException.
      An exception that is thrown only if a suitable LogFactory + or Log instance cannot be created by the corresponding + factory methods.
      LogConfigurationException() - +Constructor for class org.apache.commons.logging.LogConfigurationException +
      Construct a new exception with null as its detail message. +
      LogConfigurationException(String) - +Constructor for class org.apache.commons.logging.LogConfigurationException +
      Construct a new exception with the specified detail message. +
      LogConfigurationException(Throwable) - +Constructor for class org.apache.commons.logging.LogConfigurationException +
      Construct a new exception with the specified cause and a derived + detail message. +
      LogConfigurationException(String, Throwable) - +Constructor for class org.apache.commons.logging.LogConfigurationException +
      Construct a new exception with the specified detail message and cause. +
      LogFactory - class org.apache.commons.logging.LogFactory.
      Factory for creating Log instances, with discovery and + configuration features similar to that employed by standard Java APIs + such as JAXP.
      LogFactory() - +Constructor for class org.apache.commons.logging.LogFactory +
      Protected constructor that is not available for public use. +
      LogFactoryImpl - class org.apache.commons.logging.impl.LogFactoryImpl.
      Concrete subclass of LogFactory that implements the + following algorithm to dynamically select a logging implementation + class to instantiate a wrapper for.
      LogFactoryImpl() - +Constructor for class org.apache.commons.logging.impl.LogFactoryImpl +
      Public no-arguments constructor required by the lookup mechanism. +
      LogKitLogger - class org.apache.commons.logging.impl.LogKitLogger.
      Implementation of org.apache.commons.logging.Log + that wraps the avalon-logkit + logging system.
      LogKitLogger(String) - +Constructor for class org.apache.commons.logging.impl.LogKitLogger +
      Construct LogKitLogger which wraps the LogKit + logger with given name. +
      LogSource - class org.apache.commons.logging.LogSource.
      Deprecated. Use LogFactory instead - The default factory + implementation performs exactly the same algorithm as this class did
      log(int, Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Do the actual logging. + +
      log4jIsAvailable - +Static variable in class org.apache.commons.logging.LogSource +
      Deprecated. Is log4j available (in the current classpath) +
      logConstructor - +Variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The one-argument constructor of the + Log + implementation class that will be used to create new instances. + +
      logConstructorSignature - +Variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The signature of the Constructor to be used. +
      logDiagnostic(String) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Output a diagnostic message to a user-specified destination (if the + user has enabled diagnostic logging). +
      logImplctor - +Static variable in class org.apache.commons.logging.LogSource +
      Deprecated. Constructor for current log class +
      logMethod - +Variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The one-argument setLogFactory method of the selected + Log method, if it exists. +
      logMethodSignature - +Variable in class org.apache.commons.logging.impl.LogFactoryImpl +
      The signature of the setLogFactory method to be used. +
      logName - +Variable in class org.apache.commons.logging.impl.SimpleLog +
      The name of this simple log instance +
      logRawDiagnostic(String) - +Static method in class org.apache.commons.logging.LogFactory +
      Write the specified message to the internal logging destination. +
      logger - +Variable in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      The underlying Logger implementation we are using. +
      logger - +Variable in class org.apache.commons.logging.impl.Jdk14Logger +
      The underlying Logger implementation we are using. +
      logger - +Variable in class org.apache.commons.logging.impl.LogKitLogger +
      Logging goes to this LogKit logger +
      logs - +Static variable in class org.apache.commons.logging.LogSource +
      Deprecated.   +
      +
      +

      +M

      +
      +
      makeNewLogInstance(String) - +Static method in class org.apache.commons.logging.LogSource +
      Deprecated. Create a new Log implementation, based + on the given name. + +
      +
      +

      +N

      +
      +
      NoOpLog - class org.apache.commons.logging.impl.NoOpLog.
      Trivial implementation of Log that throws away all messages.
      NoOpLog() - +Constructor for class org.apache.commons.logging.impl.NoOpLog +
      Convenience constructor +
      NoOpLog(String) - +Constructor for class org.apache.commons.logging.impl.NoOpLog +
      Base constructor +
      name - +Variable in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
        +
      name - +Variable in class org.apache.commons.logging.impl.Jdk14Logger +
      The name of the logger we are wrapping. +
      name - +Variable in class org.apache.commons.logging.impl.LogKitLogger +
      Name of this logger +
      newFactory(String, ClassLoader, ClassLoader) - +Static method in class org.apache.commons.logging.LogFactory +
      Return a new instance of the specified LogFactory + implementation class, loaded by the specified class loader. + +
      newFactory(String, ClassLoader) - +Static method in class org.apache.commons.logging.LogFactory +
      Method provided for backwards compatibility; see newFactory version that + takes 3 parameters. + +
      newInstance(String) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Create and return a new Log + instance for the specified name. +
      nullClassLoaderFactory - +Static variable in class org.apache.commons.logging.LogFactory +
      Prevously constructed LogFactory instance as in the + factories map, but for the case where + getClassLoader returns null. + +
      +
      +

      +O

      +
      +
      objectId(Object) - +Static method in class org.apache.commons.logging.LogFactory +
      Returns a string that uniquely identifies the specified object, including + its class. + +
      org.apache.commons.logging - package org.apache.commons.logging
      Simple wrapper API around multiple logging APIs.
      org.apache.commons.logging.impl - package org.apache.commons.logging.impl
      Concrete implementations of commons-logging wrapper APIs.
      +
      +

      +P

      +
      +
      PRIORITY_KEY - +Static variable in class org.apache.commons.logging.LogFactory +
      The name (priority) of the key in the config file used to + specify the priority of that particular config file. +
      put(Object, Object) - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      putAll(Map) - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      +
      +

      +R

      +
      +
      rehash() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      release() - +Method in class org.apache.commons.logging.LogFactory +
      Release any internal references to previously created Log + instances returned by this factory. +
      release(ClassLoader) - +Static method in class org.apache.commons.logging.LogFactory +
      Release any internal references to previously created LogFactory + instances that have been associated with the specified class loader + (if any), after calling the instance method release() on + each of them. +
      release() - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Release any internal references to previously created + Log + instances returned by this factory. +
      releaseAll() - +Static method in class org.apache.commons.logging.LogFactory +
      Release any internal references to previously created LogFactory + instances, after calling the instance method release() on + each of them. +
      remove(Object) - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      removeAttribute(String) - +Method in class org.apache.commons.logging.LogFactory +
      Remove any configuration attribute associated with the specified name. + +
      removeAttribute(String) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Remove any configuration attribute associated with the specified name. + +
      +
      +

      +S

      +
      +
      SERVICE_ID - +Static variable in class org.apache.commons.logging.LogFactory +
      JDK1.3+ + 'Service Provider' specification. +
      ServletContextCleaner - class org.apache.commons.logging.impl.ServletContextCleaner.
      This class is capable of receiving notifications about the undeployment of + a webapp, and responds by ensuring that commons-logging releases all + memory associated with the undeployed webapp. +
      ServletContextCleaner() - +Constructor for class org.apache.commons.logging.impl.ServletContextCleaner +
        +
      SimpleLog - class org.apache.commons.logging.impl.SimpleLog.
      Simple implementation of Log that sends all enabled log messages, + for all defined loggers, to System.err.
      SimpleLog(String) - +Constructor for class org.apache.commons.logging.impl.SimpleLog +
      Construct a simple log with given name. +
      setAttribute(String, Object) - +Method in class org.apache.commons.logging.LogFactory +
      Set the configuration attribute with the specified name. +
      setAttribute(String, Object) - +Method in class org.apache.commons.logging.impl.LogFactoryImpl +
      Set the configuration attribute with the specified name. +
      setDefaultLogger(Logger) - +Static method in class org.apache.commons.logging.impl.AvalonLogger +
      Sets the ancesteral Avalon logger from which the delegating loggers + will descend. +
      setLevel(int) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Set logging level. +
      setLogImplementation(String) - +Static method in class org.apache.commons.logging.LogSource +
      Deprecated. Set the log implementation/log implementation factory + by the name of the class. +
      setLogImplementation(Class) - +Static method in class org.apache.commons.logging.LogSource +
      Deprecated. Set the log implementation/log implementation factory + by class. +
      showDateTime - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Include the current time in the log message +
      showLogName - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Include the instance name in the log message? +
      showShortName - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Include the short name ( last component ) of the logger in the log + message. +
      simpleLogProps - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      Properties loaded from simplelog.properties +
      size() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      systemPrefix - +Static variable in class org.apache.commons.logging.impl.SimpleLog +
      All system properties used by SimpleLog start with this +
      +
      +

      +T

      +
      +
      TCCL_KEY - +Static variable in class org.apache.commons.logging.LogFactory +
      The name (use_tccl) of the key in the config file used + to specify whether logging classes should be loaded via the thread + context class loader (TCCL), or not. +
      toString() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      trace(Object) - +Method in interface org.apache.commons.logging.Log +
      Log a message with trace log level. +
      trace(Object, Throwable) - +Method in interface org.apache.commons.logging.Log +
      Log an error with trace log level. +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +
      trace(Object) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +
      trace(Object) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.FINEST. +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.FINEST. +
      trace(Object) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.FINEST. +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.FINEST. +
      trace(Object) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.TRACE. + +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.TRACE. + +
      trace(Object) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.DEBUG. +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.DEBUG. +
      trace(Object) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      trace(Object) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE. +
      trace(Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE. +
      +
      +

      +V

      +
      +
      values() - +Method in class org.apache.commons.logging.impl.WeakHashtable +
        +
      +
      +

      +W

      +
      +
      WeakHashtable - class org.apache.commons.logging.impl.WeakHashtable.
      Implementation of Hashtable that uses WeakReference's + to hold its keys thus allowing them to be reclaimed by the garbage collector. +
      WeakHashtable() - +Constructor for class org.apache.commons.logging.impl.WeakHashtable +
      Constructs a WeakHashtable with the Hashtable default + capacity and load factor. +
      warn(Object) - +Method in interface org.apache.commons.logging.Log +
      Log a message with warn log level. +
      warn(Object, Throwable) - +Method in interface org.apache.commons.logging.Log +
      Log an error with warn log level. +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.warn. +
      warn(Object) - +Method in class org.apache.commons.logging.impl.AvalonLogger +
      Logs a message with + org.apache.avalon.framework.logger.Logger.warn. +
      warn(Object) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.WARNING. +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk13LumberjackLogger +
      Logs a message with java.util.logging.Level.WARNING. +
      warn(Object) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.WARNING. +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Jdk14Logger +
      Logs a message with java.util.logging.Level.WARNING. +
      warn(Object) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.WARN. +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.Log4JLogger +
      Logs a message with org.apache.log4j.Priority.WARN. +
      warn(Object) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.WARN. +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.LogKitLogger +
      Logs a message with org.apache.log.Priority.WARN. +
      warn(Object) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.NoOpLog +
      Do nothing +
      warn(Object) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN. +
      warn(Object, Throwable) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN. +
      write(StringBuffer) - +Method in class org.apache.commons.logging.impl.SimpleLog +
      Write the content of the message accumulated in the specified + StringBuffer to the appropriate output destination. +
      +
      +A C D E F G H I J K L M N O P R S T V W + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index.html new file mode 100644 index 0000000..d2ac4e5 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/index.html @@ -0,0 +1,27 @@ + + + + + + + +Commons Logging 1.1.1 API + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/options b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/options new file mode 100644 index 0000000..f542d05 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/options @@ -0,0 +1,16 @@ +-classpath 'G:/apache/commons/logging/target/checkout/target/classes;C:/Documents and Settings/dlg01/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar;C:/Documents and Settings/dlg01/.m2/repository/log4j/log4j/1.2.12/log4j-1.2.12.jar;C:/Documents and Settings/dlg01/.m2/repository/logkit/logkit/1.0.1/logkit-1.0.1.jar;C:/Documents and Settings/dlg01/.m2/repository/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar' -protected +-sourcepath +'G:/apache/commons/logging/target/checkout/src/java' +-author +-bottom +'Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved.' +-charset +'ISO-8859-1' +-d +'G:/apache/commons/logging/target/checkout/target/site/apidocs' +-doctitle +'Commons Logging 1.1.1 API' +-use +-version +-windowtitle +'Commons Logging 1.1.1 API' \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/Log.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/Log.html new file mode 100644 index 0000000..ca56b30 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/Log.html @@ -0,0 +1,662 @@ + + + + + + + +Log (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging +
      +Interface Log

      +
      +
      All Known Implementing Classes:
      AvalonLogger, Jdk13LumberjackLogger, Jdk14Logger, Log4JLogger, LogKitLogger, NoOpLog, SimpleLog
      +
      +
      +
      +
      public interface Log
      + +

      +

      A simple logging interface abstracting logging APIs. In order to be + instantiated successfully by LogFactory, classes that implement + this interface must have a constructor that takes a single String + parameter representing the "name" of this Log.

      + +

      The six logging levels used by Log are (in order): +

        +
      1. trace (the least serious)
      2. +
      3. debug
      4. +
      5. info
      6. +
      7. warn
      8. +
      9. error
      10. +
      11. fatal (the most serious)
      12. +
      + The mapping of these log levels to the concepts used by the underlying + logging system is implementation dependent. + The implemention should ensure, though, that this ordering behaves + as expected.

      + +

      Performance is often a logging concern. + By examining the appropriate property, + a component can avoid expensive operations (producing information + to be logged).

      + +

      For example, +

      +    if (log.isDebugEnabled()) {
      +        ... do something expensive ...
      +        log.debug(theResult);
      +    }
      + 
      +

      + +

      Configuration of the underlying logging system will generally be done + external to the Logging APIs, through whatever mechanism is supported by + that system.

      +

      + +

      +

      +
      Version:
      +
      $Id: Log.java 424107 2006-07-20 23:15:42Z skitching $
      +
      Author:
      +
      Scott Sanders, Rod Waldhoff
      +
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +           Log a message with debug log level.
      + voiddebug(java.lang.Object message, + java.lang.Throwable t) + +
      +           Log an error with debug log level.
      + voiderror(java.lang.Object message) + +
      +           Log a message with error log level.
      + voiderror(java.lang.Object message, + java.lang.Throwable t) + +
      +           Log an error with error log level.
      + voidfatal(java.lang.Object message) + +
      +           Log a message with fatal log level.
      + voidfatal(java.lang.Object message, + java.lang.Throwable t) + +
      +           Log an error with fatal log level.
      + voidinfo(java.lang.Object message) + +
      +           Log a message with info log level.
      + voidinfo(java.lang.Object message, + java.lang.Throwable t) + +
      +           Log an error with info log level.
      + booleanisDebugEnabled() + +
      +           Is debug logging currently enabled?
      + booleanisErrorEnabled() + +
      +           Is error logging currently enabled?
      + booleanisFatalEnabled() + +
      +           Is fatal logging currently enabled?
      + booleanisInfoEnabled() + +
      +           Is info logging currently enabled?
      + booleanisTraceEnabled() + +
      +           Is trace logging currently enabled?
      + booleanisWarnEnabled() + +
      +           Is warn logging currently enabled?
      + voidtrace(java.lang.Object message) + +
      +           Log a message with trace log level.
      + voidtrace(java.lang.Object message, + java.lang.Throwable t) + +
      +           Log an error with trace log level.
      + voidwarn(java.lang.Object message) + +
      +           Log a message with warn log level.
      + voidwarn(java.lang.Object message, + java.lang.Throwable t) + +
      +           Log an error with warn log level.
      +  +

      + + + + + + + + + + + + + + +
      +Method Detail
      + +

      +isDebugEnabled

      +
      +public boolean isDebugEnabled()
      +
      +

      Is debug logging currently enabled?

      + +

      Call this method to prevent having to perform expensive operations + (for example, String concatenation) + when the log level is more than debug.

      +

      +

      + +
      Returns:
      true if debug is enabled in the underlying logger.
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public boolean isErrorEnabled()
      +
      +

      Is error logging currently enabled?

      + +

      Call this method to prevent having to perform expensive operations + (for example, String concatenation) + when the log level is more than error.

      +

      +

      + +
      Returns:
      true if error is enabled in the underlying logger.
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public boolean isFatalEnabled()
      +
      +

      Is fatal logging currently enabled?

      + +

      Call this method to prevent having to perform expensive operations + (for example, String concatenation) + when the log level is more than fatal.

      +

      +

      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public boolean isInfoEnabled()
      +
      +

      Is info logging currently enabled?

      + +

      Call this method to prevent having to perform expensive operations + (for example, String concatenation) + when the log level is more than info.

      +

      +

      + +
      Returns:
      true if info is enabled in the underlying logger.
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public boolean isTraceEnabled()
      +
      +

      Is trace logging currently enabled?

      + +

      Call this method to prevent having to perform expensive operations + (for example, String concatenation) + when the log level is more than trace.

      +

      +

      + +
      Returns:
      true if trace is enabled in the underlying logger.
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public boolean isWarnEnabled()
      +
      +

      Is warn logging currently enabled?

      + +

      Call this method to prevent having to perform expensive operations + (for example, String concatenation) + when the log level is more than warn.

      +

      +

      + +
      Returns:
      true if warn is enabled in the underlying logger.
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +

      Log a message with trace log level.

      +

      +

      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +

      Log an error with trace log level.

      +

      +

      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +

      Log a message with debug log level.

      +

      +

      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +

      Log an error with debug log level.

      +

      +

      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +

      Log a message with info log level.

      +

      +

      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +

      Log an error with info log level.

      +

      +

      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +

      Log a message with warn log level.

      +

      +

      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +

      Log an error with warn log level.

      +

      +

      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +

      Log a message with error log level.

      +

      +

      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +

      Log an error with error log level.

      +

      +

      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +

      Log a message with fatal log level.

      +

      +

      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +

      Log an error with fatal log level.

      +

      +

      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogConfigurationException.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogConfigurationException.html new file mode 100644 index 0000000..4d73aaf --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogConfigurationException.html @@ -0,0 +1,369 @@ + + + + + + + +LogConfigurationException (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging +
      +Class LogConfigurationException

      +
      +java.lang.Object
      +  extended byjava.lang.Throwable
      +      extended byjava.lang.Exception
      +          extended byjava.lang.RuntimeException
      +              extended byorg.apache.commons.logging.LogConfigurationException
      +
      +
      +
      All Implemented Interfaces:
      java.io.Serializable
      +
      +
      +
      +
      public class LogConfigurationException
      extends java.lang.RuntimeException
      + +

      +

      An exception that is thrown only if a suitable LogFactory + or Log instance cannot be created by the corresponding + factory methods.

      +

      + +

      +

      +
      Version:
      +
      $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +
      Author:
      +
      Craig R. McClanahan
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + +
      +Field Summary
      +protected  java.lang.Throwablecause + +
      +          The underlying cause of this exception.
      +  + + + + + + + + + + + + + + + + + + + +
      +Constructor Summary
      LogConfigurationException() + +
      +          Construct a new exception with null as its detail message.
      LogConfigurationException(java.lang.String message) + +
      +          Construct a new exception with the specified detail message.
      LogConfigurationException(java.lang.String message, + java.lang.Throwable cause) + +
      +          Construct a new exception with the specified detail message and cause.
      LogConfigurationException(java.lang.Throwable cause) + +
      +          Construct a new exception with the specified cause and a derived + detail message.
      +  + + + + + + + + + + + +
      +Method Summary
      + java.lang.ThrowablegetCause() + +
      +          Return the underlying cause of this exception (if any).
      + + + + + + + +
      Methods inherited from class java.lang.Throwable
      fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +cause

      +
      +protected java.lang.Throwable cause
      +
      +
      The underlying cause of this exception. +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +LogConfigurationException

      +
      +public LogConfigurationException()
      +
      +
      Construct a new exception with null as its detail message. +

      +

      +
      + +

      +LogConfigurationException

      +
      +public LogConfigurationException(java.lang.String message)
      +
      +
      Construct a new exception with the specified detail message. +

      +

      Parameters:
      message - The detail message
      +
      + +

      +LogConfigurationException

      +
      +public LogConfigurationException(java.lang.Throwable cause)
      +
      +
      Construct a new exception with the specified cause and a derived + detail message. +

      +

      Parameters:
      cause - The underlying cause
      +
      + +

      +LogConfigurationException

      +
      +public LogConfigurationException(java.lang.String message,
      +                                 java.lang.Throwable cause)
      +
      +
      Construct a new exception with the specified detail message and cause. +

      +

      Parameters:
      message - The detail message
      cause - The underlying cause
      + + + + + + + + +
      +Method Detail
      + +

      +getCause

      +
      +public java.lang.Throwable getCause()
      +
      +
      Return the underlying cause of this exception (if any). +

      +

      +
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogFactory.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogFactory.html new file mode 100644 index 0000000..267d27c --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogFactory.html @@ -0,0 +1,1246 @@ + + + + + + + +LogFactory (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging +
      +Class LogFactory

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.LogFactory
      +
      +
      +
      Direct Known Subclasses:
      LogFactoryImpl
      +
      +
      +
      +
      public abstract class LogFactory
      extends java.lang.Object
      + +

      +

      Factory for creating Log instances, with discovery and + configuration features similar to that employed by standard Java APIs + such as JAXP.

      + +

      IMPLEMENTATION NOTE - This implementation is heavily + based on the SAXParserFactory and DocumentBuilderFactory implementations + (corresponding to the JAXP pluggability APIs) found in Apache Xerces.

      +

      + +

      +

      +
      Version:
      +
      $Revision: 593798 $ $Date: 2007-11-10 18:40:43 +0100 $
      +
      Author:
      +
      Craig R. McClanahan, Costin Manolache, Richard A. Sitze
      +
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +static java.lang.StringDIAGNOSTICS_DEST_PROPERTY + +
      +          The name (org.apache.commons.logging.diagnostics.dest) + of the property used to enable internal commons-logging + diagnostic output, in order to get information on what logging + implementations are being discovered, what classloaders they + are loaded through, etc. +
      +protected static java.util.Hashtablefactories + +
      +          The previously constructed LogFactory instances, keyed by + the ClassLoader with which it was created.
      +static java.lang.StringFACTORY_DEFAULT + +
      +          The fully qualified class name of the fallback LogFactory + implementation class to use, if no other can be found.
      +static java.lang.StringFACTORY_PROPERTIES + +
      +          The name (commons-logging.properties) of the properties file to search for.
      +static java.lang.StringFACTORY_PROPERTY + +
      +          The name (org.apache.commons.logging.LogFactory) of the property + used to identify the LogFactory implementation + class name.
      +static java.lang.StringHASHTABLE_IMPLEMENTATION_PROPERTY + +
      +          Setting this system property + (org.apache.commons.logging.LogFactory.HashtableImpl) + value allows the Hashtable used to store + classloaders to be substituted by an alternative implementation. +
      +protected static LogFactorynullClassLoaderFactory + +
      +          Prevously constructed LogFactory instance as in the + factories map, but for the case where + getClassLoader returns null. +
      +static java.lang.StringPRIORITY_KEY + +
      +          The name (priority) of the key in the config file used to + specify the priority of that particular config file.
      +protected static java.lang.StringSERVICE_ID + +
      +          JDK1.3+ + 'Service Provider' specification.
      +static java.lang.StringTCCL_KEY + +
      +          The name (use_tccl) of the key in the config file used + to specify whether logging classes should be loaded via the thread + context class loader (TCCL), or not.
      +  + + + + + + + + + + + +
      +Constructor Summary
      +protected LogFactory() + +
      +          Protected constructor that is not available for public use.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      +protected static java.lang.ObjectcreateFactory(java.lang.String factoryClass, + java.lang.ClassLoader classLoader) + +
      +          Implements the operations described in the javadoc for newFactory.
      +protected static java.lang.ClassLoaderdirectGetContextClassLoader() + +
      +          Return the thread context class loader if available; otherwise return + null. +
      +abstract  java.lang.ObjectgetAttribute(java.lang.String name) + +
      +          Return the configuration attribute with the specified name (if any), + or null if there is no such attribute.
      +abstract  java.lang.String[]getAttributeNames() + +
      +          Return an array containing the names of all currently defined + configuration attributes.
      +protected static java.lang.ClassLoadergetClassLoader(java.lang.Class clazz) + +
      +          Safely get access to the classloader for the specified class. +
      +protected static java.lang.ClassLoadergetContextClassLoader() + +
      +          Returns the current context classloader. +
      +static LogFactorygetFactory() + +
      +          Construct (if necessary) and return a LogFactory + instance, using the following ordered lookup procedure to determine + the name of the implementation class to be loaded.
      +abstract  LoggetInstance(java.lang.Class clazz) + +
      +          Convenience method to derive a name from the specified class and + call getInstance(String) with it.
      +abstract  LoggetInstance(java.lang.String name) + +
      +          Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.
      +static LoggetLog(java.lang.Class clazz) + +
      +          Convenience method to return a named logger, without the application + having to care about factories.
      +static LoggetLog(java.lang.String name) + +
      +          Convenience method to return a named logger, without the application + having to care about factories.
      +protected static booleanisDiagnosticsEnabled() + +
      +          Indicates true if the user has enabled internal logging. +
      +protected static voidlogRawDiagnostic(java.lang.String msg) + +
      +          Write the specified message to the internal logging destination.
      +protected static LogFactorynewFactory(java.lang.String factoryClass, + java.lang.ClassLoader classLoader) + +
      +          Method provided for backwards compatibility; see newFactory version that + takes 3 parameters. +
      +protected static LogFactorynewFactory(java.lang.String factoryClass, + java.lang.ClassLoader classLoader, + java.lang.ClassLoader contextClassLoader) + +
      +          Return a new instance of the specified LogFactory + implementation class, loaded by the specified class loader. +
      +static java.lang.StringobjectId(java.lang.Object o) + +
      +          Returns a string that uniquely identifies the specified object, including + its class. +
      +abstract  voidrelease() + +
      +          Release any internal references to previously created Log + instances returned by this factory.
      +static voidrelease(java.lang.ClassLoader classLoader) + +
      +          Release any internal references to previously created LogFactory + instances that have been associated with the specified class loader + (if any), after calling the instance method release() on + each of them.
      +static voidreleaseAll() + +
      +          Release any internal references to previously created LogFactory + instances, after calling the instance method release() on + each of them.
      +abstract  voidremoveAttribute(java.lang.String name) + +
      +          Remove any configuration attribute associated with the specified name. +
      +abstract  voidsetAttribute(java.lang.String name, + java.lang.Object value) + +
      +          Set the configuration attribute with the specified name.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +PRIORITY_KEY

      +
      +public static final java.lang.String PRIORITY_KEY
      +
      +
      The name (priority) of the key in the config file used to + specify the priority of that particular config file. The associated value + is a floating-point number; higher values take priority over lower values. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +TCCL_KEY

      +
      +public static final java.lang.String TCCL_KEY
      +
      +
      The name (use_tccl) of the key in the config file used + to specify whether logging classes should be loaded via the thread + context class loader (TCCL), or not. By default, the TCCL is used. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +FACTORY_PROPERTY

      +
      +public static final java.lang.String FACTORY_PROPERTY
      +
      +
      The name (org.apache.commons.logging.LogFactory) of the property + used to identify the LogFactory implementation + class name. This can be used as a system property, or as an entry in a + configuration properties file. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +FACTORY_DEFAULT

      +
      +public static final java.lang.String FACTORY_DEFAULT
      +
      +
      The fully qualified class name of the fallback LogFactory + implementation class to use, if no other can be found. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +FACTORY_PROPERTIES

      +
      +public static final java.lang.String FACTORY_PROPERTIES
      +
      +
      The name (commons-logging.properties) of the properties file to search for. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +SERVICE_ID

      +
      +protected static final java.lang.String SERVICE_ID
      +
      +
      JDK1.3+ + 'Service Provider' specification. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +DIAGNOSTICS_DEST_PROPERTY

      +
      +public static final java.lang.String DIAGNOSTICS_DEST_PROPERTY
      +
      +
      The name (org.apache.commons.logging.diagnostics.dest) + of the property used to enable internal commons-logging + diagnostic output, in order to get information on what logging + implementations are being discovered, what classloaders they + are loaded through, etc. +

      + If a system property of this name is set then the value is + assumed to be the name of a file. The special strings + STDOUT or STDERR (case-sensitive) indicate output to + System.out and System.err respectively. +

      + Diagnostic logging should be used only to debug problematic + configurations and should not be set in normal production use. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +HASHTABLE_IMPLEMENTATION_PROPERTY

      +
      +public static final java.lang.String HASHTABLE_IMPLEMENTATION_PROPERTY
      +
      +

      Setting this system property + (org.apache.commons.logging.LogFactory.HashtableImpl) + value allows the Hashtable used to store + classloaders to be substituted by an alternative implementation. +

      +

      + Note: LogFactory will print: +

      + [ERROR] LogFactory: Load of custom hashtable failed
      + 
      + to system error and then continue using a standard Hashtable. +

      +

      + Usage: Set this property when Java is invoked + and LogFactory will attempt to load a new instance + of the given implementation class. + For example, running the following ant scriplet: +

      +  <java classname="${test.runner}" fork="yes" failonerror="${test.failonerror}">
      +     ...
      +     <sysproperty 
      +        key="org.apache.commons.logging.LogFactory.HashtableImpl"
      +        value="org.apache.commons.logging.AltHashtable"/>
      +  </java>
      + 
      + will mean that LogFactory will load an instance of + org.apache.commons.logging.AltHashtable. +

      +

      + A typical use case is to allow a custom + Hashtable implementation using weak references to be substituted. + This will allow classloaders to be garbage collected without + the need to release them (on 1.3+ JVMs only, of course ;) +

      +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +factories

      +
      +protected static java.util.Hashtable factories
      +
      +
      The previously constructed LogFactory instances, keyed by + the ClassLoader with which it was created. +

      +

      +
      +
      +
      + +

      +nullClassLoaderFactory

      +
      +protected static LogFactory nullClassLoaderFactory
      +
      +
      Prevously constructed LogFactory instance as in the + factories map, but for the case where + getClassLoader returns null. + This can happen when: +
        +
      • using JDK1.1 and the calling code is loaded via the system + classloader (very common)
      • +
      • using JDK1.2+ and the calling code is loaded via the boot + classloader (only likely for embedded systems work).
      • +
      + Note that factories is a Hashtable (not a HashMap), + and hashtables don't allow null as a key. +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +LogFactory

      +
      +protected LogFactory()
      +
      +
      Protected constructor that is not available for public use. +

      +

      + + + + + + + + +
      +Method Detail
      + +

      +getAttribute

      +
      +public abstract java.lang.Object getAttribute(java.lang.String name)
      +
      +
      Return the configuration attribute with the specified name (if any), + or null if there is no such attribute. +

      +

      +
      Parameters:
      name - Name of the attribute to return
      +
      +
      +
      + +

      +getAttributeNames

      +
      +public abstract java.lang.String[] getAttributeNames()
      +
      +
      Return an array containing the names of all currently defined + configuration attributes. If there are no such attributes, a zero + length array is returned. +

      +

      +
      +
      +
      +
      + +

      +getInstance

      +
      +public abstract Log getInstance(java.lang.Class clazz)
      +                         throws LogConfigurationException
      +
      +
      Convenience method to derive a name from the specified class and + call getInstance(String) with it. +

      +

      +
      Parameters:
      clazz - Class for which a suitable Log name will be derived +
      Throws: +
      LogConfigurationException - if a suitable Log + instance cannot be returned
      +
      +
      +
      + +

      +getInstance

      +
      +public abstract Log getInstance(java.lang.String name)
      +                         throws LogConfigurationException
      +
      +

      Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.

      + +

      NOTE - Depending upon the implementation of + the LogFactory you are using, the Log + instance you are returned may or may not be local to the current + application, and may or may not be returned again on a subsequent + call with the same name argument.

      +

      +

      +
      Parameters:
      name - Logical name of the Log instance to be + returned (the meaning of this name is only known to the underlying + logging implementation that is being wrapped) +
      Throws: +
      LogConfigurationException - if a suitable Log + instance cannot be returned
      +
      +
      +
      + +

      +release

      +
      +public abstract void release()
      +
      +
      Release any internal references to previously created Log + instances returned by this factory. This is useful in environments + like servlet containers, which implement application reloading by + throwing away a ClassLoader. Dangling references to objects in that + class loader would prevent garbage collection. +

      +

      +
      +
      +
      +
      + +

      +removeAttribute

      +
      +public abstract void removeAttribute(java.lang.String name)
      +
      +
      Remove any configuration attribute associated with the specified name. + If there is no such attribute, no action is taken. +

      +

      +
      Parameters:
      name - Name of the attribute to remove
      +
      +
      +
      + +

      +setAttribute

      +
      +public abstract void setAttribute(java.lang.String name,
      +                                  java.lang.Object value)
      +
      +
      Set the configuration attribute with the specified name. Calling + this with a null value is equivalent to calling + removeAttribute(name). +

      +

      +
      Parameters:
      name - Name of the attribute to set
      value - Value of the attribute to set, or null + to remove any setting for this attribute
      +
      +
      +
      + +

      +getFactory

      +
      +public static LogFactory getFactory()
      +                             throws LogConfigurationException
      +
      +

      Construct (if necessary) and return a LogFactory + instance, using the following ordered lookup procedure to determine + the name of the implementation class to be loaded.

      +
        +
      • The org.apache.commons.logging.LogFactory system + property.
      • +
      • The JDK 1.3 Service Discovery mechanism
      • +
      • Use the properties file commons-logging.properties + file, if found in the class path of this class. The configuration + file is in standard java.util.Properties format and + contains the fully qualified name of the implementation class + with the key being the system property defined above.
      • +
      • Fall back to a default implementation class + (org.apache.commons.logging.impl.LogFactoryImpl).
      • +
      + +

      NOTE - If the properties file method of identifying the + LogFactory implementation class is utilized, all of the + properties defined in this file will be set as configuration attributes + on the corresponding LogFactory instance.

      + +

      NOTE - In a multithreaded environment it is possible + that two different instances will be returned for the same + classloader environment. +

      +

      +

      + +
      Throws: +
      LogConfigurationException - if the implementation class is not + available or cannot be instantiated.
      +
      +
      +
      + +

      +getLog

      +
      +public static Log getLog(java.lang.Class clazz)
      +                  throws LogConfigurationException
      +
      +
      Convenience method to return a named logger, without the application + having to care about factories. +

      +

      +
      Parameters:
      clazz - Class from which a log name will be derived +
      Throws: +
      LogConfigurationException - if a suitable Log + instance cannot be returned
      +
      +
      +
      + +

      +getLog

      +
      +public static Log getLog(java.lang.String name)
      +                  throws LogConfigurationException
      +
      +
      Convenience method to return a named logger, without the application + having to care about factories. +

      +

      +
      Parameters:
      name - Logical name of the Log instance to be + returned (the meaning of this name is only known to the underlying + logging implementation that is being wrapped) +
      Throws: +
      LogConfigurationException - if a suitable Log + instance cannot be returned
      +
      +
      +
      + +

      +release

      +
      +public static void release(java.lang.ClassLoader classLoader)
      +
      +
      Release any internal references to previously created LogFactory + instances that have been associated with the specified class loader + (if any), after calling the instance method release() on + each of them. +

      +

      +
      Parameters:
      classLoader - ClassLoader for which to release the LogFactory
      +
      +
      +
      + +

      +releaseAll

      +
      +public static void releaseAll()
      +
      +
      Release any internal references to previously created LogFactory + instances, after calling the instance method release() on + each of them. This is useful in environments like servlet containers, + which implement application reloading by throwing away a ClassLoader. + Dangling references to objects in that class loader would prevent + garbage collection. +

      +

      +
      +
      +
      +
      + +

      +getClassLoader

      +
      +protected static java.lang.ClassLoader getClassLoader(java.lang.Class clazz)
      +
      +
      Safely get access to the classloader for the specified class. +

      + Theoretically, calling getClassLoader can throw a security exception, + and so should be done under an AccessController in order to provide + maximum flexibility. However in practice people don't appear to use + security policies that forbid getClassLoader calls. So for the moment + all code is written to call this method rather than Class.getClassLoader, + so that we could put AccessController stuff in this method without any + disruption later if we need to. +

      + Even when using an AccessController, however, this method can still + throw SecurityException. Commons-logging basically relies on the + ability to access classloaders, ie a policy that forbids all + classloader access will also prevent commons-logging from working: + currently this method will throw an exception preventing the entire app + from starting up. Maybe it would be good to detect this situation and + just disable all commons-logging? Not high priority though - as stated + above, security policies that prevent classloader access aren't common. +

      + Note that returning an object fetched via an AccessController would + technically be a security flaw anyway; untrusted code that has access + to a trusted JCL library could use it to fetch the classloader for + a class even when forbidden to do so directly. +

      +

      +
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +getContextClassLoader

      +
      +protected static java.lang.ClassLoader getContextClassLoader()
      +                                                      throws LogConfigurationException
      +
      +
      Returns the current context classloader. +

      + In versions prior to 1.1, this method did not use an AccessController. + In version 1.1, an AccessController wrapper was incorrectly added to + this method, causing a minor security flaw. +

      + In version 1.1.1 this change was reverted; this method no longer uses + an AccessController. User code wishing to obtain the context classloader + must invoke this method via AccessController.doPrivileged if it needs + support for that. +

      +

      + +
      Returns:
      the context classloader associated with the current thread, + or null if security doesn't allow it. +
      Throws: +
      LogConfigurationException - if there was some weird error while + attempting to get the context classloader. +
      java.lang.SecurityException - if the current java security policy doesn't + allow this class to access the context classloader.
      +
      +
      +
      + +

      +directGetContextClassLoader

      +
      +protected static java.lang.ClassLoader directGetContextClassLoader()
      +                                                            throws LogConfigurationException
      +
      +
      Return the thread context class loader if available; otherwise return + null. +

      + Most/all code should call getContextClassLoaderInternal rather than + calling this method directly. +

      + The thread context class loader is available for JDK 1.2 + or later, if certain security conditions are met. +

      + Note that no internal logging is done within this method because + this method is called every time LogFactory.getLogger() is called, + and we don't want too much output generated here. +

      +

      + +
      Throws: +
      LogConfigurationException - if a suitable class loader + cannot be identified. +
      java.lang.SecurityException - if the java security policy forbids + access to the context classloader from one of the classes in the + current call stack.
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +newFactory

      +
      +protected static LogFactory newFactory(java.lang.String factoryClass,
      +                                       java.lang.ClassLoader classLoader,
      +                                       java.lang.ClassLoader contextClassLoader)
      +                                throws LogConfigurationException
      +
      +
      Return a new instance of the specified LogFactory + implementation class, loaded by the specified class loader. + If that fails, try the class loader used to load this + (abstract) LogFactory. +

      +

      ClassLoader conflicts

      + Note that there can be problems if the specified ClassLoader is not the + same as the classloader that loaded this class, ie when loading a + concrete LogFactory subclass via a context classloader. +

      + The problem is the same one that can occur when loading a concrete Log + subclass via a context classloader. +

      + The problem occurs when code running in the context classloader calls + class X which was loaded via a parent classloader, and class X then calls + LogFactory.getFactory (either directly or via LogFactory.getLog). Because + class X was loaded via the parent, it binds to LogFactory loaded via + the parent. When the code in this method finds some LogFactoryYYYY + class in the child (context) classloader, and there also happens to be a + LogFactory class defined in the child classloader, then LogFactoryYYYY + will be bound to LogFactory@childloader. It cannot be cast to + LogFactory@parentloader, ie this method cannot return the object as + the desired type. Note that it doesn't matter if the LogFactory class + in the child classloader is identical to the LogFactory class in the + parent classloader, they are not compatible. +

      + The solution taken here is to simply print out an error message when + this occurs then throw an exception. The deployer of the application + must ensure they remove all occurrences of the LogFactory class from + the child classloader in order to resolve the issue. Note that they + do not have to move the custom LogFactory subclass; that is ok as + long as the only LogFactory class it can find to bind to is in the + parent classloader. +

      +

      +

      +
      Parameters:
      factoryClass - Fully qualified name of the LogFactory + implementation class
      classLoader - ClassLoader from which to load this class
      contextClassLoader - is the context that this new factory will + manage logging for. +
      Throws: +
      LogConfigurationException - if a suitable instance + cannot be created
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +newFactory

      +
      +protected static LogFactory newFactory(java.lang.String factoryClass,
      +                                       java.lang.ClassLoader classLoader)
      +
      +
      Method provided for backwards compatibility; see newFactory version that + takes 3 parameters. +

      + This method would only ever be called in some rather odd situation. + Note that this method is static, so overriding in a subclass doesn't + have any effect unless this method is called from a method in that + subclass. However this method only makes sense to use from the + getFactory method, and as that is almost always invoked via + LogFactory.getFactory, any custom definition in a subclass would be + pointless. Only a class with a custom getFactory method, then invoked + directly via CustomFactoryImpl.getFactory or similar would ever call + this. Anyway, it's here just in case, though the "managed class loader" + value output to the diagnostics will not report the correct value. +

      +

      +
      +
      +
      +
      + +

      +createFactory

      +
      +protected static java.lang.Object createFactory(java.lang.String factoryClass,
      +                                                java.lang.ClassLoader classLoader)
      +
      +
      Implements the operations described in the javadoc for newFactory. +

      +

      +
      Parameters:
      factoryClass -
      classLoader - used to load the specified factory class. This is + expected to be either the TCCL or the classloader which loaded this + class. Note that the classloader which loaded this class might be + "null" (ie the bootloader) for embedded systems. +
      Returns:
      either a LogFactory object or a LogConfigurationException object.
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +isDiagnosticsEnabled

      +
      +protected static boolean isDiagnosticsEnabled()
      +
      +
      Indicates true if the user has enabled internal logging. +

      + By the way, sorry for the incorrect grammar, but calling this method + areDiagnosticsEnabled just isn't java beans style. +

      +

      + +
      Returns:
      true if calls to logDiagnostic will have any effect.
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +logRawDiagnostic

      +
      +protected static final void logRawDiagnostic(java.lang.String msg)
      +
      +
      Write the specified message to the internal logging destination. +

      +

      +
      Parameters:
      msg - is the diagnostic message to be output.
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +objectId

      +
      +public static java.lang.String objectId(java.lang.Object o)
      +
      +
      Returns a string that uniquely identifies the specified object, including + its class. +

      + The returned string is of form "classname@hashcode", ie is the same as + the return value of the Object.toString() method, but works even when + the specified object's class has overidden the toString method. +

      +

      +
      Parameters:
      o - may be null. +
      Returns:
      a string of form classname@hashcode, or "null" if param o is null.
      Since:
      +
      1.1
      +
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogSource.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogSource.html new file mode 100644 index 0000000..306594d --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/LogSource.html @@ -0,0 +1,511 @@ + + + + + + + +LogSource (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging +
      +Class LogSource

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.LogSource
      +
      +
      +Deprecated. Use LogFactory instead - The default factory + implementation performs exactly the same algorithm as this class did +

      +

      +
      public class LogSource
      extends java.lang.Object
      + +

      +

      Factory for creating Log instances. Applications should call + the makeNewLogInstance() method to instantiate new instances + of the configured Log implementation class.

      + +

      By default, calling getInstance() will use the following + algorithm:

      +
        +
      • If Log4J is available, return an instance of + org.apache.commons.logging.impl.Log4JLogger.
      • +
      • If JDK 1.4 or later is available, return an instance of + org.apache.commons.logging.impl.Jdk14Logger.
      • +
      • Otherwise, return an instance of + org.apache.commons.logging.impl.NoOpLog.
      • +
      + +

      You can change the default behavior in one of two ways:

      +
        +
      • On the startup command line, set the system property + org.apache.commons.logging.log to the name of the + org.apache.commons.logging.Log implementation class + you want to use.
      • +
      • At runtime, call LogSource.setLogImplementation().
      • +
      +

      + +

      +

      +
      Version:
      +
      $Id: LogSource.java 424107 2006-07-20 23:15:42Z skitching $
      +
      Author:
      +
      Rod Waldhoff
      +
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +protected static booleanjdk14IsAvailable + +
      +          Deprecated. Is JDK 1.4 logging available
      +protected static booleanlog4jIsAvailable + +
      +          Deprecated. Is log4j available (in the current classpath)
      +protected static java.lang.reflect.ConstructorlogImplctor + +
      +          Deprecated. Constructor for current log class
      +protected static java.util.Hashtablelogs + +
      +          Deprecated.  
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      +static LoggetInstance(java.lang.Class clazz) + +
      +          Deprecated. Get a Log instance by class
      +static LoggetInstance(java.lang.String name) + +
      +          Deprecated. Get a Log instance by class name
      +static java.lang.String[]getLogNames() + +
      +          Deprecated. Returns a String array containing the names of + all logs known to me.
      +static LogmakeNewLogInstance(java.lang.String name) + +
      +          Deprecated. Create a new Log implementation, based + on the given name. +
      +static voidsetLogImplementation(java.lang.Class logclass) + +
      +          Deprecated. Set the log implementation/log implementation factory + by class.
      +static voidsetLogImplementation(java.lang.String classname) + +
      +          Deprecated. Set the log implementation/log implementation factory + by the name of the class.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +logs

      +
      +protected static java.util.Hashtable logs
      +
      +
      Deprecated. 
      +
      +
      +
      + +

      +log4jIsAvailable

      +
      +protected static boolean log4jIsAvailable
      +
      +
      Deprecated. 
      Is log4j available (in the current classpath) +

      +

      +
      +
      +
      + +

      +jdk14IsAvailable

      +
      +protected static boolean jdk14IsAvailable
      +
      +
      Deprecated. 
      Is JDK 1.4 logging available +

      +

      +
      +
      +
      + +

      +logImplctor

      +
      +protected static java.lang.reflect.Constructor logImplctor
      +
      +
      Deprecated. 
      Constructor for current log class +

      +

      +
      +
      + + + + + + + + + + + +
      +Method Detail
      + +

      +setLogImplementation

      +
      +public static void setLogImplementation(java.lang.String classname)
      +                                 throws java.lang.LinkageError,
      +                                        java.lang.ExceptionInInitializerError,
      +                                        java.lang.NoSuchMethodException,
      +                                        java.lang.SecurityException,
      +                                        java.lang.ClassNotFoundException
      +
      +
      Deprecated. 
      Set the log implementation/log implementation factory + by the name of the class. The given class + must implement Log, and provide a constructor that + takes a single String argument (containing the name + of the log). +

      +

      + +
      Throws: +
      java.lang.LinkageError +
      java.lang.ExceptionInInitializerError +
      java.lang.NoSuchMethodException +
      java.lang.SecurityException +
      java.lang.ClassNotFoundException
      +
      +
      +
      + +

      +setLogImplementation

      +
      +public static void setLogImplementation(java.lang.Class logclass)
      +                                 throws java.lang.LinkageError,
      +                                        java.lang.ExceptionInInitializerError,
      +                                        java.lang.NoSuchMethodException,
      +                                        java.lang.SecurityException
      +
      +
      Deprecated. 
      Set the log implementation/log implementation factory + by class. The given class must implement Log, + and provide a constructor that takes a single String + argument (containing the name of the log). +

      +

      + +
      Throws: +
      java.lang.LinkageError +
      java.lang.ExceptionInInitializerError +
      java.lang.NoSuchMethodException +
      java.lang.SecurityException
      +
      +
      +
      + +

      +getInstance

      +
      +public static Log getInstance(java.lang.String name)
      +
      +
      Deprecated. 
      Get a Log instance by class name +

      +

      +
      +
      +
      +
      + +

      +getInstance

      +
      +public static Log getInstance(java.lang.Class clazz)
      +
      +
      Deprecated. 
      Get a Log instance by class +

      +

      +
      +
      +
      +
      + +

      +makeNewLogInstance

      +
      +public static Log makeNewLogInstance(java.lang.String name)
      +
      +
      Deprecated. 
      Create a new Log implementation, based + on the given name. +

      + The specific Log implementation returned + is determined by the value of the + org.apache.commons.logging.log property. + The value of org.apache.commons.logging.log may be set to + the fully specified name of a class that implements + the Log interface. This class must also + have a public constructor that takes a single + String argument (containing the name + of the Log to be constructed. +

      + When org.apache.commons.logging.log is not set, + or when no corresponding class can be found, + this method will return a Log4JLogger + if the log4j Logger class is + available in the LogSource's classpath, or a + Jdk14Logger if we are on a JDK 1.4 or later system, or + NoOpLog if neither of the above conditions is true. +

      +

      +
      Parameters:
      name - the log name (or category)
      +
      +
      +
      + +

      +getLogNames

      +
      +public static java.lang.String[] getLogNames()
      +
      +
      Deprecated. 
      Returns a String array containing the names of + all logs known to me. +

      +

      +
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/Log.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/Log.html new file mode 100644 index 0000000..f207654 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/Log.html @@ -0,0 +1,350 @@ + + + + + + + +Uses of Interface org.apache.commons.logging.Log (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Interface
      org.apache.commons.logging.Log

      +
      + + + + + + + + + + + + + +
      +Packages that use Log
      org.apache.commons.loggingSimple wrapper API around multiple logging APIs. 
      org.apache.commons.logging.implConcrete implementations of commons-logging wrapper APIs. 
      +  +

      + + + + + +
      +Uses of Log in org.apache.commons.logging
      +  +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.commons.logging that return Log
      +static LogLogSource.getInstance(java.lang.String name) + +
      +          Deprecated. Get a Log instance by class name
      +static LogLogSource.getInstance(java.lang.Class clazz) + +
      +          Deprecated. Get a Log instance by class
      +static LogLogSource.makeNewLogInstance(java.lang.String name) + +
      +          Deprecated. Create a new Log implementation, based + on the given name. +
      +abstract  LogLogFactory.getInstance(java.lang.Class clazz) + +
      +          Convenience method to derive a name from the specified class and + call getInstance(String) with it.
      +abstract  LogLogFactory.getInstance(java.lang.String name) + +
      +          Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.
      +static LogLogFactory.getLog(java.lang.Class clazz) + +
      +          Convenience method to return a named logger, without the application + having to care about factories.
      +static LogLogFactory.getLog(java.lang.String name) + +
      +          Convenience method to return a named logger, without the application + having to care about factories.
      +  +

      + + + + + +
      +Uses of Log in org.apache.commons.logging.impl
      +  +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.commons.logging.impl that implement Log
      + classAvalonLogger + +
      +          Implementation of commons-logging Log interface that delegates all + logging calls to the Avalon logging abstraction: the Logger interface. +
      + classJdk13LumberjackLogger + +
      +          Implementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that are + available in SourceForge's Lumberjack for JDKs prior to 1.4.
      + classJdk14Logger + +
      +          Implementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that were + introduced in the Merlin release (JDK 1.4).
      + classLog4JLogger + +
      +          Implementation of Log that maps directly to a + Logger for log4J version 1.2. +
      + classLogKitLogger + +
      +          Implementation of org.apache.commons.logging.Log + that wraps the avalon-logkit + logging system.
      + classNoOpLog + +
      +          Trivial implementation of Log that throws away all messages.
      + classSimpleLog + +
      +          Simple implementation of Log that sends all enabled log messages, + for all defined loggers, to System.err.
      +  +

      + + + + + + + + + + + + + + + + + +
      Methods in org.apache.commons.logging.impl that return Log
      + LogLogFactoryImpl.getInstance(java.lang.Class clazz) + +
      +          Convenience method to derive a name from the specified class and + call getInstance(String) with it.
      + LogLogFactoryImpl.getInstance(java.lang.String name) + +
      +          Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.
      +protected  LogLogFactoryImpl.newInstance(java.lang.String name) + +
      +          Create and return a new Log + instance for the specified name.
      +  +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogConfigurationException.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogConfigurationException.html new file mode 100644 index 0000000..e4ef3e1 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogConfigurationException.html @@ -0,0 +1,308 @@ + + + + + + + +Uses of Class org.apache.commons.logging.LogConfigurationException (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.LogConfigurationException

      +
      + + + + + + + + + + + + + +
      +Packages that use LogConfigurationException
      org.apache.commons.loggingSimple wrapper API around multiple logging APIs. 
      org.apache.commons.logging.implConcrete implementations of commons-logging wrapper APIs. 
      +  +

      + + + + + +
      +Uses of LogConfigurationException in org.apache.commons.logging
      +  +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.commons.logging that throw LogConfigurationException
      +abstract  LogLogFactory.getInstance(java.lang.Class clazz) + +
      +          Convenience method to derive a name from the specified class and + call getInstance(String) with it.
      +abstract  LogLogFactory.getInstance(java.lang.String name) + +
      +          Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.
      +static LogFactoryLogFactory.getFactory() + +
      +          Construct (if necessary) and return a LogFactory + instance, using the following ordered lookup procedure to determine + the name of the implementation class to be loaded.
      +static LogLogFactory.getLog(java.lang.Class clazz) + +
      +          Convenience method to return a named logger, without the application + having to care about factories.
      +static LogLogFactory.getLog(java.lang.String name) + +
      +          Convenience method to return a named logger, without the application + having to care about factories.
      +protected static java.lang.ClassLoaderLogFactory.getContextClassLoader() + +
      +          Returns the current context classloader. +
      +protected static java.lang.ClassLoaderLogFactory.directGetContextClassLoader() + +
      +          Return the thread context class loader if available; otherwise return + null. +
      +protected static LogFactoryLogFactory.newFactory(java.lang.String factoryClass, + java.lang.ClassLoader classLoader, + java.lang.ClassLoader contextClassLoader) + +
      +          Return a new instance of the specified LogFactory + implementation class, loaded by the specified class loader. +
      +  +

      + + + + + +
      +Uses of LogConfigurationException in org.apache.commons.logging.impl
      +  +

      + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in org.apache.commons.logging.impl that throw LogConfigurationException
      + LogLogFactoryImpl.getInstance(java.lang.Class clazz) + +
      +          Convenience method to derive a name from the specified class and + call getInstance(String) with it.
      + LogLogFactoryImpl.getInstance(java.lang.String name) + +
      +          Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.
      +protected static java.lang.ClassLoaderLogFactoryImpl.getContextClassLoader() + +
      +          Gets the context classloader. +
      +protected  java.lang.reflect.ConstructorLogFactoryImpl.getLogConstructor() + +
      +          Deprecated. Never invoked by this class; subclasses should not assume + it will be.
      +protected  LogLogFactoryImpl.newInstance(java.lang.String name) + +
      +          Create and return a new Log + instance for the specified name.
      +  +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogFactory.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogFactory.html new file mode 100644 index 0000000..e19b029 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogFactory.html @@ -0,0 +1,248 @@ + + + + + + + +Uses of Class org.apache.commons.logging.LogFactory (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.LogFactory

      +
      + + + + + + + + + + + + + +
      +Packages that use LogFactory
      org.apache.commons.loggingSimple wrapper API around multiple logging APIs. 
      org.apache.commons.logging.implConcrete implementations of commons-logging wrapper APIs. 
      +  +

      + + + + + +
      +Uses of LogFactory in org.apache.commons.logging
      +  +

      + + + + + + + + + +
      Fields in org.apache.commons.logging declared as LogFactory
      +protected static LogFactoryLogFactory.nullClassLoaderFactory + +
      +          Prevously constructed LogFactory instance as in the + factories map, but for the case where + getClassLoader returns null. +
      +  +

      + + + + + + + + + + + + + + + + + +
      Methods in org.apache.commons.logging that return LogFactory
      +static LogFactoryLogFactory.getFactory() + +
      +          Construct (if necessary) and return a LogFactory + instance, using the following ordered lookup procedure to determine + the name of the implementation class to be loaded.
      +protected static LogFactoryLogFactory.newFactory(java.lang.String factoryClass, + java.lang.ClassLoader classLoader, + java.lang.ClassLoader contextClassLoader) + +
      +          Return a new instance of the specified LogFactory + implementation class, loaded by the specified class loader. +
      +protected static LogFactoryLogFactory.newFactory(java.lang.String factoryClass, + java.lang.ClassLoader classLoader) + +
      +          Method provided for backwards compatibility; see newFactory version that + takes 3 parameters. +
      +  +

      + + + + + +
      +Uses of LogFactory in org.apache.commons.logging.impl
      +  +

      + + + + + + + + + +
      Subclasses of LogFactory in org.apache.commons.logging.impl
      + classLogFactoryImpl + +
      +          Concrete subclass of LogFactory that implements the + following algorithm to dynamically select a logging implementation + class to instantiate a wrapper for.
      +  +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogSource.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogSource.html new file mode 100644 index 0000000..1ff9324 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/class-use/LogSource.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.LogSource (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.LogSource

      +
      +No usage of org.apache.commons.logging.LogSource +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/AvalonLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/AvalonLogger.html new file mode 100644 index 0000000..c579142 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/AvalonLogger.html @@ -0,0 +1,834 @@ + + + + + + + +AvalonLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class AvalonLogger

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.AvalonLogger
      +
      +
      +
      All Implemented Interfaces:
      Log
      +
      +
      +
      +
      public class AvalonLogger
      extends java.lang.Object
      implements Log
      + +

      +

      Implementation of commons-logging Log interface that delegates all + logging calls to the Avalon logging abstraction: the Logger interface. +

      +

      + There are two ways in which this class can be used: +

      +
        +
      • the instance can be constructed with an Avalon logger + (by calling AvalonLogger(Logger)). In this case, it acts + as a simple thin wrapping implementation over the logger. This is + particularly useful when using a property setter. +
      • +
      • the setDefaultLogger(org.apache.avalon.framework.logger.Logger) class property can be called which + sets the ancesteral Avalon logger for this class. Any AvalonLogger + instances created through the LogFactory mechanisms will output + to child loggers of this Logger. +
      • +
      +

      + Note: AvalonLogger does not implement Serializable + because the constructors available for it make this impossible to achieve in all + circumstances; there is no way to "reconnect" to an underlying Logger object on + deserialization if one was just passed in to the constructor of the original + object. This class was marked Serializable in the 1.0.4 release of + commons-logging, but this never actually worked (a NullPointerException would + be thrown as soon as the deserialized object was used), so removing this marker + is not considered to be an incompatible change. +

      +

      + +

      +

      +
      Version:
      +
      $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +
      Author:
      +
      Neeme Praks
      +
      +
      + +

      + + + + + + + + + + + + + + + + + + + +
      +Constructor Summary
      AvalonLogger(org.apache.avalon.framework.logger.Logger logger) + +
      +          Constructs an AvalonLogger that outputs to the given + Logger instance.
      AvalonLogger(java.lang.String name) + +
      +          Constructs an AvalonLogger that will log to a child + of the Logger set by calling setDefaultLogger(org.apache.avalon.framework.logger.Logger).
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.debug.
      + voiddebug(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.debug.
      + voiderror(java.lang.Object message) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.error.
      + voiderror(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.error.
      + voidfatal(java.lang.Object message) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.fatalError.
      + voidfatal(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.fatalError.
      + org.apache.avalon.framework.logger.LoggergetLogger() + +
      +          Gets the Avalon logger implementation used to perform logging.
      + voidinfo(java.lang.Object message) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.info.
      + voidinfo(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.info.
      + booleanisDebugEnabled() + +
      +          Is logging to + org.apache.avalon.framework.logger.Logger.debug enabled?
      + booleanisErrorEnabled() + +
      +          Is logging to + org.apache.avalon.framework.logger.Logger.error enabled?
      + booleanisFatalEnabled() + +
      +          Is logging to + org.apache.avalon.framework.logger.Logger.fatalError enabled?
      + booleanisInfoEnabled() + +
      +          Is logging to + org.apache.avalon.framework.logger.Logger.info enabled?
      + booleanisTraceEnabled() + +
      +          Is logging to + org.apache.avalon.framework.logger.Logger.debug enabled?
      + booleanisWarnEnabled() + +
      +          Is logging to + org.apache.avalon.framework.logger.Logger.warn enabled?
      +static voidsetDefaultLogger(org.apache.avalon.framework.logger.Logger logger) + +
      +          Sets the ancesteral Avalon logger from which the delegating loggers + will descend.
      + voidtrace(java.lang.Object message) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.debug.
      + voidtrace(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.debug.
      + voidwarn(java.lang.Object message) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.warn.
      + voidwarn(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.avalon.framework.logger.Logger.warn.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + + + + +
      +Constructor Detail
      + +

      +AvalonLogger

      +
      +public AvalonLogger(org.apache.avalon.framework.logger.Logger logger)
      +
      +
      Constructs an AvalonLogger that outputs to the given + Logger instance. +

      +

      Parameters:
      logger - the avalon logger implementation to delegate to
      +
      + +

      +AvalonLogger

      +
      +public AvalonLogger(java.lang.String name)
      +
      +
      Constructs an AvalonLogger that will log to a child + of the Logger set by calling setDefaultLogger(org.apache.avalon.framework.logger.Logger). +

      +

      Parameters:
      name - the name of the avalon logger implementation to delegate to
      + + + + + + + + +
      +Method Detail
      + +

      +getLogger

      +
      +public org.apache.avalon.framework.logger.Logger getLogger()
      +
      +
      Gets the Avalon logger implementation used to perform logging. +

      +

      +
      +
      +
      + +
      Returns:
      avalon logger implementation
      +
      +
      +
      + +

      +setDefaultLogger

      +
      +public static void setDefaultLogger(org.apache.avalon.framework.logger.Logger logger)
      +
      +
      Sets the ancesteral Avalon logger from which the delegating loggers + will descend. +

      +

      +
      +
      +
      +
      Parameters:
      logger - the default avalon logger, + in case there is no logger instance supplied in constructor
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.debug(Object, Throwable)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log.
      See Also:
      Log.debug(Object)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.error. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.error(Object, Throwable)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.error. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.error(Object)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.fatalError. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log.
      t - log this cause.
      See Also:
      Log.fatal(Object, Throwable)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.fatalError. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.fatal(Object)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.info. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.info(Object, Throwable)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.info. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.info(Object)
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public boolean isDebugEnabled()
      +
      +
      Is logging to + org.apache.avalon.framework.logger.Logger.debug enabled? +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      true if debug is enabled in the underlying logger.
      See Also:
      Log.isDebugEnabled()
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public boolean isErrorEnabled()
      +
      +
      Is logging to + org.apache.avalon.framework.logger.Logger.error enabled? +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      true if error is enabled in the underlying logger.
      See Also:
      Log.isErrorEnabled()
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public boolean isFatalEnabled()
      +
      +
      Is logging to + org.apache.avalon.framework.logger.Logger.fatalError enabled? +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      See Also:
      Log.isFatalEnabled()
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public boolean isInfoEnabled()
      +
      +
      Is logging to + org.apache.avalon.framework.logger.Logger.info enabled? +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      true if info is enabled in the underlying logger.
      See Also:
      Log.isInfoEnabled()
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public boolean isTraceEnabled()
      +
      +
      Is logging to + org.apache.avalon.framework.logger.Logger.debug enabled? +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      true if trace is enabled in the underlying logger.
      See Also:
      Log.isTraceEnabled()
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public boolean isWarnEnabled()
      +
      +
      Is logging to + org.apache.avalon.framework.logger.Logger.warn enabled? +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      true if warn is enabled in the underlying logger.
      See Also:
      Log.isWarnEnabled()
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log.
      t - log this cause.
      See Also:
      Log.trace(Object, Throwable)
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.debug. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.trace(Object)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.warn. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.warn(Object, Throwable)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.avalon.framework.logger.Logger.warn. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.warn(Object)
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html new file mode 100644 index 0000000..39e04ae --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html @@ -0,0 +1,803 @@ + + + + + + + +Jdk13LumberjackLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class Jdk13LumberjackLogger

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.Jdk13LumberjackLogger
      +
      +
      +
      All Implemented Interfaces:
      Log, java.io.Serializable
      +
      +
      +
      +
      public class Jdk13LumberjackLogger
      extends java.lang.Object
      implements Log, java.io.Serializable
      + +

      +

      Implementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that are + available in SourceForge's Lumberjack for JDKs prior to 1.4.

      +

      + +

      +

      +
      Since:
      +
      1.1
      +
      Version:
      +
      $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +
      Author:
      +
      Scott Sanders, Berin Loritsch, Peter Donald, Vince Eagen
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +protected static java.util.logging.LeveldummyLevel + +
      +          This member variable simply ensures that any attempt to initialise + this class in a pre-1.4 JVM will result in an ExceptionInInitializerError. +
      +protected  java.util.logging.Loggerlogger + +
      +          The underlying Logger implementation we are using.
      +protected  java.lang.Stringname + +
      +           
      +  + + + + + + + + + + +
      +Constructor Summary
      Jdk13LumberjackLogger(java.lang.String name) + +
      +          Construct a named instance of this Logger.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.FINE.
      + voiddebug(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.FINE.
      + voiderror(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + voiderror(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + voidfatal(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + voidfatal(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + java.util.logging.LoggergetLogger() + +
      +          Return the native Logger instance we are using.
      + voidinfo(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.INFO.
      + voidinfo(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.INFO.
      + booleanisDebugEnabled() + +
      +          Is debug logging currently enabled?
      + booleanisErrorEnabled() + +
      +          Is error logging currently enabled?
      + booleanisFatalEnabled() + +
      +          Is fatal logging currently enabled?
      + booleanisInfoEnabled() + +
      +          Is info logging currently enabled?
      + booleanisTraceEnabled() + +
      +          Is trace logging currently enabled?
      + booleanisWarnEnabled() + +
      +          Is warn logging currently enabled?
      + voidtrace(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.FINEST.
      + voidtrace(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.FINEST.
      + voidwarn(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.WARNING.
      + voidwarn(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.WARNING.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +logger

      +
      +protected transient java.util.logging.Logger logger
      +
      +
      The underlying Logger implementation we are using. +

      +

      +
      +
      +
      + +

      +name

      +
      +protected java.lang.String name
      +
      +
      +
      +
      +
      + +

      +dummyLevel

      +
      +protected static final java.util.logging.Level dummyLevel
      +
      +
      This member variable simply ensures that any attempt to initialise + this class in a pre-1.4 JVM will result in an ExceptionInInitializerError. + It must not be private, as an optimising compiler could detect that it + is not used and optimise it away. +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +Jdk13LumberjackLogger

      +
      +public Jdk13LumberjackLogger(java.lang.String name)
      +
      +
      Construct a named instance of this Logger. +

      +

      Parameters:
      name - Name of the logger to be constructed
      + + + + + + + + +
      +Method Detail
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.FINE. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.debug(Object)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.FINE. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.debug(Object, Throwable)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.error(Object)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.error(Object, Throwable)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.fatal(Object)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.fatal(Object, Throwable)
      +
      +
      +
      + +

      +getLogger

      +
      +public java.util.logging.Logger getLogger()
      +
      +
      Return the native Logger instance we are using. +

      +

      +
      +
      +
      +
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.info(Object)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.info(Object, Throwable)
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public boolean isDebugEnabled()
      +
      +
      Is debug logging currently enabled? +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      true if debug is enabled in the underlying logger.
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public boolean isErrorEnabled()
      +
      +
      Is error logging currently enabled? +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      true if error is enabled in the underlying logger.
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public boolean isFatalEnabled()
      +
      +
      Is fatal logging currently enabled? +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public boolean isInfoEnabled()
      +
      +
      Is info logging currently enabled? +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      true if info is enabled in the underlying logger.
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public boolean isTraceEnabled()
      +
      +
      Is trace logging currently enabled? +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      true if trace is enabled in the underlying logger.
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public boolean isWarnEnabled()
      +
      +
      Is warn logging currently enabled? +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      true if warn is enabled in the underlying logger.
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.FINEST. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.trace(Object)
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.FINEST. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.trace(Object, Throwable)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.WARNING. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.warn(Object)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.WARNING. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.warn(Object, Throwable)
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk14Logger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk14Logger.html new file mode 100644 index 0000000..a92f335 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Jdk14Logger.html @@ -0,0 +1,803 @@ + + + + + + + +Jdk14Logger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class Jdk14Logger

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.Jdk14Logger
      +
      +
      +
      All Implemented Interfaces:
      Log, java.io.Serializable
      +
      +
      +
      +
      public class Jdk14Logger
      extends java.lang.Object
      implements Log, java.io.Serializable
      + +

      +

      Implementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that were + introduced in the Merlin release (JDK 1.4).

      +

      + +

      +

      +
      Version:
      +
      $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +
      Author:
      +
      Scott Sanders, Berin Loritsch, Peter Donald
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +protected static java.util.logging.LeveldummyLevel + +
      +          This member variable simply ensures that any attempt to initialise + this class in a pre-1.4 JVM will result in an ExceptionInInitializerError. +
      +protected  java.util.logging.Loggerlogger + +
      +          The underlying Logger implementation we are using.
      +protected  java.lang.Stringname + +
      +          The name of the logger we are wrapping.
      +  + + + + + + + + + + +
      +Constructor Summary
      Jdk14Logger(java.lang.String name) + +
      +          Construct a named instance of this Logger.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.FINE.
      + voiddebug(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.FINE.
      + voiderror(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + voiderror(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + voidfatal(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + voidfatal(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.SEVERE.
      + java.util.logging.LoggergetLogger() + +
      +          Return the native Logger instance we are using.
      + voidinfo(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.INFO.
      + voidinfo(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.INFO.
      + booleanisDebugEnabled() + +
      +          Is debug logging currently enabled?
      + booleanisErrorEnabled() + +
      +          Is error logging currently enabled?
      + booleanisFatalEnabled() + +
      +          Is fatal logging currently enabled?
      + booleanisInfoEnabled() + +
      +          Is info logging currently enabled?
      + booleanisTraceEnabled() + +
      +          Is trace logging currently enabled?
      + booleanisWarnEnabled() + +
      +          Is warn logging currently enabled?
      + voidtrace(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.FINEST.
      + voidtrace(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.FINEST.
      + voidwarn(java.lang.Object message) + +
      +          Logs a message with java.util.logging.Level.WARNING.
      + voidwarn(java.lang.Object message, + java.lang.Throwable exception) + +
      +          Logs a message with java.util.logging.Level.WARNING.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +dummyLevel

      +
      +protected static final java.util.logging.Level dummyLevel
      +
      +
      This member variable simply ensures that any attempt to initialise + this class in a pre-1.4 JVM will result in an ExceptionInInitializerError. + It must not be private, as an optimising compiler could detect that it + is not used and optimise it away. +

      +

      +
      +
      +
      + +

      +logger

      +
      +protected transient java.util.logging.Logger logger
      +
      +
      The underlying Logger implementation we are using. +

      +

      +
      +
      +
      + +

      +name

      +
      +protected java.lang.String name
      +
      +
      The name of the logger we are wrapping. +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +Jdk14Logger

      +
      +public Jdk14Logger(java.lang.String name)
      +
      +
      Construct a named instance of this Logger. +

      +

      Parameters:
      name - Name of the logger to be constructed
      + + + + + + + + +
      +Method Detail
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.FINE. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.debug(Object)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.FINE. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.debug(Object, Throwable)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.error(Object)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.error(Object, Throwable)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.fatal(Object)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.SEVERE. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.fatal(Object, Throwable)
      +
      +
      +
      + +

      +getLogger

      +
      +public java.util.logging.Logger getLogger()
      +
      +
      Return the native Logger instance we are using. +

      +

      +
      +
      +
      +
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.info(Object)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.info(Object, Throwable)
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public boolean isDebugEnabled()
      +
      +
      Is debug logging currently enabled? +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      true if debug is enabled in the underlying logger.
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public boolean isErrorEnabled()
      +
      +
      Is error logging currently enabled? +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      true if error is enabled in the underlying logger.
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public boolean isFatalEnabled()
      +
      +
      Is fatal logging currently enabled? +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public boolean isInfoEnabled()
      +
      +
      Is info logging currently enabled? +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      true if info is enabled in the underlying logger.
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public boolean isTraceEnabled()
      +
      +
      Is trace logging currently enabled? +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      true if trace is enabled in the underlying logger.
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public boolean isWarnEnabled()
      +
      +
      Is warn logging currently enabled? +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      true if warn is enabled in the underlying logger.
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.FINEST. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.trace(Object)
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.FINEST. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.trace(Object, Throwable)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +
      Logs a message with java.util.logging.Level.WARNING. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.warn(Object)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable exception)
      +
      +
      Logs a message with java.util.logging.Level.WARNING. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      exception - log this cause
      See Also:
      Log.warn(Object, Throwable)
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Log4JLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Log4JLogger.html new file mode 100644 index 0000000..887955d --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/Log4JLogger.html @@ -0,0 +1,776 @@ + + + + + + + +Log4JLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class Log4JLogger

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.Log4JLogger
      +
      +
      +
      All Implemented Interfaces:
      Log, java.io.Serializable
      +
      +
      +
      +
      public class Log4JLogger
      extends java.lang.Object
      implements Log, java.io.Serializable
      + +

      +Implementation of Log that maps directly to a + Logger for log4J version 1.2. +

      + Initial configuration of the corresponding Logger instances should be done + in the usual manner, as outlined in the Log4J documentation. +

      + The reason this logger is distinct from the 1.3 logger is that in version 1.2 + of Log4J: +

        +
      • class Logger takes Priority parameters not Level parameters. +
      • class Level extends Priority +
      + Log4J1.3 is expected to change Level so it no longer extends Priority, which is + a non-binary-compatible change. The class generated by compiling this code against + log4j 1.2 will therefore not run against log4j 1.3. +

      + +

      +

      +
      Version:
      +
      $Id: Log4JLogger.java 479747 2006-11-27 20:15:01Z dennisl $
      +
      Author:
      +
      Scott Sanders, Rod Waldhoff, Robert Burrell Donkin
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + +
      +Constructor Summary
      Log4JLogger() + +
      +           
      Log4JLogger(org.apache.log4j.Logger logger) + +
      +          For use with a log4j factory.
      Log4JLogger(java.lang.String name) + +
      +          Base constructor.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Logs a message with org.apache.log4j.Priority.DEBUG.
      + voiddebug(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log4j.Priority.DEBUG.
      + voiderror(java.lang.Object message) + +
      +          Logs a message with org.apache.log4j.Priority.ERROR.
      + voiderror(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log4j.Priority.ERROR.
      + voidfatal(java.lang.Object message) + +
      +          Logs a message with org.apache.log4j.Priority.FATAL.
      + voidfatal(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log4j.Priority.FATAL.
      + org.apache.log4j.LoggergetLogger() + +
      +          Return the native Logger instance we are using.
      + voidinfo(java.lang.Object message) + +
      +          Logs a message with org.apache.log4j.Priority.INFO.
      + voidinfo(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log4j.Priority.INFO.
      + booleanisDebugEnabled() + +
      +          Check whether the Log4j Logger used is enabled for DEBUG priority.
      + booleanisErrorEnabled() + +
      +          Check whether the Log4j Logger used is enabled for ERROR priority.
      + booleanisFatalEnabled() + +
      +          Check whether the Log4j Logger used is enabled for FATAL priority.
      + booleanisInfoEnabled() + +
      +          Check whether the Log4j Logger used is enabled for INFO priority.
      + booleanisTraceEnabled() + +
      +          Check whether the Log4j Logger used is enabled for TRACE priority. +
      + booleanisWarnEnabled() + +
      +          Check whether the Log4j Logger used is enabled for WARN priority.
      + voidtrace(java.lang.Object message) + +
      +          Logs a message with org.apache.log4j.Priority.TRACE. +
      + voidtrace(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log4j.Priority.TRACE. +
      + voidwarn(java.lang.Object message) + +
      +          Logs a message with org.apache.log4j.Priority.WARN.
      + voidwarn(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log4j.Priority.WARN.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + + + + +
      +Constructor Detail
      + +

      +Log4JLogger

      +
      +public Log4JLogger()
      +
      +
      +
      + +

      +Log4JLogger

      +
      +public Log4JLogger(java.lang.String name)
      +
      +
      Base constructor. +

      +

      +
      + +

      +Log4JLogger

      +
      +public Log4JLogger(org.apache.log4j.Logger logger)
      +
      +
      For use with a log4j factory. +

      +

      + + + + + + + + +
      +Method Detail
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log4j.Priority.TRACE. + When using a log4j version that does not support the TRACE + level, the message will be logged at the DEBUG level. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.trace(Object)
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log4j.Priority.TRACE. + When using a log4j version that does not support the TRACE + level, the message will be logged at the DEBUG level. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.trace(Object, Throwable)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log4j.Priority.DEBUG. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.debug(Object)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log4j.Priority.DEBUG. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.debug(Object, Throwable)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log4j.Priority.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.info(Object)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log4j.Priority.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.info(Object, Throwable)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log4j.Priority.WARN. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.warn(Object)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log4j.Priority.WARN. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.warn(Object, Throwable)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log4j.Priority.ERROR. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.error(Object)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log4j.Priority.ERROR. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.error(Object, Throwable)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log4j.Priority.FATAL. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.fatal(Object)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log4j.Priority.FATAL. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.fatal(Object, Throwable)
      +
      +
      +
      + +

      +getLogger

      +
      +public org.apache.log4j.Logger getLogger()
      +
      +
      Return the native Logger instance we are using. +

      +

      +
      +
      +
      +
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public boolean isDebugEnabled()
      +
      +
      Check whether the Log4j Logger used is enabled for DEBUG priority. +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      true if debug is enabled in the underlying logger.
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public boolean isErrorEnabled()
      +
      +
      Check whether the Log4j Logger used is enabled for ERROR priority. +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      true if error is enabled in the underlying logger.
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public boolean isFatalEnabled()
      +
      +
      Check whether the Log4j Logger used is enabled for FATAL priority. +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public boolean isInfoEnabled()
      +
      +
      Check whether the Log4j Logger used is enabled for INFO priority. +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      true if info is enabled in the underlying logger.
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public boolean isTraceEnabled()
      +
      +
      Check whether the Log4j Logger used is enabled for TRACE priority. + When using a log4j version that does not support the TRACE level, this call + will report whether DEBUG is enabled or not. +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      true if trace is enabled in the underlying logger.
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public boolean isWarnEnabled()
      +
      +
      Check whether the Log4j Logger used is enabled for WARN priority. +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      true if warn is enabled in the underlying logger.
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html new file mode 100644 index 0000000..db375eb --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html @@ -0,0 +1,1066 @@ + + + + + + + +LogFactoryImpl (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class LogFactoryImpl

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.LogFactory
      +      extended byorg.apache.commons.logging.impl.LogFactoryImpl
      +
      +
      +
      +
      public class LogFactoryImpl
      extends LogFactory
      + +

      +

      Concrete subclass of LogFactory that implements the + following algorithm to dynamically select a logging implementation + class to instantiate a wrapper for.

      +
        +
      • Use a factory configuration attribute named + org.apache.commons.logging.Log to identify the + requested implementation class.
      • +
      • Use the org.apache.commons.logging.Log system property + to identify the requested implementation class.
      • +
      • If Log4J is available, return an instance of + org.apache.commons.logging.impl.Log4JLogger.
      • +
      • If JDK 1.4 or later is available, return an instance of + org.apache.commons.logging.impl.Jdk14Logger.
      • +
      • Otherwise, return an instance of + org.apache.commons.logging.impl.SimpleLog.
      • +
      + +

      If the selected Log implementation class has a + setLogFactory() method that accepts a LogFactory + parameter, this method will be called on each newly created instance + to identify the associated factory. This makes factory configuration + attributes available to the Log instance, if it so desires.

      + +

      This factory will remember previously created Log instances + for the same name, and will return them on repeated requests to the + getInstance() method.

      +

      + +

      +

      +
      Version:
      +
      $Revision: 581090 $ $Date: 2007-10-02 00:01:06 +0200 (ti, 02 okt 2007) $
      +
      Author:
      +
      Rod Waldhoff, Craig R. McClanahan, Richard A. Sitze, Brian Stansberry
      +
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +static java.lang.StringALLOW_FLAWED_CONTEXT_PROPERTY + +
      +          The name (org.apache.commons.logging.Log.allowFlawedContext) + of the system property which can be set true/false to + determine system behaviour when a bad context-classloader is encountered. +
      +static java.lang.StringALLOW_FLAWED_DISCOVERY_PROPERTY + +
      +          The name (org.apache.commons.logging.Log.allowFlawedDiscovery) + of the system property which can be set true/false to + determine system behaviour when a bad logging adapter class is + encountered during logging discovery.
      +static java.lang.StringALLOW_FLAWED_HIERARCHY_PROPERTY + +
      +          The name (org.apache.commons.logging.Log.allowFlawedHierarchy) + of the system property which can be set true/false to + determine system behaviour when a logging adapter class is + encountered which has bound to the wrong Log class implementation. +
      +protected  java.util.Hashtableattributes + +
      +          Configuration attributes.
      +protected  java.util.Hashtableinstances + +
      +          The Log instances that have + already been created, keyed by logger name.
      +static java.lang.StringLOG_PROPERTY + +
      +          The name (org.apache.commons.logging.Log) of the system + property identifying our Log implementation class.
      +protected static java.lang.StringLOG_PROPERTY_OLD + +
      +          The deprecated system property used for backwards compatibility with + old versions of JCL.
      +protected  java.lang.reflect.ConstructorlogConstructor + +
      +          The one-argument constructor of the + Log + implementation class that will be used to create new instances. +
      +protected  java.lang.Class[]logConstructorSignature + +
      +          The signature of the Constructor to be used.
      +protected  java.lang.reflect.MethodlogMethod + +
      +          The one-argument setLogFactory method of the selected + Log method, if it exists.
      +protected  java.lang.Class[]logMethodSignature + +
      +          The signature of the setLogFactory method to be used.
      + + + + + + + +
      Fields inherited from class org.apache.commons.logging.LogFactory
      DIAGNOSTICS_DEST_PROPERTY, factories, FACTORY_DEFAULT, FACTORY_PROPERTIES, FACTORY_PROPERTY, HASHTABLE_IMPLEMENTATION_PROPERTY, nullClassLoaderFactory, PRIORITY_KEY, SERVICE_ID, TCCL_KEY
      +  + + + + + + + + + + +
      +Constructor Summary
      LogFactoryImpl() + +
      +          Public no-arguments constructor required by the lookup mechanism.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + java.lang.ObjectgetAttribute(java.lang.String name) + +
      +          Return the configuration attribute with the specified name (if any), + or null if there is no such attribute.
      + java.lang.String[]getAttributeNames() + +
      +          Return an array containing the names of all currently defined + configuration attributes.
      +protected static java.lang.ClassLoadergetClassLoader(java.lang.Class clazz) + +
      +          Workaround for bug in Java1.2; in theory this method is not needed. +
      +protected static java.lang.ClassLoadergetContextClassLoader() + +
      +          Gets the context classloader. +
      + LoggetInstance(java.lang.Class clazz) + +
      +          Convenience method to derive a name from the specified class and + call getInstance(String) with it.
      + LoggetInstance(java.lang.String name) + +
      +          Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.
      +protected  java.lang.StringgetLogClassName() + +
      +          Deprecated. Never invoked by this class; subclasses should not assume + it will be.
      +protected  java.lang.reflect.ConstructorgetLogConstructor() + +
      +          Deprecated. Never invoked by this class; subclasses should not assume + it will be.
      +protected static booleanisDiagnosticsEnabled() + +
      +          Workaround for bug in Java1.2; in theory this method is not needed. +
      +protected  booleanisJdk13LumberjackAvailable() + +
      +          Deprecated. Never invoked by this class; subclasses should not assume + it will be.
      +protected  booleanisJdk14Available() + +
      +          Deprecated. Never invoked by this class; subclasses should not assume + it will be.
      +protected  booleanisLog4JAvailable() + +
      +          Deprecated. Never invoked by this class; subclasses should not assume + it will be.
      +protected  voidlogDiagnostic(java.lang.String msg) + +
      +          Output a diagnostic message to a user-specified destination (if the + user has enabled diagnostic logging).
      +protected  LognewInstance(java.lang.String name) + +
      +          Create and return a new Log + instance for the specified name.
      + voidrelease() + +
      +          Release any internal references to previously created + Log + instances returned by this factory.
      + voidremoveAttribute(java.lang.String name) + +
      +          Remove any configuration attribute associated with the specified name. +
      + voidsetAttribute(java.lang.String name, + java.lang.Object value) + +
      +          Set the configuration attribute with the specified name.
      + + + + + + + +
      Methods inherited from class org.apache.commons.logging.LogFactory
      createFactory, directGetContextClassLoader, getFactory, getLog, getLog, logRawDiagnostic, newFactory, newFactory, objectId, release, releaseAll
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +LOG_PROPERTY

      +
      +public static final java.lang.String LOG_PROPERTY
      +
      +
      The name (org.apache.commons.logging.Log) of the system + property identifying our Log implementation class. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_PROPERTY_OLD

      +
      +protected static final java.lang.String LOG_PROPERTY_OLD
      +
      +
      The deprecated system property used for backwards compatibility with + old versions of JCL. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +ALLOW_FLAWED_CONTEXT_PROPERTY

      +
      +public static final java.lang.String ALLOW_FLAWED_CONTEXT_PROPERTY
      +
      +
      The name (org.apache.commons.logging.Log.allowFlawedContext) + of the system property which can be set true/false to + determine system behaviour when a bad context-classloader is encountered. + When set to false, a LogConfigurationException is thrown if + LogFactoryImpl is loaded via a child classloader of the TCCL (this + should never happen in sane systems). + + Default behaviour: true (tolerates bad context classloaders) + + See also method setAttribute. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +ALLOW_FLAWED_DISCOVERY_PROPERTY

      +
      +public static final java.lang.String ALLOW_FLAWED_DISCOVERY_PROPERTY
      +
      +
      The name (org.apache.commons.logging.Log.allowFlawedDiscovery) + of the system property which can be set true/false to + determine system behaviour when a bad logging adapter class is + encountered during logging discovery. When set to false, an + exception will be thrown and the app will fail to start. When set + to true, discovery will continue (though the user might end up + with a different logging implementation than they expected). + + Default behaviour: true (tolerates bad logging adapters) + + See also method setAttribute. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +ALLOW_FLAWED_HIERARCHY_PROPERTY

      +
      +public static final java.lang.String ALLOW_FLAWED_HIERARCHY_PROPERTY
      +
      +
      The name (org.apache.commons.logging.Log.allowFlawedHierarchy) + of the system property which can be set true/false to + determine system behaviour when a logging adapter class is + encountered which has bound to the wrong Log class implementation. + When set to false, an exception will be thrown and the app will fail + to start. When set to true, discovery will continue (though the user + might end up with a different logging implementation than they expected). + + Default behaviour: true (tolerates bad Log class hierarchy) + + See also method setAttribute. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +attributes

      +
      +protected java.util.Hashtable attributes
      +
      +
      Configuration attributes. +

      +

      +
      +
      +
      + +

      +instances

      +
      +protected java.util.Hashtable instances
      +
      +
      The Log instances that have + already been created, keyed by logger name. +

      +

      +
      +
      +
      + +

      +logConstructor

      +
      +protected java.lang.reflect.Constructor logConstructor
      +
      +
      The one-argument constructor of the + Log + implementation class that will be used to create new instances. + This value is initialized by getLogConstructor(), + and then returned repeatedly. +

      +

      +
      +
      +
      + +

      +logConstructorSignature

      +
      +protected java.lang.Class[] logConstructorSignature
      +
      +
      The signature of the Constructor to be used. +

      +

      +
      +
      +
      + +

      +logMethod

      +
      +protected java.lang.reflect.Method logMethod
      +
      +
      The one-argument setLogFactory method of the selected + Log method, if it exists. +

      +

      +
      +
      +
      + +

      +logMethodSignature

      +
      +protected java.lang.Class[] logMethodSignature
      +
      +
      The signature of the setLogFactory method to be used. +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +LogFactoryImpl

      +
      +public LogFactoryImpl()
      +
      +
      Public no-arguments constructor required by the lookup mechanism. +

      +

      + + + + + + + + +
      +Method Detail
      + +

      +getAttribute

      +
      +public java.lang.Object getAttribute(java.lang.String name)
      +
      +
      Return the configuration attribute with the specified name (if any), + or null if there is no such attribute. +

      +

      +
      Specified by:
      getAttribute in class LogFactory
      +
      +
      +
      Parameters:
      name - Name of the attribute to return
      +
      +
      +
      + +

      +getAttributeNames

      +
      +public java.lang.String[] getAttributeNames()
      +
      +
      Return an array containing the names of all currently defined + configuration attributes. If there are no such attributes, a zero + length array is returned. +

      +

      +
      Specified by:
      getAttributeNames in class LogFactory
      +
      +
      +
      +
      +
      +
      + +

      +getInstance

      +
      +public Log getInstance(java.lang.Class clazz)
      +                throws LogConfigurationException
      +
      +
      Convenience method to derive a name from the specified class and + call getInstance(String) with it. +

      +

      +
      Specified by:
      getInstance in class LogFactory
      +
      +
      +
      Parameters:
      clazz - Class for which a suitable Log name will be derived +
      Throws: +
      LogConfigurationException - if a suitable Log + instance cannot be returned
      +
      +
      +
      + +

      +getInstance

      +
      +public Log getInstance(java.lang.String name)
      +                throws LogConfigurationException
      +
      +

      Construct (if necessary) and return a Log instance, + using the factory's current set of configuration attributes.

      + +

      NOTE - Depending upon the implementation of + the LogFactory you are using, the Log + instance you are returned may or may not be local to the current + application, and may or may not be returned again on a subsequent + call with the same name argument.

      +

      +

      +
      Specified by:
      getInstance in class LogFactory
      +
      +
      +
      Parameters:
      name - Logical name of the Log instance to be + returned (the meaning of this name is only known to the underlying + logging implementation that is being wrapped) +
      Throws: +
      LogConfigurationException - if a suitable Log + instance cannot be returned
      +
      +
      +
      + +

      +release

      +
      +public void release()
      +
      +
      Release any internal references to previously created + Log + instances returned by this factory. This is useful in environments + like servlet containers, which implement application reloading by + throwing away a ClassLoader. Dangling references to objects in that + class loader would prevent garbage collection. +

      +

      +
      Specified by:
      release in class LogFactory
      +
      +
      +
      +
      +
      +
      + +

      +removeAttribute

      +
      +public void removeAttribute(java.lang.String name)
      +
      +
      Remove any configuration attribute associated with the specified name. + If there is no such attribute, no action is taken. +

      +

      +
      Specified by:
      removeAttribute in class LogFactory
      +
      +
      +
      Parameters:
      name - Name of the attribute to remove
      +
      +
      +
      + +

      +setAttribute

      +
      +public void setAttribute(java.lang.String name,
      +                         java.lang.Object value)
      +
      +
      Set the configuration attribute with the specified name. Calling + this with a null value is equivalent to calling + removeAttribute(name). +

      + This method can be used to set logging configuration programmatically + rather than via system properties. It can also be used in code running + within a container (such as a webapp) to configure behaviour on a + per-component level instead of globally as system properties would do. + To use this method instead of a system property, call +

      + LogFactory.getFactory().setAttribute(...)
      + 
      + This must be done before the first Log object is created; configuration + changes after that point will be ignored. +

      + This method is also called automatically if LogFactory detects a + commons-logging.properties file; every entry in that file is set + automatically as an attribute here. +

      +

      +
      Specified by:
      setAttribute in class LogFactory
      +
      +
      +
      Parameters:
      name - Name of the attribute to set
      value - Value of the attribute to set, or null + to remove any setting for this attribute
      +
      +
      +
      + +

      +getContextClassLoader

      +
      +protected static java.lang.ClassLoader getContextClassLoader()
      +                                                      throws LogConfigurationException
      +
      +
      Gets the context classloader. + This method is a workaround for a java 1.2 compiler bug. +

      +

      + +
      Throws: +
      LogConfigurationException
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +isDiagnosticsEnabled

      +
      +protected static boolean isDiagnosticsEnabled()
      +
      +
      Workaround for bug in Java1.2; in theory this method is not needed. + See LogFactory.isDiagnosticsEnabled. +

      +

      +
      +
      +
      +
      + +

      +getClassLoader

      +
      +protected static java.lang.ClassLoader getClassLoader(java.lang.Class clazz)
      +
      +
      Workaround for bug in Java1.2; in theory this method is not needed. + See LogFactory.getClassLoader. +

      +

      +
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +logDiagnostic

      +
      +protected void logDiagnostic(java.lang.String msg)
      +
      +
      Output a diagnostic message to a user-specified destination (if the + user has enabled diagnostic logging). +

      +

      +
      Parameters:
      msg - diagnostic message
      Since:
      +
      1.1
      +
      +
      +
      +
      + +

      +getLogClassName

      +
      +protected java.lang.String getLogClassName()
      +
      +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +

      +

      Return the fully qualified Java classname of the Log + implementation we will be using. +

      +

      +
      +
      +
      +
      + +

      +getLogConstructor

      +
      +protected java.lang.reflect.Constructor getLogConstructor()
      +                                                   throws LogConfigurationException
      +
      +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +

      +

      Return the Constructor that can be called to instantiate + new Log instances.

      + +

      IMPLEMENTATION NOTE - Race conditions caused by + calling this method from more than one thread are ignored, because + the same Constructor instance will ultimately be derived + in all circumstances.

      +

      +

      + +
      Throws: +
      LogConfigurationException - if a suitable constructor + cannot be returned
      +
      +
      +
      + +

      +isJdk13LumberjackAvailable

      +
      +protected boolean isJdk13LumberjackAvailable()
      +
      +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +

      +

      Is JDK 1.3 with Lumberjack logging available? +

      +

      +
      +
      +
      +
      + +

      +isJdk14Available

      +
      +protected boolean isJdk14Available()
      +
      +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +

      +

      Return true if JDK 1.4 or later logging + is available. Also checks that the Throwable class + supports getStackTrace(), which is required by + Jdk14Logger.

      +

      +

      +
      +
      +
      +
      + +

      +isLog4JAvailable

      +
      +protected boolean isLog4JAvailable()
      +
      +
      Deprecated. Never invoked by this class; subclasses should not assume + it will be. +

      +

      Is a Log4J implementation available? +

      +

      +
      +
      +
      +
      + +

      +newInstance

      +
      +protected Log newInstance(java.lang.String name)
      +                   throws LogConfigurationException
      +
      +
      Create and return a new Log + instance for the specified name. +

      +

      +
      Parameters:
      name - Name of the new logger +
      Throws: +
      LogConfigurationException - if a new instance cannot + be created
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogKitLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogKitLogger.html new file mode 100644 index 0000000..1fc3c0a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/LogKitLogger.html @@ -0,0 +1,785 @@ + + + + + + + +LogKitLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class LogKitLogger

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.LogKitLogger
      +
      +
      +
      All Implemented Interfaces:
      Log, java.io.Serializable
      +
      +
      +
      +
      public class LogKitLogger
      extends java.lang.Object
      implements Log, java.io.Serializable
      + +

      +

      Implementation of org.apache.commons.logging.Log + that wraps the avalon-logkit + logging system. Configuration of LogKit is left to the user. +

      + +

      LogKit accepts only String messages. + Therefore, this implementation converts object messages into strings + by called their toString() method before logging them.

      +

      + +

      +

      +
      Version:
      +
      $Id: LogKitLogger.java 424107 2006-07-20 23:15:42Z skitching $
      +
      Author:
      +
      Scott Sanders, Robert Burrell Donkin
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +protected  org.apache.log.Loggerlogger + +
      +          Logging goes to this LogKit logger
      +protected  java.lang.Stringname + +
      +          Name of this logger
      +  + + + + + + + + + + +
      +Constructor Summary
      LogKitLogger(java.lang.String name) + +
      +          Construct LogKitLogger which wraps the LogKit + logger with given name.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Logs a message with org.apache.log.Priority.DEBUG.
      + voiddebug(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log.Priority.DEBUG.
      + voiderror(java.lang.Object message) + +
      +          Logs a message with org.apache.log.Priority.ERROR.
      + voiderror(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log.Priority.ERROR.
      + voidfatal(java.lang.Object message) + +
      +          Logs a message with org.apache.log.Priority.FATAL_ERROR.
      + voidfatal(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log.Priority.FATAL_ERROR.
      + org.apache.log.LoggergetLogger() + +
      +          Return the underlying Logger we are using.
      + voidinfo(java.lang.Object message) + +
      +          Logs a message with org.apache.log.Priority.INFO.
      + voidinfo(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log.Priority.INFO.
      + booleanisDebugEnabled() + +
      +          Checks whether the LogKit logger will log messages of priority DEBUG.
      + booleanisErrorEnabled() + +
      +          Checks whether the LogKit logger will log messages of priority ERROR.
      + booleanisFatalEnabled() + +
      +          Checks whether the LogKit logger will log messages of priority FATAL_ERROR.
      + booleanisInfoEnabled() + +
      +          Checks whether the LogKit logger will log messages of priority INFO.
      + booleanisTraceEnabled() + +
      +          Checks whether the LogKit logger will log messages of priority DEBUG.
      + booleanisWarnEnabled() + +
      +          Checks whether the LogKit logger will log messages of priority WARN.
      + voidtrace(java.lang.Object message) + +
      +          Logs a message with org.apache.log.Priority.DEBUG.
      + voidtrace(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log.Priority.DEBUG.
      + voidwarn(java.lang.Object message) + +
      +          Logs a message with org.apache.log.Priority.WARN.
      + voidwarn(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with org.apache.log.Priority.WARN.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +logger

      +
      +protected transient org.apache.log.Logger logger
      +
      +
      Logging goes to this LogKit logger +

      +

      +
      +
      +
      + +

      +name

      +
      +protected java.lang.String name
      +
      +
      Name of this logger +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +LogKitLogger

      +
      +public LogKitLogger(java.lang.String name)
      +
      +
      Construct LogKitLogger which wraps the LogKit + logger with given name. +

      +

      Parameters:
      name - log name
      + + + + + + + + +
      +Method Detail
      + +

      +getLogger

      +
      +public org.apache.log.Logger getLogger()
      +
      +

      Return the underlying Logger we are using.

      +

      +

      +
      +
      +
      +
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log.Priority.DEBUG. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.trace(Object)
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log.Priority.DEBUG. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.trace(Object, Throwable)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log.Priority.DEBUG. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.debug(Object)
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log.Priority.DEBUG. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.debug(Object, Throwable)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log.Priority.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.info(Object)
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log.Priority.INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.info(Object, Throwable)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log.Priority.WARN. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.warn(Object)
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log.Priority.WARN. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.warn(Object, Throwable)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log.Priority.ERROR. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.error(Object)
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log.Priority.ERROR. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.error(Object, Throwable)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +
      Logs a message with org.apache.log.Priority.FATAL_ERROR. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.fatal(Object)
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Logs a message with org.apache.log.Priority.FATAL_ERROR. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.fatal(Object, Throwable)
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public boolean isDebugEnabled()
      +
      +
      Checks whether the LogKit logger will log messages of priority DEBUG. +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      true if debug is enabled in the underlying logger.
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public boolean isErrorEnabled()
      +
      +
      Checks whether the LogKit logger will log messages of priority ERROR. +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      true if error is enabled in the underlying logger.
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public boolean isFatalEnabled()
      +
      +
      Checks whether the LogKit logger will log messages of priority FATAL_ERROR. +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public boolean isInfoEnabled()
      +
      +
      Checks whether the LogKit logger will log messages of priority INFO. +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      true if info is enabled in the underlying logger.
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public boolean isTraceEnabled()
      +
      +
      Checks whether the LogKit logger will log messages of priority DEBUG. +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      true if trace is enabled in the underlying logger.
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public boolean isWarnEnabled()
      +
      +
      Checks whether the LogKit logger will log messages of priority WARN. +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      true if warn is enabled in the underlying logger.
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/NoOpLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/NoOpLog.html new file mode 100644 index 0000000..fa979a9 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/NoOpLog.html @@ -0,0 +1,716 @@ + + + + + + + +NoOpLog (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class NoOpLog

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.NoOpLog
      +
      +
      +
      All Implemented Interfaces:
      Log, java.io.Serializable
      +
      +
      +
      +
      public class NoOpLog
      extends java.lang.Object
      implements Log, java.io.Serializable
      + +

      +

      Trivial implementation of Log that throws away all messages. No + configurable system properties are supported.

      +

      + +

      +

      +
      Version:
      +
      $Id: NoOpLog.java 424107 2006-07-20 23:15:42Z skitching $
      +
      Author:
      +
      Scott Sanders, Rod Waldhoff
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + + + + +
      +Constructor Summary
      NoOpLog() + +
      +          Convenience constructor
      NoOpLog(java.lang.String name) + +
      +          Base constructor
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Do nothing
      + voiddebug(java.lang.Object message, + java.lang.Throwable t) + +
      +          Do nothing
      + voiderror(java.lang.Object message) + +
      +          Do nothing
      + voiderror(java.lang.Object message, + java.lang.Throwable t) + +
      +          Do nothing
      + voidfatal(java.lang.Object message) + +
      +          Do nothing
      + voidfatal(java.lang.Object message, + java.lang.Throwable t) + +
      +          Do nothing
      + voidinfo(java.lang.Object message) + +
      +          Do nothing
      + voidinfo(java.lang.Object message, + java.lang.Throwable t) + +
      +          Do nothing
      + booleanisDebugEnabled() + +
      +          Debug is never enabled.
      + booleanisErrorEnabled() + +
      +          Error is never enabled.
      + booleanisFatalEnabled() + +
      +          Fatal is never enabled.
      + booleanisInfoEnabled() + +
      +          Info is never enabled.
      + booleanisTraceEnabled() + +
      +          Trace is never enabled.
      + booleanisWarnEnabled() + +
      +          Warn is never enabled.
      + voidtrace(java.lang.Object message) + +
      +          Do nothing
      + voidtrace(java.lang.Object message, + java.lang.Throwable t) + +
      +          Do nothing
      + voidwarn(java.lang.Object message) + +
      +          Do nothing
      + voidwarn(java.lang.Object message, + java.lang.Throwable t) + +
      +          Do nothing
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + + + + +
      +Constructor Detail
      + +

      +NoOpLog

      +
      +public NoOpLog()
      +
      +
      Convenience constructor +

      +

      +
      + +

      +NoOpLog

      +
      +public NoOpLog(java.lang.String name)
      +
      +
      Base constructor +

      +

      + + + + + + + + +
      +Method Detail
      + +

      +trace

      +
      +public void trace(java.lang.Object message)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +trace

      +
      +public void trace(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +debug

      +
      +public void debug(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +info

      +
      +public void info(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +warn

      +
      +public void warn(java.lang.Object message,
      +                 java.lang.Throwable t)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +error

      +
      +public void error(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      +
      +
      +
      + +

      +fatal

      +
      +public void fatal(java.lang.Object message,
      +                  java.lang.Throwable t)
      +
      +
      Do nothing +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - log this message
      t - log this cause
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public final boolean isDebugEnabled()
      +
      +
      Debug is never enabled. +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      false
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public final boolean isErrorEnabled()
      +
      +
      Error is never enabled. +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      false
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public final boolean isFatalEnabled()
      +
      +
      Fatal is never enabled. +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      false
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public final boolean isInfoEnabled()
      +
      +
      Info is never enabled. +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      false
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public final boolean isTraceEnabled()
      +
      +
      Trace is never enabled. +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      false
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public final boolean isWarnEnabled()
      +
      +
      Warn is never enabled. +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      false
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/ServletContextCleaner.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/ServletContextCleaner.html new file mode 100644 index 0000000..fd7de83 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/ServletContextCleaner.html @@ -0,0 +1,313 @@ + + + + + + + +ServletContextCleaner (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class ServletContextCleaner

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.ServletContextCleaner
      +
      +
      +
      All Implemented Interfaces:
      java.util.EventListener, javax.servlet.ServletContextListener
      +
      +
      +
      +
      public class ServletContextCleaner
      extends java.lang.Object
      implements javax.servlet.ServletContextListener
      + +

      +This class is capable of receiving notifications about the undeployment of + a webapp, and responds by ensuring that commons-logging releases all + memory associated with the undeployed webapp. +

      + In general, the WeakHashtable support added in commons-logging release 1.1 + ensures that logging classes do not hold references that prevent an + undeployed webapp's memory from being garbage-collected even when multiple + copies of commons-logging are deployed via multiple classloaders (a + situation that earlier versions had problems with). However there are + some rare cases where the WeakHashtable approach does not work; in these + situations specifying this class as a listener for the web application will + ensure that all references held by commons-logging are fully released. +

      + To use this class, configure the webapp deployment descriptor to call + this class on webapp undeploy; the contextDestroyed method will tell + every accessable LogFactory class that the entry in its map for the + current webapp's context classloader should be cleared. +

      + +

      +

      +
      Since:
      +
      1.1
      +
      +
      + +

      + + + + + + + + + + + + + + + + +
      +Constructor Summary
      ServletContextCleaner() + +
      +           
      +  + + + + + + + + + + + + + + + +
      +Method Summary
      + voidcontextDestroyed(javax.servlet.ServletContextEvent sce) + +
      +          Invoked when a webapp is undeployed, this tells the LogFactory + class to release any logging information related to the current + contextClassloader.
      + voidcontextInitialized(javax.servlet.ServletContextEvent sce) + +
      +          Invoked when a webapp is deployed.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + + + + +
      +Constructor Detail
      + +

      +ServletContextCleaner

      +
      +public ServletContextCleaner()
      +
      +
      + + + + + + + + +
      +Method Detail
      + +

      +contextDestroyed

      +
      +public void contextDestroyed(javax.servlet.ServletContextEvent sce)
      +
      +
      Invoked when a webapp is undeployed, this tells the LogFactory + class to release any logging information related to the current + contextClassloader. +

      +

      +
      Specified by:
      contextDestroyed in interface javax.servlet.ServletContextListener
      +
      +
      +
      +
      +
      +
      + +

      +contextInitialized

      +
      +public void contextInitialized(javax.servlet.ServletContextEvent sce)
      +
      +
      Invoked when a webapp is deployed. Nothing needs to be done here. +

      +

      +
      Specified by:
      contextInitialized in interface javax.servlet.ServletContextListener
      +
      +
      +
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/SimpleLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/SimpleLog.html new file mode 100644 index 0000000..6c3436f --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/SimpleLog.html @@ -0,0 +1,1292 @@ + + + + + + + +SimpleLog (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class SimpleLog

      +
      +java.lang.Object
      +  extended byorg.apache.commons.logging.impl.SimpleLog
      +
      +
      +
      All Implemented Interfaces:
      Log, java.io.Serializable
      +
      +
      +
      +
      public class SimpleLog
      extends java.lang.Object
      implements Log, java.io.Serializable
      + +

      +

      Simple implementation of Log that sends all enabled log messages, + for all defined loggers, to System.err. The following system properties + are supported to configure the behavior of this logger:

      +
        +
      • org.apache.commons.logging.simplelog.defaultlog - + Default logging detail level for all instances of SimpleLog. + Must be one of ("trace", "debug", "info", "warn", "error", or "fatal"). + If not specified, defaults to "info".
      • +
      • org.apache.commons.logging.simplelog.log.xxxxx - + Logging detail level for a SimpleLog instance named "xxxxx". + Must be one of ("trace", "debug", "info", "warn", "error", or "fatal"). + If not specified, the default logging detail level is used.
      • +
      • org.apache.commons.logging.simplelog.showlogname - + Set to true if you want the Log instance name to be + included in output messages. Defaults to false.
      • +
      • org.apache.commons.logging.simplelog.showShortLogname - + Set to true if you want the last component of the name to be + included in output messages. Defaults to true.
      • +
      • org.apache.commons.logging.simplelog.showdatetime - + Set to true if you want the current date and time + to be included in output messages. Default is false.
      • +
      • org.apache.commons.logging.simplelog.dateTimeFormat - + The date and time format to be used in the output messages. + The pattern describing the date and time format is the same that is + used in java.text.SimpleDateFormat. If the format is not + specified or is invalid, the default format is used. + The default format is yyyy/MM/dd HH:mm:ss:SSS zzz.
      • +
      + +

      In addition to looking for system properties with the names specified + above, this implementation also checks for a class loader resource named + "simplelog.properties", and includes any matching definitions + from this resource (if it exists).

      +

      + +

      +

      +
      Version:
      +
      $Id: SimpleLog.java 581090 2007-10-01 22:01:06Z dennisl $
      +
      Author:
      +
      Scott Sanders, Rod Waldhoff, Robert Burrell Donkin
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Field Summary
      +protected  intcurrentLogLevel + +
      +          The current log level
      +protected static java.text.DateFormatdateFormatter + +
      +          Used to format times. +
      +protected static java.lang.StringdateTimeFormat + +
      +          The date and time format to use in the log message
      +protected static java.lang.StringDEFAULT_DATE_TIME_FORMAT + +
      +          The default format to use when formating dates
      +static intLOG_LEVEL_ALL + +
      +          Enable all logging levels
      +static intLOG_LEVEL_DEBUG + +
      +          "Debug" level logging.
      +static intLOG_LEVEL_ERROR + +
      +          "Error" level logging.
      +static intLOG_LEVEL_FATAL + +
      +          "Fatal" level logging.
      +static intLOG_LEVEL_INFO + +
      +          "Info" level logging.
      +static intLOG_LEVEL_OFF + +
      +          Enable no logging levels
      +static intLOG_LEVEL_TRACE + +
      +          "Trace" level logging.
      +static intLOG_LEVEL_WARN + +
      +          "Warn" level logging.
      +protected  java.lang.StringlogName + +
      +          The name of this simple log instance
      +protected static booleanshowDateTime + +
      +          Include the current time in the log message
      +protected static booleanshowLogName + +
      +          Include the instance name in the log message?
      +protected static booleanshowShortName + +
      +          Include the short name ( last component ) of the logger in the log + message.
      +protected static java.util.PropertiessimpleLogProps + +
      +          Properties loaded from simplelog.properties
      +protected static java.lang.StringsystemPrefix + +
      +          All system properties used by SimpleLog start with this
      +  + + + + + + + + + + +
      +Constructor Summary
      SimpleLog(java.lang.String name) + +
      +          Construct a simple log with given name.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + voiddebug(java.lang.Object message) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG.
      + voiddebug(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG.
      + voiderror(java.lang.Object message) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR.
      + voiderror(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR.
      + voidfatal(java.lang.Object message) + +
      +          Log a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL.
      + voidfatal(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL.
      + intgetLevel() + +
      +           Get logging level.
      + voidinfo(java.lang.Object message) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO.
      + voidinfo(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO.
      + booleanisDebugEnabled() + +
      +           Are debug messages currently enabled?
      + booleanisErrorEnabled() + +
      +           Are error messages currently enabled?
      + booleanisFatalEnabled() + +
      +           Are fatal messages currently enabled?
      + booleanisInfoEnabled() + +
      +           Are info messages currently enabled?
      +protected  booleanisLevelEnabled(int logLevel) + +
      +          Is the given log level currently enabled?
      + booleanisTraceEnabled() + +
      +           Are trace messages currently enabled?
      + booleanisWarnEnabled() + +
      +           Are warn messages currently enabled?
      +protected  voidlog(int type, + java.lang.Object message, + java.lang.Throwable t) + +
      +           Do the actual logging. +
      + voidsetLevel(int currentLogLevel) + +
      +           Set logging level.
      + voidtrace(java.lang.Object message) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE.
      + voidtrace(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE.
      + voidwarn(java.lang.Object message) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN.
      + voidwarn(java.lang.Object message, + java.lang.Throwable t) + +
      +          Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN.
      +protected  voidwrite(java.lang.StringBuffer buffer) + +
      +          Write the content of the message accumulated in the specified + StringBuffer to the appropriate output destination.
      + + + + + + + +
      Methods inherited from class java.lang.Object
      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +  +

      + + + + + + + + +
      +Field Detail
      + +

      +systemPrefix

      +
      +protected static final java.lang.String systemPrefix
      +
      +
      All system properties used by SimpleLog start with this +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +simpleLogProps

      +
      +protected static final java.util.Properties simpleLogProps
      +
      +
      Properties loaded from simplelog.properties +

      +

      +
      +
      +
      + +

      +DEFAULT_DATE_TIME_FORMAT

      +
      +protected static final java.lang.String DEFAULT_DATE_TIME_FORMAT
      +
      +
      The default format to use when formating dates +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +showLogName

      +
      +protected static boolean showLogName
      +
      +
      Include the instance name in the log message? +

      +

      +
      +
      +
      + +

      +showShortName

      +
      +protected static boolean showShortName
      +
      +
      Include the short name ( last component ) of the logger in the log + message. Defaults to true - otherwise we'll be lost in a flood of + messages without knowing who sends them. +

      +

      +
      +
      +
      + +

      +showDateTime

      +
      +protected static boolean showDateTime
      +
      +
      Include the current time in the log message +

      +

      +
      +
      +
      + +

      +dateTimeFormat

      +
      +protected static java.lang.String dateTimeFormat
      +
      +
      The date and time format to use in the log message +

      +

      +
      +
      +
      + +

      +dateFormatter

      +
      +protected static java.text.DateFormat dateFormatter
      +
      +
      Used to format times. +

      + Any code that accesses this object should first obtain a lock on it, + ie use synchronized(dateFormatter); this requirement was introduced + in 1.1.1 to fix an existing thread safety bug (SimpleDateFormat.format + is not thread-safe). +

      +

      +
      +
      +
      + +

      +LOG_LEVEL_TRACE

      +
      +public static final int LOG_LEVEL_TRACE
      +
      +
      "Trace" level logging. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_DEBUG

      +
      +public static final int LOG_LEVEL_DEBUG
      +
      +
      "Debug" level logging. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_INFO

      +
      +public static final int LOG_LEVEL_INFO
      +
      +
      "Info" level logging. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_WARN

      +
      +public static final int LOG_LEVEL_WARN
      +
      +
      "Warn" level logging. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_ERROR

      +
      +public static final int LOG_LEVEL_ERROR
      +
      +
      "Error" level logging. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_FATAL

      +
      +public static final int LOG_LEVEL_FATAL
      +
      +
      "Fatal" level logging. +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_ALL

      +
      +public static final int LOG_LEVEL_ALL
      +
      +
      Enable all logging levels +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +LOG_LEVEL_OFF

      +
      +public static final int LOG_LEVEL_OFF
      +
      +
      Enable no logging levels +

      +

      +
      See Also:
      Constant Field Values
      +
      +
      + +

      +logName

      +
      +protected java.lang.String logName
      +
      +
      The name of this simple log instance +

      +

      +
      +
      +
      + +

      +currentLogLevel

      +
      +protected int currentLogLevel
      +
      +
      The current log level +

      +

      +
      +
      + + + + + + + + +
      +Constructor Detail
      + +

      +SimpleLog

      +
      +public SimpleLog(java.lang.String name)
      +
      +
      Construct a simple log with given name. +

      +

      Parameters:
      name - log name
      + + + + + + + + +
      +Method Detail
      + +

      +setLevel

      +
      +public void setLevel(int currentLogLevel)
      +
      +

      Set logging level.

      +

      +

      +
      +
      +
      +
      Parameters:
      currentLogLevel - new logging level
      +
      +
      +
      + +

      +getLevel

      +
      +public int getLevel()
      +
      +

      Get logging level.

      +

      +

      +
      +
      +
      +
      +
      +
      +
      + +

      +log

      +
      +protected void log(int type,
      +                   java.lang.Object message,
      +                   java.lang.Throwable t)
      +
      +

      Do the actual logging. + This method assembles the message + and then calls write() to cause it to be written.

      +

      +

      +
      +
      +
      +
      Parameters:
      type - One of the LOG_LEVEL_XXX constants defining the log level
      message - The message itself (typically a String)
      t - The exception whose stack trace should be logged
      +
      +
      +
      + +

      +write

      +
      +protected void write(java.lang.StringBuffer buffer)
      +
      +

      Write the content of the message accumulated in the specified + StringBuffer to the appropriate output destination. The + default implementation writes to System.err.

      +

      +

      +
      +
      +
      +
      Parameters:
      buffer - A StringBuffer containing the accumulated + text to be logged
      +
      +
      +
      + +

      +isLevelEnabled

      +
      +protected boolean isLevelEnabled(int logLevel)
      +
      +
      Is the given log level currently enabled? +

      +

      +
      +
      +
      +
      Parameters:
      logLevel - is this level enabled?
      +
      +
      +
      + +

      +debug

      +
      +public final void debug(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.debug(Object)
      +
      +
      +
      + +

      +debug

      +
      +public final void debug(java.lang.Object message,
      +                        java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG. +

      +

      +
      Specified by:
      debug in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.debug(Object, Throwable)
      +
      +
      +
      + +

      +trace

      +
      +public final void trace(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.trace(Object)
      +
      +
      +
      + +

      +trace

      +
      +public final void trace(java.lang.Object message,
      +                        java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE. +

      +

      +
      Specified by:
      trace in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.trace(Object, Throwable)
      +
      +
      +
      + +

      +info

      +
      +public final void info(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.info(Object)
      +
      +
      +
      + +

      +info

      +
      +public final void info(java.lang.Object message,
      +                       java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO. +

      +

      +
      Specified by:
      info in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.info(Object, Throwable)
      +
      +
      +
      + +

      +warn

      +
      +public final void warn(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.warn(Object)
      +
      +
      +
      + +

      +warn

      +
      +public final void warn(java.lang.Object message,
      +                       java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN. +

      +

      +
      Specified by:
      warn in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.warn(Object, Throwable)
      +
      +
      +
      + +

      +error

      +
      +public final void error(java.lang.Object message)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.error(Object)
      +
      +
      +
      + +

      +error

      +
      +public final void error(java.lang.Object message,
      +                        java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR. +

      +

      +
      Specified by:
      error in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.error(Object, Throwable)
      +
      +
      +
      + +

      +fatal

      +
      +public final void fatal(java.lang.Object message)
      +
      +
      Log a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      See Also:
      Log.fatal(Object)
      +
      +
      +
      + +

      +fatal

      +
      +public final void fatal(java.lang.Object message,
      +                        java.lang.Throwable t)
      +
      +
      Logs a message with + org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL. +

      +

      +
      Specified by:
      fatal in interface Log
      +
      +
      +
      Parameters:
      message - to log
      t - log this cause
      See Also:
      Log.fatal(Object, Throwable)
      +
      +
      +
      + +

      +isDebugEnabled

      +
      +public final boolean isDebugEnabled()
      +
      +

      Are debug messages currently enabled?

      + +

      This allows expensive operations such as String + concatenation to be avoided when the message will be ignored by the + logger.

      +

      +

      +
      Specified by:
      isDebugEnabled in interface Log
      +
      +
      + +
      Returns:
      true if debug is enabled in the underlying logger.
      +
      +
      +
      + +

      +isErrorEnabled

      +
      +public final boolean isErrorEnabled()
      +
      +

      Are error messages currently enabled?

      + +

      This allows expensive operations such as String + concatenation to be avoided when the message will be ignored by the + logger.

      +

      +

      +
      Specified by:
      isErrorEnabled in interface Log
      +
      +
      + +
      Returns:
      true if error is enabled in the underlying logger.
      +
      +
      +
      + +

      +isFatalEnabled

      +
      +public final boolean isFatalEnabled()
      +
      +

      Are fatal messages currently enabled?

      + +

      This allows expensive operations such as String + concatenation to be avoided when the message will be ignored by the + logger.

      +

      +

      +
      Specified by:
      isFatalEnabled in interface Log
      +
      +
      + +
      Returns:
      true if fatal is enabled in the underlying logger.
      +
      +
      +
      + +

      +isInfoEnabled

      +
      +public final boolean isInfoEnabled()
      +
      +

      Are info messages currently enabled?

      + +

      This allows expensive operations such as String + concatenation to be avoided when the message will be ignored by the + logger.

      +

      +

      +
      Specified by:
      isInfoEnabled in interface Log
      +
      +
      + +
      Returns:
      true if info is enabled in the underlying logger.
      +
      +
      +
      + +

      +isTraceEnabled

      +
      +public final boolean isTraceEnabled()
      +
      +

      Are trace messages currently enabled?

      + +

      This allows expensive operations such as String + concatenation to be avoided when the message will be ignored by the + logger.

      +

      +

      +
      Specified by:
      isTraceEnabled in interface Log
      +
      +
      + +
      Returns:
      true if trace is enabled in the underlying logger.
      +
      +
      +
      + +

      +isWarnEnabled

      +
      +public final boolean isWarnEnabled()
      +
      +

      Are warn messages currently enabled?

      + +

      This allows expensive operations such as String + concatenation to be avoided when the message will be ignored by the + logger.

      +

      +

      +
      Specified by:
      isWarnEnabled in interface Log
      +
      +
      + +
      Returns:
      true if warn is enabled in the underlying logger.
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/WeakHashtable.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/WeakHashtable.html new file mode 100644 index 0000000..7875175 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/WeakHashtable.html @@ -0,0 +1,608 @@ + + + + + + + +WeakHashtable (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      + +

      + +org.apache.commons.logging.impl +
      +Class WeakHashtable

      +
      +java.lang.Object
      +  extended byjava.util.Dictionary
      +      extended byjava.util.Hashtable
      +          extended byorg.apache.commons.logging.impl.WeakHashtable
      +
      +
      +
      All Implemented Interfaces:
      java.lang.Cloneable, java.util.Map, java.io.Serializable
      +
      +
      +
      +
      public final class WeakHashtable
      extends java.util.Hashtable
      + +

      +

      Implementation of Hashtable that uses WeakReference's + to hold its keys thus allowing them to be reclaimed by the garbage collector. + The associated values are retained using strong references.

      + +

      This class follows the symantics of Hashtable as closely as + possible. It therefore does not accept null values or keys.

      + +

      Note: + This is not intended to be a general purpose hash table replacement. + This implementation is also tuned towards a particular purpose: for use as a replacement + for Hashtable in LogFactory. This application requires + good liveliness for get and put. Various tradeoffs + have been made with this in mind. +

      +

      + Usage: typical use case is as a drop-in replacement + for the Hashtable used in LogFactory for J2EE enviroments + running 1.3+ JVMs. Use of this class in most cases (see below) will + allow classloaders to be collected by the garbage collector without the need + to call LogFactory.release(ClassLoader). +

      + +

      org.apache.commons.logging.LogFactory checks whether this class + can be supported by the current JVM, and if so then uses it to store + references to the LogFactory implementationd it loads + (rather than using a standard Hashtable instance). + Having this class used instead of Hashtable solves + certain issues related to dynamic reloading of applications in J2EE-style + environments. However this class requires java 1.3 or later (due to its use + of java.lang.ref.WeakReference and associates). + And by the way, this extends Hashtable rather than HashMap + for backwards compatibility reasons. See the documentation + for method LogFactory.createFactoryStore for more details.

      + +

      The reason all this is necessary is due to a issue which + arises during hot deploy in a J2EE-like containers. + Each component running in the container owns one or more classloaders; when + the component loads a LogFactory instance via the component classloader + a reference to it gets stored in the static LogFactory.factories member, + keyed by the component's classloader so different components don't + stomp on each other. When the component is later unloaded, the container + sets the component's classloader to null with the intent that all the + component's classes get garbage-collected. However there's still a + reference to the component's classloader from a key in the "global" + LogFactory's factories member! If LogFactory.release() + is called whenever component is unloaded, the classloaders will be correctly + garbage collected; this should be done by any container that + bundles commons-logging by default. However, holding the classloader + references weakly ensures that the classloader will be garbage collected + without the container performing this step.

      + +

      + Limitations: + There is still one (unusual) scenario in which a component will not + be correctly unloaded without an explicit release. Though weak references + are used for its keys, it is necessary to use strong references for its values. +

      + +

      If the abstract class LogFactory is + loaded by the container classloader but a subclass of + LogFactory [LogFactory1] is loaded by the component's + classloader and an instance stored in the static map associated with the + base LogFactory class, then there is a strong reference from the LogFactory + class to the LogFactory1 instance (as normal) and a strong reference from + the LogFactory1 instance to the component classloader via + getClass().getClassLoader(). This chain of references will prevent + collection of the child classloader.

      + +

      + Such a situation occurs when the commons-logging.jar is + loaded by a parent classloader (e.g. a server level classloader in a + servlet container) and a custom LogFactory implementation is + loaded by a child classloader (e.g. a web app classloader).

      + +

      To avoid this scenario, ensure + that any custom LogFactory subclass is loaded by the same classloader as + the base LogFactory. Creating custom LogFactory subclasses is, + however, rare. The standard LogFactoryImpl class should be sufficient + for most or all users.

      +

      + +

      +

      +
      Since:
      +
      1.1
      +
      Author:
      +
      Brian Stansberry
      +
      See Also:
      Serialized Form
      +
      + +

      + + + + + + + + + + + + + + + + +
      +Constructor Summary
      WeakHashtable() + +
      +          Constructs a WeakHashtable with the Hashtable default + capacity and load factor.
      +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Method Summary
      + booleancontainsKey(java.lang.Object key) + +
      +           
      + java.util.Enumerationelements() + +
      +           
      + java.util.SetentrySet() + +
      +           
      + java.lang.Objectget(java.lang.Object key) + +
      +           
      + booleanisEmpty() + +
      +           
      + java.util.Enumerationkeys() + +
      +           
      + java.util.SetkeySet() + +
      +           
      + java.lang.Objectput(java.lang.Object key, + java.lang.Object value) + +
      +           
      + voidputAll(java.util.Map t) + +
      +           
      +protected  voidrehash() + +
      +           
      + java.lang.Objectremove(java.lang.Object key) + +
      +           
      + intsize() + +
      +           
      + java.lang.StringtoString() + +
      +           
      + java.util.Collectionvalues() + +
      +           
      + + + + + + + +
      Methods inherited from class java.util.Hashtable
      clear, clone, contains, containsValue, equals, hashCode
      + + + + + + + +
      Methods inherited from class java.lang.Object
      finalize, getClass, notify, notifyAll, wait, wait, wait
      +  +

      + + + + + + + + + + + +
      +Constructor Detail
      + +

      +WeakHashtable

      +
      +public WeakHashtable()
      +
      +
      Constructs a WeakHashtable with the Hashtable default + capacity and load factor. +

      +

      + + + + + + + + +
      +Method Detail
      + +

      +containsKey

      +
      +public boolean containsKey(java.lang.Object key)
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +elements

      +
      +public java.util.Enumeration elements()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +entrySet

      +
      +public java.util.Set entrySet()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +get

      +
      +public java.lang.Object get(java.lang.Object key)
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +keys

      +
      +public java.util.Enumeration keys()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +keySet

      +
      +public java.util.Set keySet()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +put

      +
      +public java.lang.Object put(java.lang.Object key,
      +                            java.lang.Object value)
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +putAll

      +
      +public void putAll(java.util.Map t)
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +values

      +
      +public java.util.Collection values()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +remove

      +
      +public java.lang.Object remove(java.lang.Object key)
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +isEmpty

      +
      +public boolean isEmpty()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +size

      +
      +public int size()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +toString

      +
      +public java.lang.String toString()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      +
      + +

      +rehash

      +
      +protected void rehash()
      +
      +
      +
      See Also:
      Hashtable
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/AvalonLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/AvalonLogger.html new file mode 100644 index 0000000..11d7009 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/AvalonLogger.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.AvalonLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.AvalonLogger

      +
      +No usage of org.apache.commons.logging.impl.AvalonLogger +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk13LumberjackLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk13LumberjackLogger.html new file mode 100644 index 0000000..dcadd3f --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk13LumberjackLogger.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.Jdk13LumberjackLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.Jdk13LumberjackLogger

      +
      +No usage of org.apache.commons.logging.impl.Jdk13LumberjackLogger +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk14Logger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk14Logger.html new file mode 100644 index 0000000..3b50301 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Jdk14Logger.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.Jdk14Logger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.Jdk14Logger

      +
      +No usage of org.apache.commons.logging.impl.Jdk14Logger +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Log4JLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Log4JLogger.html new file mode 100644 index 0000000..32ae758 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/Log4JLogger.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.Log4JLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.Log4JLogger

      +
      +No usage of org.apache.commons.logging.impl.Log4JLogger +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogFactoryImpl.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogFactoryImpl.html new file mode 100644 index 0000000..48ee8a3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogFactoryImpl.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.LogFactoryImpl (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.LogFactoryImpl

      +
      +No usage of org.apache.commons.logging.impl.LogFactoryImpl +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogKitLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogKitLogger.html new file mode 100644 index 0000000..9b57888 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/LogKitLogger.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.LogKitLogger (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.LogKitLogger

      +
      +No usage of org.apache.commons.logging.impl.LogKitLogger +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/NoOpLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/NoOpLog.html new file mode 100644 index 0000000..2db7eb7 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/NoOpLog.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.NoOpLog (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.NoOpLog

      +
      +No usage of org.apache.commons.logging.impl.NoOpLog +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/ServletContextCleaner.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/ServletContextCleaner.html new file mode 100644 index 0000000..89d1d85 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/ServletContextCleaner.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.ServletContextCleaner (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.ServletContextCleaner

      +
      +No usage of org.apache.commons.logging.impl.ServletContextCleaner +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/SimpleLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/SimpleLog.html new file mode 100644 index 0000000..2a436cd --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/SimpleLog.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.SimpleLog (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.SimpleLog

      +
      +No usage of org.apache.commons.logging.impl.SimpleLog +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/WeakHashtable.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/WeakHashtable.html new file mode 100644 index 0000000..654099e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/class-use/WeakHashtable.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Class org.apache.commons.logging.impl.WeakHashtable (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Class
      org.apache.commons.logging.impl.WeakHashtable

      +
      +No usage of org.apache.commons.logging.impl.WeakHashtable +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-frame.html new file mode 100644 index 0000000..43c1357 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-frame.html @@ -0,0 +1,51 @@ + + + + + + + +org.apache.commons.logging.impl (Commons Logging 1.1.1 API) + + + + + + + + + + + +org.apache.commons.logging.impl + + + + +
      +Classes  + +
      +AvalonLogger +
      +Jdk13LumberjackLogger +
      +Jdk14Logger +
      +Log4JLogger +
      +LogFactoryImpl +
      +LogKitLogger +
      +NoOpLog +
      +ServletContextCleaner +
      +SimpleLog +
      +WeakHashtable
      + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-summary.html new file mode 100644 index 0000000..64a7ea5 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-summary.html @@ -0,0 +1,218 @@ + + + + + + + +org.apache.commons.logging.impl (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +

      +Package org.apache.commons.logging.impl +

      +Concrete implementations of commons-logging wrapper APIs. +

      +See: +
      +          Description +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Class Summary
      AvalonLoggerImplementation of commons-logging Log interface that delegates all + logging calls to the Avalon logging abstraction: the Logger interface. +
      Jdk13LumberjackLoggerImplementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that are + available in SourceForge's Lumberjack for JDKs prior to 1.4.
      Jdk14LoggerImplementation of the org.apache.commons.logging.Log + interface that wraps the standard JDK logging mechanisms that were + introduced in the Merlin release (JDK 1.4).
      Log4JLoggerImplementation of Log that maps directly to a + Logger for log4J version 1.2. +
      LogFactoryImplConcrete subclass of LogFactory that implements the + following algorithm to dynamically select a logging implementation + class to instantiate a wrapper for.
      LogKitLoggerImplementation of org.apache.commons.logging.Log + that wraps the avalon-logkit + logging system.
      NoOpLogTrivial implementation of Log that throws away all messages.
      ServletContextCleanerThis class is capable of receiving notifications about the undeployment of + a webapp, and responds by ensuring that commons-logging releases all + memory associated with the undeployed webapp. +
      SimpleLogSimple implementation of Log that sends all enabled log messages, + for all defined loggers, to System.err.
      WeakHashtableImplementation of Hashtable that uses WeakReference's + to hold its keys thus allowing them to be reclaimed by the garbage collector. +
      +  + +

      +

      +Package org.apache.commons.logging.impl Description +

      + +

      +

      Concrete implementations of commons-logging wrapper APIs.

      +

      + +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-tree.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-tree.html new file mode 100644 index 0000000..d9e1c36 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-tree.html @@ -0,0 +1,161 @@ + + + + + + + +org.apache.commons.logging.impl Class Hierarchy (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Hierarchy For Package org.apache.commons.logging.impl +

      +
      +
      +
      Package Hierarchies:
      All Packages
      +
      +

      +Class Hierarchy +

      +
        +
      • class java.lang.Object
          +
        • class org.apache.commons.logging.impl.AvalonLogger (implements org.apache.commons.logging.Log) +
        • class java.util.Dictionary
            +
          • class java.util.Hashtable (implements java.lang.Cloneable, java.util.Map, java.io.Serializable) + +
          +
        • class org.apache.commons.logging.impl.Jdk13LumberjackLogger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.Jdk14Logger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.Log4JLogger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.LogFactory +
        • class org.apache.commons.logging.impl.LogKitLogger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.NoOpLog (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.ServletContextCleaner (implements javax.servlet.ServletContextListener) +
        • class org.apache.commons.logging.impl.SimpleLog (implements org.apache.commons.logging.Log, java.io.Serializable) +
        +
      +
      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-use.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-use.html new file mode 100644 index 0000000..1905d97 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/impl/package-use.html @@ -0,0 +1,137 @@ + + + + + + + +Uses of Package org.apache.commons.logging.impl (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Package
      org.apache.commons.logging.impl

      +
      +No usage of org.apache.commons.logging.impl +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-frame.html new file mode 100644 index 0000000..e174437 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-frame.html @@ -0,0 +1,57 @@ + + + + + + + +org.apache.commons.logging (Commons Logging 1.1.1 API) + + + + + + + + + + + +org.apache.commons.logging + + + + +
      +Interfaces  + +
      +Log
      + + + + + + +
      +Classes  + +
      +LogFactory +
      +LogSource
      + + + + + + +
      +Exceptions  + +
      +LogConfigurationException
      + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-summary.html new file mode 100644 index 0000000..6dbfd74 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-summary.html @@ -0,0 +1,433 @@ + + + + + + + +org.apache.commons.logging (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +

      +Package org.apache.commons.logging +

      +Simple wrapper API around multiple logging APIs. +

      +See: +
      +          Description +

      + + + + + + + + + +
      +Interface Summary
      LogA simple logging interface abstracting logging APIs.
      +  + +

      + + + + + + + + + + + + + +
      +Class Summary
      LogFactoryFactory for creating Log instances, with discovery and + configuration features similar to that employed by standard Java APIs + such as JAXP.
      LogSourceDeprecated. Use LogFactory instead - The default factory + implementation performs exactly the same algorithm as this class did
      +  + +

      + + + + + + + + + +
      +Exception Summary
      LogConfigurationExceptionAn exception that is thrown only if a suitable LogFactory + or Log instance cannot be created by the corresponding + factory methods.
      +  + +

      +

      +Package org.apache.commons.logging Description +

      + +

      +

      Simple wrapper API around multiple logging APIs.

      + + +

      Overview

      + +

      This package provides an API for logging in server-based applications that +can be used around a variety of different logging implementations, including +prebuilt support for the following:

      +
        +
      • Log4J (version 1.2 or later) + from Apache's Logging project. Each named Log + instance is connected to a corresponding Log4J Logger.
      • +
      • + JDK Logging API, included in JDK 1.4 or later systems. Each named + Log instance is connected to a corresponding + java.util.logging.Logger instance.
      • +
      • LogKit from Apache's + Avalon project. Each named Log instance is + connected to a corresponding LogKit Logger.
      • +
      • NoOpLog implementation that simply swallows + all log output, for all named Log instances.
      • +
      • SimpleLog implementation that writes all + log output, for all named Log instances, to + System.err.
      • +
      + + +

      Quick Start Guide

      + +

      For those impatient to just get on with it, the following example +illustrates the typical declaration and use of a logger that is named (by +convention) after the calling class: + +

      +    import org.apache.commons.logging.Log;
      +    import org.apache.commons.logging.LogFactory;
      +
      +    public class Foo {
      +
      +        private Log log = LogFactory.getLog(Foo.class);
      +
      +        public void foo() {
      +            ...
      +            try {
      +                if (log.isDebugEnabled()) {
      +                    log.debug("About to do something to object " + name);
      +                }
      +                name.bar();
      +            } catch (IllegalStateException e) {
      +                log.error("Something bad happened to " + name, e);
      +            }
      +            ...
      +        }
      +
      + +

      Unless you configure things differently, all log output will be written +to System.err. Therefore, you really will want to review the remainder of +this page in order to understand how to configure logging for your +application.

      + + +

      Configuring the Commons Logging Package

      + + +

      Choosing a LogFactory Implementation

      + +

      From an application perspective, the first requirement is to retrieve an +object reference to the LogFactory instance that will be used +to create Log instances for this +application. This is normally accomplished by calling the static +getFactory() method. This method implements the following +discovery algorithm to select the name of the LogFactory +implementation class this application wants to use:

      +
        +
      • Check for a system property named + org.apache.commons.logging.LogFactory.
      • +
      • Use the JDK 1.3 JAR Services Discovery mechanism (see + + http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html for + more information) to look for a resource named + META-INF/services/org.apache.commons.logging.LogFactory + whose first line is assumed to contain the desired class name.
      • +
      • Look for a properties file named commons-logging.properties + visible in the application class path, with a property named + org.apache.commons.logging.LogFactory defining the + desired implementation class name.
      • +
      • Fall back to a default implementation, which is described + further below.
      • +
      + +

      If a commons-logging.properties file is found, all of the +properties defined there are also used to set configuration attributes on +the instantiated LogFactory instance.

      + +

      Once an implementation class name is selected, the corresponding class is +loaded from the current Thread context class loader (if there is one), or +from the class loader that loaded the LogFactory class itself +otherwise. This allows a copy of commons-logging.jar to be +shared in a multiple class loader environment (such as a servlet container), +but still allow each web application to provide its own LogFactory +implementation, if it so desires. An instance of this class will then be +created, and cached per class loader. + + +

      The Default LogFactory Implementation

      + +

      The Logging Package APIs include a default LogFactory +implementation class ( +org.apache.commons.logging.impl.LogFactoryImpl) that is selected if no +other implementation class name can be discovered. Its primary purpose is +to create (as necessary) and return Log instances +in response to calls to the getInstance() method. The default +implementation uses the following rules:

      +
        +
      • At most one Log instance of the same name will be created. + Subsequent getInstance() calls to the same + LogFactory instance, with the same name or Class + parameter, will return the same Log instance.
      • +
      • When a new Log instance must be created, the default + LogFactory implementation uses the following discovery + process: +
          +
        • Look for a configuration attribute of this factory named + org.apache.commons.logging.Log (for backwards + compatibility to pre-1.0 versions of this API, an attribute + org.apache.commons.logging.log is also consulted).
        • +
        • Look for a system property named + org.apache.commons.logging.Log (for backwards + compatibility to pre-1.0 versions of this API, a system property + org.apache.commons.logging.log is also consulted).
        • +
        • If the Log4J logging system is available in the application + class path, use the corresponding wrapper class + (Log4JLogger).
        • +
        • If the application is executing on a JDK 1.4 system, use + the corresponding wrapper class + (Jdk14Logger).
        • +
        • Fall back to the default simple logging implementation + (SimpleLog).
        • +
      • +
      • Load the class of the specified name from the thread context class + loader (if any), or from the class loader that loaded the + LogFactory class otherwise.
      • +
      • Instantiate an instance of the selected Log + implementation class, passing the specified name as the single + argument to its constructor.
      • +
      + +

      See the SimpleLog JavaDocs for detailed +configuration information for this default implementation.

      + + +

      Configuring the Underlying Logging System

      + +

      The basic principle is that the user is totally responsible for the +configuration of the underlying logging system. +Commons-logging should not change the existing configuration.

      + +

      Each individual Log implementation may +support its own configuration properties. These will be documented in the +class descriptions for the corresponding implementation class.

      + +

      Finally, some Log implementations (such as the one for Log4J) +require an external configuration file for the entire logging environment. +This file should be prepared in a manner that is specific to the actual logging +technology being used.

      + + +

      Using the Logging Package APIs

      + +

      Use of the Logging Package APIs, from the perspective of an application +component, consists of the following steps:

      +
        +
      1. Acquire a reference to an instance of + org.apache.commons.logging.Log, by calling the + factory method + + LogFactory.getInstance(String name). Your application can contain + references to multiple loggers that are used for different + purposes. A typical scenario for a server application is to have each + major component of the server use its own Log instance.
      2. +
      3. Cause messages to be logged (if the corresponding detail level is enabled) + by calling appropriate methods (trace(), debug(), + info(), warn(), error, and + fatal()).
      4. +
      + +

      For convenience, LogFactory also offers a static method +getLog() that combines the typical two-step pattern:

      +
      +  Log log = LogFactory.getFactory().getInstance(Foo.class);
      +
      +

      into a single method call:

      +
      +  Log log = LogFactory.getLog(Foo.class);
      +
      + +

      For example, you might use the following technique to initialize and +use a Log instance in an application component:

      +
      +import org.apache.commons.logging.Log;
      +import org.apache.commons.logging.LogFactory;
      +
      +public class MyComponent {
      +
      +  protected Log log =
      +    LogFactory.getLog(MyComponent.class);
      +
      +  // Called once at startup time
      +  public void start() {
      +    ...
      +    log.info("MyComponent started");
      +    ...
      +  }
      +
      +  // Called once at shutdown time
      +  public void stop() {
      +    ...
      +    log.info("MyComponent stopped");
      +    ...
      +  }
      +
      +  // Called repeatedly to process a particular argument value
      +  // which you want logged if debugging is enabled
      +  public void process(String value) {
      +    ...
      +    // Do the string concatenation only if logging is enabled
      +    if (log.isDebugEnabled())
      +      log.debug("MyComponent processing " + value);
      +    ...
      +  }
      +
      +}
      +
      +

      + +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-tree.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-tree.html new file mode 100644 index 0000000..3174753 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-tree.html @@ -0,0 +1,158 @@ + + + + + + + +org.apache.commons.logging Class Hierarchy (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Hierarchy For Package org.apache.commons.logging +

      +
      +
      +
      Package Hierarchies:
      All Packages
      +
      +

      +Class Hierarchy +

      +
        +
      • class java.lang.Object
          +
        • class org.apache.commons.logging.LogFactory
        • class org.apache.commons.logging.LogSource
        • class java.lang.Throwable (implements java.io.Serializable) +
            +
          • class java.lang.Exception +
          +
        +
      +

      +Interface Hierarchy +

      +
        +
      • interface org.apache.commons.logging.Log
      +
      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-use.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-use.html new file mode 100644 index 0000000..9a27142 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/org/apache/commons/logging/package-use.html @@ -0,0 +1,214 @@ + + + + + + + +Uses of Package org.apache.commons.logging (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Uses of Package
      org.apache.commons.logging

      +
      + + + + + + + + + + + + + +
      +Packages that use org.apache.commons.logging
      org.apache.commons.loggingSimple wrapper API around multiple logging APIs. 
      org.apache.commons.logging.implConcrete implementations of commons-logging wrapper APIs. 
      +  +

      + + + + + + + + + + + + + + +
      +Classes in org.apache.commons.logging used by org.apache.commons.logging
      Log + +
      +          A simple logging interface abstracting logging APIs.
      LogConfigurationException + +
      +          An exception that is thrown only if a suitable LogFactory + or Log instance cannot be created by the corresponding + factory methods.
      LogFactory + +
      +          Factory for creating Log instances, with discovery and + configuration features similar to that employed by standard Java APIs + such as JAXP.
      +  +

      + + + + + + + + + + + + + + +
      +Classes in org.apache.commons.logging used by org.apache.commons.logging.impl
      Log + +
      +          A simple logging interface abstracting logging APIs.
      LogConfigurationException + +
      +          An exception that is thrown only if a suitable LogFactory + or Log instance cannot be created by the corresponding + factory methods.
      LogFactory + +
      +          Factory for creating Log instances, with discovery and + configuration features similar to that employed by standard Java APIs + such as JAXP.
      +  +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-frame.html new file mode 100644 index 0000000..e986f5e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-frame.html @@ -0,0 +1,45 @@ + + + + + + + +Overview (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + +
      +
      + + + + + +
      All Classes +

      + +Packages +
      +org.apache.commons.logging +
      +org.apache.commons.logging.impl +
      +

      + +

      +  + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-summary.html new file mode 100644 index 0000000..47941cc --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-summary.html @@ -0,0 +1,154 @@ + + + + + + + +Overview (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +


      +
      +

      +Commons Logging 1.1.1 API +

      +
      + + + + + + + + + + + + + +
      +Packages
      org.apache.commons.loggingSimple wrapper API around multiple logging APIs.
      org.apache.commons.logging.implConcrete implementations of commons-logging wrapper APIs.
      + +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-tree.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-tree.html new file mode 100644 index 0000000..7fe0458 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/overview-tree.html @@ -0,0 +1,172 @@ + + + + + + + +Class Hierarchy (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Hierarchy For All Packages

      +
      +
      +
      Package Hierarchies:
      org.apache.commons.logging, org.apache.commons.logging.impl
      +
      +

      +Class Hierarchy +

      +
        +
      • class java.lang.Object
          +
        • class org.apache.commons.logging.impl.AvalonLogger (implements org.apache.commons.logging.Log) +
        • class java.util.Dictionary
            +
          • class java.util.Hashtable (implements java.lang.Cloneable, java.util.Map, java.io.Serializable) + +
          +
        • class org.apache.commons.logging.impl.Jdk13LumberjackLogger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.Jdk14Logger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.Log4JLogger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.LogFactory +
        • class org.apache.commons.logging.impl.LogKitLogger (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.LogSource
        • class org.apache.commons.logging.impl.NoOpLog (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class org.apache.commons.logging.impl.ServletContextCleaner (implements javax.servlet.ServletContextListener) +
        • class org.apache.commons.logging.impl.SimpleLog (implements org.apache.commons.logging.Log, java.io.Serializable) +
        • class java.lang.Throwable (implements java.io.Serializable) +
            +
          • class java.lang.Exception +
          +
        +
      +

      +Interface Hierarchy +

      +
        +
      • interface org.apache.commons.logging.Log
      +
      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/package-list b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/package-list new file mode 100644 index 0000000..7d2d655 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/package-list @@ -0,0 +1,2 @@ +org.apache.commons.logging +org.apache.commons.logging.impl diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages new file mode 100644 index 0000000..4ad1865 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages @@ -0,0 +1,2 @@ +org.apache.commons.logging.impl +org.apache.commons.logging \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages.html new file mode 100644 index 0000000..07cb1ba --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/packages.html @@ -0,0 +1,38 @@ + + + + + + + + (Commons Logging 1.1.1 API) + + + + + + + + + + + +
      + +
      + +
      +
      +The front page has been relocated.Please see: +
      +          Frame version +
      +          Non-frame version.
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/resources/inherit.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/serialized-form.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/serialized-form.html new file mode 100644 index 0000000..4f2f300 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/serialized-form.html @@ -0,0 +1,429 @@ + + + + + + + +Serialized Form (Commons Logging 1.1.1 API) + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + +
      +
      +

      +Serialized Form

      +
      +
      + + + + + +
      +Package org.apache.commons.logging.impl
      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.Jdk13LumberjackLogger extends java.lang.Object implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +name

      +
      +java.lang.String name
      +
      +
      +
      +
      +
      + +

      +sourceClassName

      +
      +java.lang.String sourceClassName
      +
      +
      +
      +
      +
      + +

      +sourceMethodName

      +
      +java.lang.String sourceMethodName
      +
      +
      +
      +
      +
      + +

      +classAndMethodFound

      +
      +boolean classAndMethodFound
      +
      +
      +
      +
      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.Jdk14Logger extends java.lang.Object implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +name

      +
      +java.lang.String name
      +
      +
      The name of the logger we are wrapping. +

      +

      +
      +
      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.Log4JLogger extends java.lang.Object implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +name

      +
      +java.lang.String name
      +
      +
      Logger name +

      +

      +
      +
      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.LogKitLogger extends java.lang.Object implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +name

      +
      +java.lang.String name
      +
      +
      Name of this logger +

      +

      +
      +
      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.NoOpLog extends java.lang.Object implements Serializable
      + +

      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.SimpleLog extends java.lang.Object implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +logName

      +
      +java.lang.String logName
      +
      +
      The name of this simple log instance +

      +

      +
      +
      +
      + +

      +currentLogLevel

      +
      +int currentLogLevel
      +
      +
      The current log level +

      +

      +
      +
      +
      + +

      +shortLogName

      +
      +java.lang.String shortLogName
      +
      +
      The short name of this simple log instance +

      +

      +
      +
      + +

      + + + + + +
      +Class org.apache.commons.logging.impl.WeakHashtable extends java.util.Hashtable implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +queue

      +
      +java.lang.ref.ReferenceQueue queue
      +
      +
      +
      +
      +
      + +

      +changeCount

      +
      +int changeCount
      +
      +
      +
      +
      + +

      +


      + + + + + +
      +Package org.apache.commons.logging
      + +

      + + + + + +
      +Class org.apache.commons.logging.LogConfigurationException extends java.lang.RuntimeException implements Serializable
      + +

      + + + + + +
      +Serialized Fields
      + +

      +cause

      +
      +java.lang.Throwable cause
      +
      +
      The underlying cause of this exception. +

      +

      +
      +
      + +

      +


      + + + + + + + + + + + + + + + +
      + +
      + + + +
      +Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/stylesheet.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/stylesheet.css new file mode 100644 index 0000000..6d31fdb --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ +.TableRowColor { background: #FFFFFF } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/building.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/building.html new file mode 100644 index 0000000..70acce2 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/building.html @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + Commons Logging - + Building + + + + + + + + +
      + +
      +
      +
      + + + + +

      Overview

      +

      + Commons Logging uses Maven 2.0.x as its + primary build system. Ant can also be used. +

      +
      + +

      Maven

      +

      + To build the full website, run +

      +
      mvn site
      +

      + The result will be in the target/site folder. + You must be online and using JDK 1.4 or higher to successfully complete this target. +

      +

      + To build the jar files, run +

      +
      mvn package
      +

      + The resulting 4 jar files will be in the target folder. + You must use JDK 1.4 or higher to successfully complete this target. +

      +

      + To create a full distribution, run +

      +
      mvn clean site assembly:assembly
      +

      + The resulting .zip and .tar.gz files will be in the target folder. + You must use JDK 1.4 or higher to successfully complete this target. +

      +

      + Further details can be found in the + commons build instructions. +

      +
      + +

      Ant

      +

      + We still use Ant to test the artifacts built my Maven. + Please follow the instructions in the file build-testing.xml. +

      +

      + Note: A 1.2 JDK is needed to run the tests. +

      +
      + + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/clirr-report.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/clirr-report.html new file mode 100644 index 0000000..2142240 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/clirr-report.html @@ -0,0 +1,352 @@ + + + + + + + + + + + + + + Commons Logging - Clirr Results + + + + + + + +
      + +
      +
      +
      +

      Clirr Results

      The following document contains the results of Clirr.

      Summary

      SeverityNumber
      Error Error0
      Warning Warning0

      (The results have been filtered to omit less severe results)

      Details

      No results for the given severities.

      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-base.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-base.css new file mode 100644 index 0000000..4e6bd85 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-base.css @@ -0,0 +1,148 @@ +body { + margin: 0px; + padding: 0px; +} +img { + border:none; +} +table { + padding:0px; + width: 100%; + margin-left: -2px; + margin-right: -2px; +} +acronym { + cursor: help; + border-bottom: 1px dotted #feb; +} +table.bodyTable th, table.bodyTable td { + padding: 2px 4px 2px 4px; + vertical-align: top; +} +div.clear{ + clear:both; + visibility: hidden; +} +div.clear hr{ + display: none; +} +#bannerLeft, #bannerRight { + font-size: xx-large; + font-weight: bold; +} +#bannerLeft img, #bannerRight img { + margin: 0px; +} +.xleft, #bannerLeft img { + float:left; + text-shadow: #7CFC00; +} +.xright, #bannerRight img { + float:right; + text-shadow: #7CFC00; +} +#banner { + padding: 0px; +} +#banner img { + border: none; +} +#breadcrumbs { + padding: 3px 10px 3px 10px; +} +#leftColumn { + width: 170px; + float:left; + overflow: auto; +} +#bodyColumn { + margin-right: 1.5em; + margin-left: 197px; +} +#legend { + padding: 8px 0 8px 0; +} +#navcolumn { + padding: 8px 4px 0 8px; +} +#navcolumn h5 { + margin: 0; + padding: 0; + font-size: small; +} +#navcolumn ul { + margin: 0; + padding: 0; + font-size: small; +} +#navcolumn li { + list-style-type: none; + background-image: none; + background-repeat: no-repeat; + background-position: 0 0.4em; + padding-left: 16px; + list-style-position: outside; + line-height: 1.2em; + font-size: smaller; +} +#navcolumn li.expanded { + background-image: url(../images/expanded.gif); +} +#navcolumn li.collapsed { + background-image: url(../images/collapsed.gif); +} +#poweredBy { + text-align: center; +} +#navcolumn img { + margin-top: 10px; + margin-bottom: 3px; +} +#poweredBy img { + display:block; + margin: 20px 0 20px 17px; + border: 1px solid black; + width: 90px; + height: 30px; +} +#search img { + margin: 0px; + display: block; +} +#search #q, #search #btnG { + border: 1px solid #999; + margin-bottom:10px; +} +#search form { + margin: 0px; +} +#lastPublished { + font-size: x-small; +} +.navSection { + margin-bottom: 2px; + padding: 8px; +} +.navSectionHead { + font-weight: bold; + font-size: x-small; +} +.section { + padding: 4px; +} +#footer { + padding: 3px 10px 3px 10px; + font-size: x-small; +} +#breadcrumbs { + font-size: x-small; + margin: 0pt; +} +.source { + padding: 12px; + margin: 1em 7px 1em 7px; +} +.source pre { + margin: 0px; + padding: 0px; +} diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-theme.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-theme.css new file mode 100644 index 0000000..ede77a3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/maven-theme.css @@ -0,0 +1,921 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ +body { + background: #fff; + color: #000; + padding: 0px 0px 10px 0px; + } + +h2 { + background-color: #036; + } + +h3 { + background-color: #888; + } + +.a td { + background: #ddd; + color: #000; + } + +.b td { + background: #efefef; + color: #000; + } + +th { + background-color: #bbb; + color: #fff; + } + +div#banner { + border-bottom: 1px solid #fff; + } + +#banner, #banner td { + background: #fff; + color: #fff; + } + +#banner { + border-bottom: 1px solid #fff; +} + +#leftColumn { + background-color: #eee; + color: #000; + border-right: 1px solid #aaa; + border-bottom: 1px solid #aaa; + border-top: 1px solid #fff; +} + +#navcolumn { + color: #000; + border-right: none; + border-bottom: none; + border-top: none; +} + +#navcolumn h5 { + font-size: inherit; + border-bottom: 1px solid #aaa; +} + +#navcolumn li strong { + color: #369; +} + +#breadcrumbs { + background-color: #ccc; + color: #000; + border-top: 1px solid #aaa; + border-bottom: 1px solid #aaa; +} + +.source { + background-color: #fff; + color: #000; + border-right: 1px solid #888; + border-left: 1px solid #888; + border-top: 1px solid #888; + border-bottom: 1px solid #888; + margin-right: 7px; + margin-left: 7px; + margin-top: 1em; + } + +.source pre { + margin-right: 7px; + margin-left: 7px; + } + +a[name]:hover, #leftColumn a[name]:hover { + color: inherit !important; + } + +#breadcrumbs a:link, #navcolumn a:link { + color: #36a; +} + +#breadcrumbs a:visited, #navcolumn a:visited, .contentBox a:visited, .tasknav a:visited { + color: #47a; +} + +a:active, a:hover, #leftColumn a:active, #leftColumn a:hover { + color: #f30 !important; + } + +a:link.selfref, a:visited.selfref { + color: #555 !important; + } + +#legend li.externalLink { + background: url(../images/external-classic.png) left top no-repeat; + padding-left: 18px; +} +a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover { + background: url(../images/external-classic.png) right center no-repeat; + padding-right: 18px; +} + +#legend li.newWindow { + background: url(../images/newwindow-classic.png) left top no-repeat; + padding-left: 18px; +} +a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover { + background: url(../images/newwindow-classic.png) right center no-repeat; + padding-right: 18px; +} + +h2, h3 { + margin-top: 1em; + margin-bottom: 0; + background-image: url(../images/nw_maj_rond.gif); + background-repeat: no-repeat; + color: #fff; + padding: 5px; + margin-right: 2px; +} + +img.handle { + border: 0; + padding-right: 2px; +} + +#navcolumn div div { + background-image: none; + background-repeat: no-repeat; +} + +#navcolumn div div { + padding-left: 10px; +} + +.functnbar, .functnbar2 { + background-color: #aaa; +} + +.functnbar2, .functnbar3 { + background-color: #aaa; + background-image: url(../images/sw_maj_rond.gif); + background-repeat: no-repeat; + background-position: bottom left; +} + +.functnbar3 { + background-color: #ddd; + background-image: url(../images/sw_med_rond.gif); +} + +.functnbar, .functnbar2, .functnbar3 { + color: #000; +} + +.functnbar a, .functnbar2 a, .functnbar3 a { + color: #000; + text-decoration: underline; +} + +#navcolumn .body div, body.docs #toc li li { + background-image: url(../images/strich.gif); + background-repeat: no-repeat; + background-position: .5em .5em; +} + +#searchbox .body div, #navcolumn .body .heading { + background-image: none; +} + +a:link.selfref, a:visited.selfref { + text-decoration: none; +} + +#leftColumn a, #breadcrumbs a { + text-decoration: none; +} + +/* Unsure of this. TODO */ +.contentBox h2 a:link, .contentBox h2 a:visited, .contentBox h3 a:link, .contentBox h3 a:visited { + color: #fff !important; + text-decoration: underline; +} + +table, th, td { + border: none; +} + +div.colbar { + background: #eee; + border-color: #999 #EEE #EEE #999; + border-width: 1px; + border-style: solid; +} + +.toolgroup { + background: #efefef; +} + +.toolgroup .label { + border-bottom: 1px solid #666; + border-right: 1px solid #666; + background: #ddd; + color: #555; +} + +.toolgroup .body { + border-right: 1px solid #aaa; + border-bottom: 1px solid #aaa; +} + +#main { + border-top: 1px solid #999; +} + +#rightcol div.www, #rightcol div.help { + border: 1px solid #ddd; +} + +body.docs div.docs { + background-color: #fff; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; +} + +#helptext .label { + background-image: url(../images/icon_help_sml.gif); + background-repeat: no-repeat; + background-position: 97%; +} + +body.docs { + background: #eee url(../images/help_logo.gif) top right no-repeat !important; +} + +.docs h2, .docs h3 { + border-top: solid 1px #000; +} + +#apphead h2 em { + color: #777; +} + +.tabs th { + border-right: 1px solid #333; + background-color: #ddd; + color: #fff; + border-left: 1px solid #fff; +} + +.tabs td { + background-color: #999; + border-bottom: 1px solid #fff; + border-right: 1px solid #fff; + border-left: 1px solid #fff; +} + +.tabs { + border-bottom: 6px #ddd solid; +} + +.tabs th, .tabs th a:link, .tabs th a:visited { + color: #555; +} + +.tabs td, .tabs td a:link, .tabs td a:visited { + color: #fff; +} + +.tabs a { + text-decoration: none; +} + +.axial th { + background-color: #ddd; + color: black; +} + +.alert { + background-color: #ff9; +} + +.expandedwaste { + background: url(../images/icon_arrowwaste2_sml.gif) no-repeat; +} + +.collapsedwaste { + background: url(../images/icon_arrowwaste1_sml.gif) no-repeat; +} + +.filebrowse .expanded, .filebrowse-alt .expanded { + background-image: url(../images/icon_arrowfolderopen2_sml.gif); + background-repeat: no-repeat; +} + +.filebrowse .collapsed, .filebrowse-alt .collapsed { + background-image: url(../images/icon_arrowfolderclosed1_sml.gif); + background-repeat: no-repeat; +} + +.filebrowse .leafnode, .filebrowse-alt .leafnode { + background-image: url(../images/icon_folder_sml.gif); + background-repeat: no-repeat; +} + +.filebrowse .leaf, .filebrowse-alt .leaf { + background-image: url(../images/icon_doc_sml.gif); + background-repeat: no-repeat; +} + +.sortup { + background: url(../images/icon_sortup.gif) no-repeat; +} + +.sortdown { + background: url(../images/icon_sortdown.gif) no-repeat; +} + +.collapsedwaste { + background: url(../images/icon_arrowwaste1_sml.gif) no-repeat; +} + +body .grid td { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + background-color: transparent; +} + +.confirm { + color: #090; +} + +.info { + color: #069; +} + +.errormessage, .warningmessage, .donemessage, .infomessage { + border-top: 5px solid #900; + border-left: 1px solid #900; + background-image: url(../images/icon_error_lrg.gif); + background-repeat: no-repeat; + background-position: 5px 1.33em; +} + +.warningmessage { + background-image: url(../images/icon_warning_lrg.gif); + border-color: #c60; +} + +.donemessage { + background-image: url(../images/icon_success_lrg.gif); + border-color: #090; +} + +.infomessage { + background-image: url(../images/icon_info_lrg.gif); + border-color: #069; +} + +.docinfo { + background: url(../images/icon_doc_lrg.gif) no-repeat; +} + +.dirinfo { + background: url(../images/icon_folder_lrg.gif) no-repeat; +} + +.memberinfo { + background: url(../images/icon_members_lrg.gif) no-repeat; +} + +.usergroupinfo { + background: url(../images/icon_usergroups_lrg.gif) no-repeat; +} + +.errormark, .warningmark, .donemark, .infomark { + background: url(../images/icon_error_sml.gif) no-repeat; +} + +.warningmark { + background-image: url(../images/icon_warning_sml.gif); +} + +.donemark { + background-image: url(../images/icon_success_sml.gif); +} + +.infomark { + background-image: url(../images/icon_info_sml.gif); +} + +.cvsdiff, .cvsblame { + background-color: #ccc; +} + +.cvsdiffadd { + background-color: #afa; +} + +.cvsdiffremove { + background-color: #faa; +} + +.cvsdiffchanges1 { + background-color: #ff7; +} + +.cvsdiffchanges2 { + background-color: #ff7; +} + +li.selection ul a { + background: #fff; +} + +.band1 { + color: #fff; + background-color: #663; +} + +.band2 { + color: #fff; + background-color: #66C; +} + +.band3 { + background-color: #C99; +} + +.band4 { + background-color: #CFF; +} + +.band5 { + color: #fff; + background-color: #336; +} + +.band6 { + color: #fff; + background-color: #966; +} + +.band7 { + background-color: #9CC; +} + +.band8 { + background-color: #FFC; +} + +.band9 { + color: #fff; + background-color: #633; +} + +.band10 { + color: #fff; + background-color: #699; +} + +.band11 { + background-color: #CC9; +} + +.band12 { + background-color: #CCF; +} + +.band13 { + color: #fff; + background-color: #366; +} + +.band14 { + color: #fff; + background-color: #996; +} + +.band15 { + background-color: #99C; +} + +.band16 { + background-color: #FCC; +} + +.contentBox .helplink, #helptext .helplink { + cursor: help; +} + +.legend th, .bars th { + background-color: #fff; +} + +/* +================================================================================ +font and text properties, exclusive of link indication, alignment, text-indent +================================================================================ +*/ + +body, th, td, input, select { + font-family: Verdana, Helvetica, Arial, sans-serif; +} + +code, pre { + font-family: 'Andale Mono', Courier, monospace; +} + +body, h2, h3, #rightcol h2, pre, code, #apphead h2 small, h3, th, td { + font-size: small; +} + +small, div#footer, div#login, div.tabs th, div.tabs td, input, select, .paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs, .courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc, #leftColumn, .legend, .bars { + font-size: xx-small; + voice-family: "\"}\""; + voice-family: inherit; + font-size: x-small; +} + +.tabs td, .tabs th, dt, .tasknav .selfref, #login .username, .selection { + font-weight: bold; +} + +li.selection ul { + font-weight: normal; +} + +#apphead h2 em { + font-style: normal; +} + +#banner h1 { + font-size: 1.25em; +} + +#breadcrumbs div { + font-size: x-small; +} + +/* +================================================================================ +box properties (exclusive of borders), positioning, alignments, list types, +text-indent +================================================================================ +*/ + +#leftColumn { + width: 150px; +} + +#navcolumn { + padding-top: 5px; +} + +#navcolumn h5 { + padding-top: 3px; +} + +#navcolumn li { + padding-left: 8px; +} + +#bodyColumn h2 { + margin-top: .3em; + margin-bottom: .5em; + padding-left: .5em; +} + +p, ul, ol, dl, .bars table { + margin-top: .67em; + margin-bottom: .67em; +} + +form { + margin: 0; +} + +#bodyColumn { + margin-right: 0; + margin-top: 0.4em; + padding-right: 0px; + margin-left: 158px; +} + +html>body #bodyColumn { + width: auto; +} + +.docs { + line-height: 1.4; +} + +ol ol { + list-style-type: lower-alpha; +} + +ol ol ol { + list-style-type: lower-roman; +} + +.contentBox td, .contentBox th { + padding: 2px 3px; +} + +.section p, .section p, .section dt, .section dt { + margin-right: 7px; + margin-left: 7px; +} + +.tasknav { + margin-bottom: 1.33em; +} + +div.colbar { + padding: 3px; + margin: 2px 2px 0; +} + +.tabs { + margin-top: .67em; + margin-right: 2px; + margin-left: 2px; + padding-left: 8px; +} + +.tabs td, .tabs th { + padding: 3px 9px; +} + +#rightcol div.www, #rightcol div.help { + padding: 0 .5em; +} + +body.docs #toc { + position: absolute; + top: 15px; + left: 0px; + width: 120px; + padding: 0 20px 0 0; +} + +body.docs #toc ul, #toc ol { + margin-left: 0; + padding-left: 0; +} + +body.docs #toc li { + margin-top: 7px; + padding-left: 10px; + list-style-type: none; +} + +body.docs div.docs { + margin: 61px 0 0 150px; + padding: 1em 2em 1em 1em !important; +} + +.docs p+p { + text-indent: 5%; + margin-top: -.67em; +} + +.docs h2, .docs h3 { + margin-bottom: .1em; + padding-top: .3em; +} + +.functnbar, .functnbar2, .functnbar3 { + padding: 5px; + margin: .67em 2px; +} + +.functnbar3 { + margin-top: 0; +} + +body { + padding: 1em; +} + +body.composite, body.docs { + margin: 0; + padding: 0; +} + +th, td { + text-align: left; + vertical-align: top; +} + +.right { + text-align: right !important; +} + +.center { + text-align: center !important; +} + +.axial th, .axial th .strut { + text-align: right; +} + +.contentBox .axial td th { + text-align: left; +} + +body .stb { + margin-top: 1em; + text-indent: 0; +} + +body .mtb { + margin-top: 2em; + text-indent: 0; +} + +.courtesylinks { + margin-top: 1em; + padding-top: 1em; +} + +dd { + margin-bottom: .67em; +} + +.toolgroup { + margin-bottom: 6px; +} + +.toolgroup .body { + padding: 4px 4px 4px 0; +} + +.toolgroup .label { + padding: 4px; +} + +.toolgroup .body div { + padding-bottom: .3em; + padding-left: 1em; +} + +.toolgroup .body div div { + margin-top: .3em; + padding-bottom: 0; +} + +.tier1 { + margin-left: 0; +} + +.tier2 { + margin-left: 1.5em; +} + +.tier3 { + margin-left: 3em; +} + +.tier4 { + margin-left: 4.5em; +} + +.tier5 { + margin-left: 6em; +} + +.tier6 { + margin-left: 7.5em; +} + +.tier7 { + margin-left: 9em; +} + +.tier8 { + margin-left: 10.5em; +} + +.tier9 { + margin-left: 12em; +} + +.tier10 { + margin-left: 13.5em; +} + +.filebrowse .expanded, .filebrowse .collapsed { + padding-left: 34px; +} + +.filebrowse .leafnode, .filebrowse .leaf { + padding-left: 20px; +} + +.messagechild { + padding-left: 34px; +} + +.filebrowse-alt .expanded, .filebrowse-alt .collapsed, .filebrowse-alt .leaf, .filebrowse-alt .leafnode, .expandedwaste, .collapsedwaste, .sortup, .sortdown { + /* hide from macie5\*/ + float: left; + /* resume */ + display: inline-block; + height: 15px; + width: 34px; + padding-left: 0 !important; +} + +.filebrowse-alt .leaf, .filebrowse-alt .leafnode, .sortup, .sortdown { + width: 20px; +} + +.filebrowse ul, .filebrowse-alt ul { + list-style-type: none; + padding-left: 0; + margin-left: 0; +} + +.filebrowse ul ul, .filebrowse-alt ul ul { + margin-left: 1.5em; + margin-top: 0; + padding-top: .67em; +} + +.filebrowse li, .filebrowse-alt li { + margin-bottom: .67em; +} + +td.filebrowse h2 { + margin-top: 0; +} + +.errormessage, .warningmessage, .donemessage, .infomessage, .docinfo, .dirinfo, .memberinfo, .usergroupinfo { + margin: .67em 0; + padding: .33em 0 .67em 42px; + min-height: 32px; +} + +.errormark, .warningmark, .donemark, .infomark { + padding-left: 20px; + min-height: 15px; +} + +.alt { + display: none; +} + +#banner h1 { + margin: 0; +} + +#banner img { + padding: 8px; +} + +.axial th, .axial th .strut, #leftColumn .strut { + width: 12em; +} + +#breadcrumbs { + padding: 3px 10px; +} + +.legend { + float: right; +} + +.legend th, .bars th { + text-align: right; + padding-left: 1em; +} + +.bars table { + table-layout: fixed; +} + +.bars th { + width: 12em; +} + +#projectdocumentlist td.filebrowse-alt { + padding-right: .75em; +} +#organizationLogo img, #projectLogo img, #projectLogo span{ + margin: 8px; +} diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/print.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/print.css new file mode 100644 index 0000000..f09d546 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/print.css @@ -0,0 +1,7 @@ +#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn { + display: none !important; +} +#bodyColumn, body.docs div.docs { + margin: 0 !important; + border: none !important +} diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/site.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/site.css new file mode 100644 index 0000000..3106e0a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/css/site.css @@ -0,0 +1,16 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/cvs-usage.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/cvs-usage.html new file mode 100644 index 0000000..c5c53c4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/cvs-usage.html @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + Commons Logging - + Source repository + + + + + + + + +
      + +
      +
      +
      + + + + + + +

      Source repository

      +

      + Apcahe Commons Logging is hosted on the Apache + subversion repository. +

      +

      + The project URL is:

      + http://svn.apache.org/repos/asf/commons/proper/logging/trunk +

      +

      + The best way to view the repository is via the + subversion viewer. +

      +

      + The alternative is to use the + native subversion display. +

      +
      + + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/dependencies.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/dependencies.html new file mode 100644 index 0000000..0ea8677 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/dependencies.html @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + Commons Logging - Project Dependencies + + + + + + + +
      + +
      +
      +
      +

      Project Dependencies

      compile

      The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:

      GroupIdArtifactIdVersionClassifierTypeOptional
      avalon-frameworkavalon-framework4.1.3-jar(optional)
      log4jlog4j1.2.12-jar(optional)
      logkitlogkit1.0.1-jar(optional)

      test

      The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:

      GroupIdArtifactIdVersionClassifierTypeOptional
      junitjunit3.8.1-jar

      provided

      The following is a list of provided dependencies for this project. These dependencies are required to compile the application, but should be provided by default when using the library:

      GroupIdArtifactIdVersionClassifierTypeOptional
      javax.servletservlet-api2.3-jar(optional)

      Project Transitive Dependencies

      The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.

      compile

      The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:

      GroupIdArtifactIdVersionClassifierTypeOptional
      avalon-frameworkavalon-framework4.1.3-jar(optional)
      log4jlog4j1.2.12-jar(optional)
      logkitlogkit1.0.1-jar(optional)

      test

      The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:

      GroupIdArtifactIdVersionClassifierTypeOptional
      junitjunit3.8.1-jar

      provided

      The following is a list of provided dependencies for this project. These dependencies are required to compile the application, but should be provided by default when using the library:

      GroupIdArtifactIdVersionClassifierTypeOptional
      javax.servletservlet-api2.3-jar(optional)

      Project Dependency Graph

      Dependency Listings

      Commons Logging

      Commons Logging is a thin adapter allowing configurable bridging to other, + well known logging systems.

      http://commons.apache.org/logging

      Project License: The Apache Software License, Version 2.0


      Unnamed - junit:junit:jar:3.8.1

      Project License: No project license is defined for this project.


      Unnamed - javax.servlet:servlet-api:jar:2.3

      Project License: No project license is defined for this project.


      Unnamed - log4j:log4j:jar:1.2.12

      Project License: No project license is defined for this project.


      Unnamed - logkit:logkit:jar:1.0.1

      Project License: No project license is defined for this project.


      Unnamed - avalon-framework:avalon-framework:jar:4.1.3

      Project License: No project license is defined for this project.


      Licenses

      Unknown: Unnamed - avalon-framework:avalon-framework:jar:4.1.3, Unnamed - javax.servlet:servlet-api:jar:2.3, Unnamed - junit:junit:jar:3.8.1, Unnamed - log4j:log4j:jar:1.2.12, Unnamed - logkit:logkit:jar:1.0.1

      The Apache Software License, Version 2.0: Commons Logging

      Dependency File Details

      FilenameSizeEntriesClassesPackagesJDK RevDebugSealed
      commons-logging-1.1.1.jar60,686422821.1debug-
      junit-3.8.1.jar121,07011910061.1debug-
      avalon-framework-4.1.3.jar63,9668563101.2debug-
      servlet-api-2.3.jar77,977836341.1debug-
      log4j-1.2.12.jar358,085283253191.1debug-
      logkit-1.0.1.jar72,1508567101.2debug-
      TotalSizeEntriesClassesPackagesJDK RevDebugSealed
      6 total dependencies753,934697574511.260
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/guide.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/guide.html new file mode 100644 index 0000000..a3bf68e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/guide.html @@ -0,0 +1,1150 @@ + + + + + + + + + + + + + + Commons Logging - + User Guide + + + + + + + + +
      + +
      +
      +
      + + + + + + +

      Introduction

      + +The Apache Commons Logging (JCL) provides a Log interface that +is intended to be both light-weight and an independent abstraction of other logging toolkits. +It provides the middleware/tooling developer with a simple +logging abstraction, that allows the user (application developer) to plug in +a specific logging implementation. + +JCL provides thin-wrapper Log implementations for +other logging tools, including +Log4J, +Avalon LogKit +(the Avalon Framework's logging infrastructure), +JDK 1.4, and an implementation of JDK 1.4 logging APIs (JSR-47) for pre-1.4 +systems. +The interface maps closely to Log4J and LogKit. + + +Familiarity with high-level details of the relevant Logging implementations is presumed. + +
      +

      Quick Start

      + +As far as possible, JCL tries to be as unobtrusive as possible. +In most cases, including the (full) commons-logging.jar in the classpath +should result in JCL configuring itself in a reasonable manner. +There's a good chance that it'll guess (discover) your preferred logging system and you won't +need to do any configuration of JCL at all! + +Note, however, that if you have a particular preference then providing a simple +commons-logging.properties file which specifies the concrete logging library to be +used is recommended, since (in this case) JCL will log only to that system +and will report any configuration problems that prevent that system being used. + + +When no particular logging library is specified then JCL will silently ignore any logging library +that it finds but cannot initialise and continue to look for other alternatives. This is a deliberate +design decision; no application should fail to run because a "guessed" logging library cannot be +used. To ensure an exception is reported when a particular logging library cannot be used, use one +of the available JCL configuration mechanisms to force that library to be selected (ie disable +JCL's discovery process). + +

      Configuration

      + +There are two base abstractions used by JCL: Log +(the basic logger) and LogFactory (which knows how to create Log +instances). Specifying a particular Log implementation is very useful (whether that is +one provided by commons-logging or a user-defined one). Specifying a +LogFactory implementation other than the default is a subject for +advanced users only, so will not be addressed here. + + +The default LogFactory implementation uses the following discovery process +to determine what type of Log implementation it should use +(the process terminates when the first positive match - in order - is found): + + +
        +
      1. +Look for a configuration attribute of this factory named +org.apache.commons.logging.Log (for backwards compatibility to +pre-1.0 versions of this API, an attribute +org.apache.commons.logging.log is also consulted). + +Configuration attributes can be set explicitly by java code, but they are more +commonly set by placing a file named commons-logging.properties in the classpath. +When such a file exists, every entry in the properties file becomes an "attribute" +of the LogFactory. When there is more than one such file in the classpath, releases +of commons-logging prior to 1.1 simply use the first one found. From release 1.1, +each file may define a priority key, and the file with +the highest priority is used (no priority definition implies priority of zero). +When multiple files have the same priority, the first one found is used. + + +Defining this property in a commons-logging.properties file is the recommended +way of explicitly selecting a Log implementation. + +
      2. +
      3. +Look for a system property named +org.apache.commons.logging.Log (for backwards +compatibility to pre-1.0 versions of this API, a system property +org.apache.commons.logging.log is also consulted). +
      4. +
      5. +If the Log4J logging system is available in the application +class path, use the corresponding wrapper class +(Log4JLogger). +
      6. +
      7. +If the application is executing on a JDK 1.4 system, use +the corresponding wrapper class +(Jdk14Logger). +
      8. +
      9. +Fall back to the default simple logging wrapper +(SimpleLog). +
      10. +
      + +Consult the JCL javadocs for details of the various Log +implementations that ship with the component. (The discovery process is also covered in more +detail there.) + +
      +

      Configuring The Underlying Logging System

      + +The JCL SPI +can be configured to use different logging toolkits (see above). +JCL provides only a bridge for writing log messages. It does not (and will not) support any +sort of configuration API for the underlying logging system. + + +Configuration of the behavior of the JCL ultimately depends upon the +logging toolkit being used. Please consult the documentation for the chosen logging system. + + +JCL is NOT responsible for initialisation, configuration or shutdown of the underlying logging library. +In many cases logging libraries will automatically initialise/configure themselves when first used, and +need no explicit shutdown process. In these situations an application can simply use JCL and not depend +directly on the API of the underlying logging system in any way. However if the logging library being used +requires special initialisation, configuration or shutdown then some logging-library-specific code will +be required in the application. JCL simply forwards logging method calls to the correct underlying +implementation. When writing library code this issue is of course not relevant as the calling application +is responsible for handling such issues. + +

      Configuring Log4J

      + +Log4J is a very commonly used logging implementation (as well as being the JCL primary default), +so a few details are presented herein to get the developer/integrator going. +Please see the Log4J Home for more details +on Log4J and it's configuration. + + +Configure Log4J using system properties and/or a properties file: + +
        +
      • +log4j.configuration=log4j.properties +Use this system property to specify the name of a Log4J configuration file. +If not specified, the default configuration file is log4j.properties. +
      • +
      • +log4j.rootCategory=priority [, appender]* +
      • +Set the default (root) logger priority. +
      • +log4j.logger.logger.name=priority +Set the priority for the named logger +and all loggers hierarchically lower than, or below, the +named logger. +logger.name corresponds to the parameter of +LogFactory.getLog(logger.name), +used to create the logger instance. Priorities are: +DEBUG, +INFO, +WARN, +ERROR, +or FATAL. +

        +Log4J understands hierarchical names, +enabling control by package or high-level qualifiers: +log4j.logger.org.apache.component=DEBUG +will enable debug messages for all classes in both +org.apache.component +and +org.apache.component.sub. +Likewise, setting +log4j.logger.org.apache.component=DEBUG +will enable debug message for all 'component' classes, +but not for other Apache projects. +
      • +
      • +log4j.appender.appender.Threshold=priority +
      • +Log4J appenders correspond to different output devices: +console, files, sockets, and others. +If appender's threshold +is less than or equal to the message priority then +the message is written by that appender. +This allows different levels of detail to be appear +at different log destinations. +For example: one can capture DEBUG (and higher) level information in a logfile, +while limiting console output to INFO (and higher). +
      +
      +
      +
      +

      Developing With JCL

      +

      Obtaining a Log Object

      + +To use the JCL SPI from a Java class, +include the following import statements: + +
        + +import org.apache.commons.logging.Log; +

        +import org.apache.commons.logging.LogFactory; +

        +
        +
      + +Note that some components using JCL may +either extend Log, +or provide a component-specific LogFactory implementation. +Review the component documentation for guidelines +on how commons-logging should be used in such components. + + +For each class definition, declare and initialize a +log attribute as follows: + +
        +
        +public class CLASS
        +{
        +    private Log log = LogFactory.getLog(CLASS.class);
        +    ...
        +    ;
        +        
        +
      + +Note that for application code, declaring the log member as "static" is more +efficient as one Log object is created per class, and is recommended. +However this is not safe to do for a class which may be deployed via a "shared" +classloader in a servlet or j2ee container or similar environment. If the class +may end up invoked with different thread-context-classloader values set then the +member must not be declared static. The use of "static" should therefore +be avoided in code within any "library" type project. + +
      +

      Logging a Message

      + +Messages are logged to a logger, such as log +by invoking a method corresponding to priority. +The org.apache.commons.logging.Log interface defines the +following methods for use +in writing log/trace messages to the log: + +
        +
        +    log.fatal(Object message);
        +    log.fatal(Object message, Throwable t);
        +    log.error(Object message);
        +    log.error(Object message, Throwable t);
        +    log.warn(Object message);
        +    log.warn(Object message, Throwable t);
        +    log.info(Object message);
        +    log.info(Object message, Throwable t);
        +    log.debug(Object message);
        +    log.debug(Object message, Throwable t);
        +    log.trace(Object message);
        +    log.trace(Object message, Throwable t);
        +        
        +
      + +Semantics for these methods are such that it is expected +that the severity, from highest to lowest, of messages is ordered as above. + + +In addition to the logging methods, the following are provided for code guards: + +
        +
        +    log.isFatalEnabled();
        +    log.isErrorEnabled();
        +    log.isWarnEnabled();
        +    log.isInfoEnabled();
        +    log.isDebugEnabled();
        +    log.isTraceEnabled();
        +        
        +
      +
      +

      Serialization Issues

      + Prior to release 1.0.4, none of the standard Log implementations were + Serializable. If you are using such a release and have a Serializable class + with a member that is of type Log then it is necessary to declare + that member to be transient and to ensure that the value is restored on + deserialization. The recommended approach is to define a custom + readObject method on the class which reinitializes that member. + In release 1.0.4, all standard Log implementations are Serializable. This + means that class members of type Log do not need to be declared transient; + on deserialization the Log object will "rebind" to the same category for the + same logging library. Note that the same underlying logging library will be + used on deserialization as was used in the original object, even if the + application the object was deserialized into is using a different logging + library. There is one exception; LogKitLogger (adapter for the Avalon LogKit + library) is not Serializable for technical reasons. + Custom Log implementations not distributed with commons-logging may + or may not be Serializable. If you wish your code to be compatible with + any arbitrary log adapter then you should follow the advice given above + for pre-1.0.4 releases. +
      +
      +

      Jars Included in the Standard Distribution

      +

      commons-logging.jar

      + +The commons-logging.jar file includes the JCL API, the default +LogFactory implemenation and thin-wrapper Log +implementations for +Log4J, +Avalon LogKit, +the Avalon Framework's logging infrastructure, +JDK 1.4, as well as an implementation of JDK 1.4 logging APIs (JSR-47) for +pre-1.4 systems. + + +In most cases, including commons-logging.jar and your preferred +logging implementation in the classpath should be all that is required to +use JCL. + +
      +

      commons-logging-api.jar

      + +The commons-logging-api.jar file includes the JCL API and the +default LogFactory implementation as well as the built-in +Log implementations SimpleLog and NoOpLog. However it does not +include the wrapper Log implementations that require additional +libraries such as Log4j, Avalon and +Lumberjack. + + +This jar is intended for use by projects that recompile the commons-logging +source using alternate java environments, and cannot compile against all of +the optional libraries that the Apache release of commons-logging supports. +Because of the reduced dependencies of this jarfile, such projects should be +able to create an equivalent of this library with fewer difficulties. + + +This jar is also useful for build environments that automatically track +dependencies, and thus have difficulty with the concept that the main +commons-logging.jar has "optional" dependencies on various logging +implementations that can safely go unsatisfied at runtime. + +
      +

      commons-logging-adapters.jar

      + +The commons-logging-adapters.jar file includes only adapters +to third-party logging implementations, and none of the core commons-logging +framework. As such, it cannot be used alone; either commons-logging.jar or +commons-logging-api.jar must also be present in the classpath. + + +This library will not often be used; it is only intended for situations where +a container has deployed commons-logging-api.jar in a shared classpath but a +webapp wants to bind logging to one of the external logging implementations +that the api jar does not include. In this situation, deploying the +commons-logging.jar file within the webapp can cause problems as this leads to +duplicates of the core commons-logging classes (Log, LogFactory, etc) in +the classpath which in turn can cause unpleasant ClassCastException exceptions +to occur. Deploying only the adapters avoids this problem. + +
      +
      +

      JCL Best Practices

      + +Best practices for JCL are presented in two categories: +General and Enterprise. +The general principles are fairly clear.Enterprise practices are a bit more involved +and it is not always as clear as to why they are important. + + +Enterprise best-practice principles apply to middleware components +and tooling that is expected to execute in an "Enterprise" level +environment. +These issues relate to Logging as Internationalization, +and fault detection. +Enterprise requires more effort and planning, but are strongly encouraged (if not required) +in production level systems. Different corporate enterprises/environments have different +requirements, so being flexible always helps. + +
      +

      Best Practices (General)

      +

      Code Guards

      + +Code guards are typically used to guard code that +only needs to execute in support of logging, +that otherwise introduces undesirable runtime overhead +in the general case (logging disabled). +Examples are multiple parameters, or expressions (e.g. string + " more") for parameters. +Use the guard methods of the form log.is<Priority>() to verify +that logging should be performed, before incurring the overhead of the logging method call. +Yes, the logging methods will perform the same check, but only after resolving parameters. + +
      +

      Message Priorities/Levels

      + +It is important to ensure that log message are +appropriate in content and severity. +The following guidelines are suggested: + +
        +
      • +fatal - Severe errors that cause premature termination. +Expect these to be immediately visible on a status console. +See also +Internationalization. +
      • +
      • +error - Other runtime errors or unexpected conditions. +Expect these to be immediately visible on a status console. +See also +Internationalization. +
      • +
      • +warn - Use of deprecated APIs, poor use of API, 'almost' errors, +other runtime situations that are undesirable or unexpected, but not +necessarily "wrong". +Expect these to be immediately visible on a status console. +See also +Internationalization. +
      • +
      • +info - Interesting runtime events (startup/shutdown). +Expect these to be immediately visible on a console, +so be conservative and keep to a minimum. +See also +Internationalization. +
      • +
      • +debug - detailed information on the flow through the system. +Expect these to be written to logs only. +
      • +
      • +trace - more detailed information. +Expect these to be written to logs only. +
      • +
      +
      +

      Default Message Priority/Level

      + +By default the message priority should be no lower than info. +That is, by default debug message should not be seen in the logs. + +
      +
      +

      Best Practices (Enterprise)

      +

      Logging Exceptions

      + +The general rule in dealing with exceptions is to assume that +the user (developer using a tooling/middleware API) isn't going +to follow the rules. +Since any problems that result are going to be assigned to you, +it's in your best interest to be prepared with the proactive +tools necessary to demonstrate that your component works correctly, +or at worst that the problem can be analyzed from your logs. +For this discussion, we must make a distinction between different types of exceptions +based on what kind of boundaries they cross: + +
        +
      • +External Boundaries - Expected Exceptions. +This classification includes exceptions such as FileNotFoundException +that cross API/SPI boundaries, and are exposed to the user of a component/toolkit. +These are listed in the 'throws' clause of a method signature. +

        +Appropriate handling of these exceptions depends upon the type +of code you are developing. +API's for utility functions and tools should log these at the debug level, +if they are caught at all by internal code. +

        +For higher level frameworks and middleware components, +these exceptions should be caught immediatly prior to crossing +the API/SPI interface back to user code-space, +logged with full stack trace at info level, +and rethrown. +The assures that the log contains a record of the root cause for +future analysis in the event that the exception is not caught and resolved +as expected by the user's code. +

        +
      • +
      • +External Boundaries - Unexpected Exceptions. +This classification includes exceptions such as NullPointerException +that cross API/SPI boundaries, and are exposed to the user of a component/toolkit. +These are runtime exceptions/error that are NOT +listed in the 'throws' clause of a method signature. +

        +Appropriate handling of these exceptions depends upon the type +of code you are developing. +APIs for utility functions and tools should log these at the debug level, +if they are caught at all. +

        +For higher level frameworks and middleware components, +these exceptions should be caught immediately prior to crossing +the API/SPI interface back to user code-space, +logged with full stack trace at info level, +and rethrown/wrapped as ComponentInternalError. +This ensures that the log contains a record of the root cause for +future analysis in the event that the exception is not caught and +logged/reported as expected by the user's code. +
      • +
      • +Internal Boundaries. +Exceptions that occur internally and are resolved internally. +These should be logged when caught as debug or info messages, +at the programmer's discretion. +
      • +
      • +Significant Internal Boundaries. +This typically only applies to middleware components that span networks or runtime processes. +Exceptions that cross over significant internal component boundaries such as networks +should be logged when caught as info messages. +Do not assume that such a (process/network) boundary will deliver exceptions to the 'other side'. +
      • +
      +
      +

      When Info Level Instead of Debug?

      + +You want to have exception/problem information available for +first-pass problem determination in a production level +enterprise application without turning on debug +as a default log level. There is simply too much information +in debug to be appropriate for day-to-day operations. + +
      +

      More Control of Enterprise Exception Logging

      + +If more control is desired for the level of detail of these +'enterprise' exceptions, then consider creating a special +logger just for these exceptions: + +
        +
        +   Log log = LogFactory.getLog("org.apache.component.enterprise");
        +
        +
      + +This allows the 'enterprise' level information to be turned on/off explicitly +by most logger implementations. + +
      +

      National Language Support And Internationalization

      + +NLS internationalization involves looking up messages from +a message file by a message key, and using that message for logging. +There are various tools in Java, and provided by other components, +for working with NLS messages. + + +NLS enabled components are particularly appreciated +(that's an open-source-correct term for 'required by corporate end-users' :-) +for tooling and middleware components. + + +NLS internationalization SHOULD be strongly considered for used for +fatal, error, warn, and info messages. +It is generally considered optional for debug and trace messages. + + +Perhaps more direct support for internationalizing log messages +can be introduced in a future or alternate version of the Log interface. + +
      +

      Classloader and Memory Management

      + +The LogFactory discovery process (see +Configuration above) is a fairly expensive +operation, so JCL certainly should not perform it each time user code +invokes: + +
      LogFactory.getLog()
      + +Instead JCL caches the +LogFactory implementation created as a result of the discovery +process and uses the cached factory to return Log objects. +Since in J2EE and similar multi-classloader environments, the result of the +discovery process can vary depending on the thread context classloader +(e.g. one webapp in a web container may be configured to use Log4j and +another to use JDK 1.4 logging), JCL internally caches the +LogFactory instances in a static hashtable, keyed by classloader. + +

      +While this approach is efficient, it can lead to memory leaks if container +implementors are not careful to call +

      +
      LogFactory.release()
      +

      +whenever a classloader that has utilized JCL is undeployed. If +release() is not called, a reference to the undeployed +classloader (and thus to all the classes loaded by it) will be +held in LogFactory's static hashtable. +

      +

      +Beginning with JCL 1.1, LogFactory caches factory implementations in a +"WeakHashtable". This class is similar to java.util.WeakHashMap in +that it holds a WeakReference to each key (but a strong reference +to each value), thus allowing classloaders to be GC'd even if +LogFactory.release() is never invoked. +

      +

      +Because WeakHashtable depends on JDK 1.3+ features, it is dynamically +loaded depending on the JVM version; when commons-logging is run on java versions +prior to 1.3 the code defaults to a standard Hashtable instead. +

      +

      +If a custom LogFactory implementation is used, however, then a +WeakHashtable alone can be insufficent to allow garbage collection +of a classloader without a call to release. If the abstract class +LogFactory is loaded by a parent classloader and a concrete +subclass implementation of LogFactory is loaded by a child +classloader, the WeakHashtable's key is a weak reference to the TCCL (child +classloader), but the value is a strong reference to the LogFactory instance, +which in turn contains a strong reference to its class and thus loading +classloader - the child classloader. This chain of strong references prevents +the child loader from being garbage collected. +

      +

      +If use of a custom LogFactory subclass is desired, ensuring that +the custom subclass is loaded by the same classloader as LogFactory +will prevent problems. In normal deployments, the standard implementations +of LogFactory found in package org.apache.commons.logging.impl +will be loaded by the same classloader that loads LogFactory +itself, so use of the standard LogFactory implementation +should not pose problems. Alternatively, use the provided ServletContextCleaner +to ensure this reference is explicitly released on webapp unload. +

      +
      +
      +

      Extending Commons Logging

      +

      +JCL is designed to encourage extensions to be created that add functionality. +Typically, extensions to JCL fall into two categories: +

      +
        +
      • new Log implementations that provide new bridges to logging systems
      • +
      • +new LogFactory implementations that provide alternative discovery strategies +
      • +
      +

      Contract

      + +When creating new implementations for Log and LogFactory, +it is important to understand the implied contract between the factory +and the log implementations: +
        +
      • Life cycle +
        +The JCL LogFactory implementation must assume responsibility for +either connecting/disconnecting to a logging toolkit, +or instantiating/initializing/destroying a logging toolkit. +
        +
      • +
      • Exception handling +
        +The JCL Log interface doesn't specify any exceptions to be handled, +the implementation must catch any exceptions. +
        +
      • +
      • Multiple threads +
        +The JCL Log and LogFactory implementations must ensure +that any synchronization required by the logging toolkit +is met. +
        +
      • +
      + +
      +

      Creating a Log Implementation

      + +The minimum requirement to integrate with another logger +is to provide an implementation of the +org.apache.commons.logging.Log interface. +In addition, an implementation of the +org.apache.commons.logging.LogFactory interface +can be provided to meet +specific requirements for connecting to, or instantiating, a logger. + + +The default LogFactory provided by JCL +can be configured to instantiate a specific implementation of the +org.apache.commons.logging.Log interface +by setting the property of the same name (org.apache.commons.logging.Log). +This property can be specified as a system property, +or in the commons-logging.properties file, +which must exist in the CLASSPATH. + +
      +

      Creating A LogFactory Implementation

      + +If desired, the default implementation of the +org.apache.commons.logging.LogFactory +interface can be overridden, +allowing the JDK 1.3 Service Provider discovery process +to locate and create a LogFactory specific to the needs of the application. +Review the Javadoc for the LogFactoryImpl.java +for details. + +
      +
      +

      A Quick Guide To Simple Log

      + +JCL is distributed with a very simple Log implementation named +org.apache.commons.logging.impl.SimpleLog. This is intended to be a minimal +implementation and those requiring a fully functional open source logging system are +directed to Log4J. + +

      + SimpleLog sends all (enabled) log messages, + for all defined loggers, to System.err. The following system properties + are supported to configure the behavior of this logger:

      +
        +
      • org.apache.commons.logging.simplelog.defaultlog - + Default logging detail level for all instances of SimpleLog. + Must be one of: +
          +
        • trace
        • +
        • debug
        • +
        • info
        • +
        • warn
        • +
        • error
        • +
        • fatal
        • +
        + If not specified, defaults to info.
      • +
      • org.apache.commons.logging.simplelog.log.xxxxx - + Logging detail level for a SimpleLog instance named "xxxxx". + Must be one of: +
          +
        • trace
        • +
        • debug
        • +
        • info
        • +
        • warn
        • +
        • error
        • +
        • fatal
        • +
        + If not specified, the default logging detail level is used.
      • +
      • org.apache.commons.logging.simplelog.showlogname - + Set to true if you want the Log instance name to be + included in output messages. Defaults to false.
      • +
      • org.apache.commons.logging.simplelog.showShortLogname - + Set to true if you want the last component of the name to be + included in output messages. Defaults to true.
      • +
      • org.apache.commons.logging.simplelog.showdatetime - + Set to true if you want the current date and time + to be included in output messages. Default is false.
      • +
      • org.apache.commons.logging.simplelog.dateTimeFormat - + The date and time format to be used in the output messages. + The pattern describing the date and time format is the same that is + used in java.text.SimpleDateFormat. If the format is not + specified or is invalid, the default format is used. + The default format is yyyy/MM/dd HH:mm:ss:SSS zzz.
      • +
      + + +In addition to looking for system properties with the names specified +above, this implementation also checks for a class loader resource named +"simplelog.properties", and includes any matching definitions +from this resource (if it exists). + +
      +

      Frequently Asked Questions

      + +See the FAQ document +on the commons-logging wiki site + +
      + + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/collapsed.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/collapsed.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e710840640c1bfd9dd76ce7fef56f1004092508 GIT binary patch literal 53 ycmZ?wbhEHbWM^P!XkdT>#h)yUTnvm1Iv_qshJlI4r7uBZ*YkPFU8d4p4Aua}2?(?R literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/expanded.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/expanded.gif new file mode 100644 index 0000000000000000000000000000000000000000..0fef3d89e0df1f8bc49a0cd827f2607c7d7fd2f0 GIT binary patch literal 52 xcmZ?wbhEHbWM^P!XkdT>#h)yUTnvm1Iv_qshJlH@g}+fUi&t{amUB!D)&R0C2fzRT literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/external-classic.png b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/external-classic.png new file mode 100644 index 0000000000000000000000000000000000000000..09a54252754acec46bc3942acb761b9c59b089ed GIT binary patch literal 956 zcmeAS@N?(olHy`uVBq!ia0vp^+(699!3-oX?^2ToQtTz3zOL+7Sh++kSYB8*eF4cA zctjR6FvuMQVaCImA;CaFmUKs7M+SzC{oH>NSs56Z83KGlTp0`!8X6k@|NjqEFbYOP zV5EgWYGaoa(9g^zL4Lu&OmO`aFEEQR7bP0l+XkKO`|>) literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/help_logo.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/help_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc25c033e813521cdaca875b69cf2fc53494e4e5 GIT binary patch literal 2113 zcmb`G>mw5i1I8!Hl3WWRSvVwl6ESfLxoqwtmvWme$)z@wyD*mx%QiEYoUkc`+;csS z%S)S5%g8N^CME*G z-y+eDNW>S5MMD129`8>fuTQu)AQo*3b~}aKZXvfv@S{h_{awHv7VNS4Jk}oXv+(;f z{!WW+GC0YpGCrL{#LzkyHT*+Eabiu@YrI(nuxzD7VQeYJmi1*P4Jb% z-Kg2ytQCD96z)z6cprHmi?>$ryia8QMmcxAY;U6?Cd|CQ0Vd$&bWlS0oIJrA_S^d$ z?g#8H3;Uf__=8i#UoYmZ5w@0bf^{-TQ^v$l$;A#7;$sx-ZFJ4k(8E#B+gTqGaQ1fC z`RGuyh#*r;(&bx0W(BDZB{?p*bSF%*eL|FVLzyo&#gUxrM(>K~eH>a(_S;~la9$;_ zC+@A#?k>NGe?JyCH-dW88$H~7W1v2)uEdW@y!w49b9*u4@7eUtcWHl3r>--SKQfX& zzDZhrowz!gIMEf^MG5Js32yl|0ahb6QuvAjxsKA*{3VdV9sSq581FC$NFq z(0*!2A0?!>Cb+vgsJkkNaNoHo4T?*Fj6Vw>YrZksh#+OT5;I(?F&@n&evQSx4aBPr zgsXK$K96zU)PgINe6QBBfM;ZXVzN`|edpp7NKvBWqg?mOY`3yZ7g8$pA=<4x)3r3i z1$WoJAnr02WtVf?2A}Add&lR~ic*)WjSS~HrbpyON#X`_r4sF_B-r?pXE6lq`1 z*Mzp$(u)nep9a#~AHOU;3!kWjc08GU2#)*wp59USrpg8_bKE(;R@DVYG^hB`36EWh zw4rt+2%#S0kZ?_g68bMePSc=OK}8B9t8QkNp|IxTTUiMt4%&%i8BL^MNFsg_O!pNQN<# zJuGYDPtJ*Vevgzq&cv}^q@xlg3ZQJ+6`aG8tTr34|1P)21)I1sBA1C(+<(|T&{kUe zgM$-IGiK=Rm?{iF#bbdI^LV`S4IPTbVl?%zB|8)@M=&}SDqlr0u#!NN$&S+FXgD~(H}6k|K7dyv9%8_`Ri@vbMZYW%O%+( z6q*T~1ATS?zCIRTY<;feWK-u9)PQPjx<)@)RsST&G7rOpb z;X!v|C)0g5Z=vZH!vbL}n%sP)Zr^M3sNl;J&OR8mo#2{~{Zb<+5tgjy>GosdWHpAJ zY}~irUO49Ua5TblkNh8Z+5=;`WZTfvIL6ntBl5cM);0>xRccB%c^TtfSmm{bw~rRn|Nu95Mxj40G@M~J{op4=cts= zetp+Wn@xI_$_QrM&Qs6)eAm-}H3cu=B%${Q%rhNva&b?rLd4z1H*4zk(~OlQZ0rHJ zJIzrw`)+z23im;S%%qgIrNSSipV`b+)c}A~6EAD0W1`?jKvntK;X(mhbx7@iN!IY8 zU^8@1)ygB&LX<3`jO~g%RAt%Y*#4qK2Uno1)6_cLCDG)SdTCm_ye!WeY4$q$19*B$ zYhDq~F;N*qYTLKd+I6x28_Qi-x$45>ROO>Zyo%@8tAJz_6)LoXYaa4+6*s02r zfT!fgAUJG9FpRVSc+NTufA9*4XsXmb&$Cs`8AY+I{E-*YyA`kKCOsb$(#@rJRvBncr%w56oZ(7s?sA N7j|ln9Rvcb{sD9p0rvm^ literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowfolderclosed1_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowfolderclosed1_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..c48e8b64924fa3e31099eaa68eb736bcce99b5de GIT binary patch literal 441 zcmV;q0Y?5uNk%w1VIBYv0M!5h00030|Nr9V>wtiN{Q24X@~-^$y8HIY{rl(m?4)DI#)qLX0cHqc$-^X;>!g1BUZ|>H8<<5BN(R=OIe(%|X z)xmqrv}xGDaM8JJ&$nyIv1r`HbJM(TzpHH3!i2n~V7H)Mv6@=Nt!2TfW1xsntCUxz zj#QL=Nsf0$nSxA)Z$hoCs()xbbzV1WQZQCkRg#gB{{H^*^73tMZU6uO0000000000 z00000A^8LW0027xEC2ui03HAj000Koz@2bNES`=?qQuit6`#fi;eaTiRxpDhCkqO%5f~C8#BsF)I=MR| zD<^-j5)>6478b@sH^|CDF((QT7!x8EBOm57U&(YdE20$RA0Q?%H7s&;J1;93?-m~| jG-!x`vWi_(_`RmiVKi_u!{&w>3@8|#ie);ic z$*0FtzdoPyFV|LQ5>OZ!5m)Oz-nyUlF!Y0Gz7yJl5=hHYt_c~+3Y zfmNMv9^VQJ4V^S`;=h0YK7IO>o0|*t1=u%3j8Oc^!pOkj%%B5uHz-aR*uOS7H#N7k z>gjgq=(LC`DH^m+oaAi4!NtnTp{b=~Y@n)dIC*iCEFT9uH#aXY4-YqwnCX%wMyq%P z*Q^s#Q{KE~vhi9uIVlloaY;peGaX$M6KDI&SFYN%81f2=h{%X3shl@8(^b}0Z?a>u zwXk4eak}1ObnAqHp^1&QFb4-G&qcPM8Q=BdmI!Gm%;5-pd{`^umfaZ#_Y4J_%2vN4 z45`d5jjVzlxhonThAYam7`W|v_{Oc7mA@}^N5Lbuc26zkmj!~#t&D8a6Q=IixR`Z= sr)k=Y3e%vrJ{j|VrLBR78(5^Rb3B%cDz|e>Te;=1UQ>E~(SgAl09|h($ literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowwaste1_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowwaste1_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..25d75f73b3a8829c6153324f73cef94c9b93dcb0 GIT binary patch literal 606 zcmZ?wbhEHblx5&&c*Xz%|NsBLb?>D~_`DCFzWx05=hDq*w;sH1p1!kn=B|zVE^pX- z>Eg|27j8VgdgsOUdoL4em&a5r2*~JmjjTwjUm2P=IiY$$2O{R!-d7 zIAd4W{QaHt_I1qNJ7e{+>8p;;U4L@<_H!$DURb;5(&}9oHtxT&Vc+FV2d->Bcy;Tc zYugTA+jHX9{?m63p1FJY+`U6*?;bgS|HP$-$1grOcH#c%E04}yfAab3kK~4xv(_G; zzwy+%y_a?#yYb-JyNA!;fB5|U-N&zY9>2N$==JkApPs$``1<{qSMNT5`|<1P^@6Lh&aHBLjm!gAT||pg3V*-`(Kf)ZEhA#HOyOXl*0Q z>DD%}jn`P8k&)F*h*@;fye3U2{^^eLl7hk$z32OD^IA+dG}n?ASmiZe+uqsS+=bCh zMsAhoj!9akeAA~pt6Hw|@j2F}#lvT4sH0&eA#%aT_i~G-`Du0|WhJQ#z7HNPcskv} zS=UPZjoahwp=Q=lc2(VujXWH-vVwWFP7jhICotO@ cxLr!uVCqqFWx1d*apKkG90ti^Tr3RM0GdSb!2kdN literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowwaste2_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_arrowwaste2_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..54dbf42593231e241fe784ce7b9a308f6c82c6a5 GIT binary patch literal 609 zcmZ?wbhEHblx5&&c*Xz%|NsBLb?>D~_`DCFzWx05=hDq*w;sH1p1!kn=B|zVE^pX- z>Eg|27j8VgdgsOUdoL4em&a5r2*~JmjjTwjUm2P=IiY$$2O{R!-d7 zIAd4W{QaHt_I1qNJ7e{+>8p;;U4L@<_H!$DURb;5(&}9oHtxT&Vc+FV2d->Bcy;Tc zYugTA+jHX9{?m63p1FJY+`U6*?;bgS|HP$-$1grOcH#c%E04}yfAab3kK~4xv(_G; zzwy+%y_a?#yYb-JyNA!;fB5|U-N&zY9>2N$==JkApPs$``1<{qSMNT5`|<1P^@6Lh&aHBLjm!gAT||pg3V*-`C*Z)ZEhA#HOyOXl*0Q z>DD%}jn`P8k&)F*h*@;fye3U2{^^eLl7hnX=V|j=OgA*wk``DsN!#Ap+}wrHOh&H7 z`_SPdUM*UteAA~pt6H{td3yTz`1<-CJI=#rXsDxMB_Y!0b>-TPHcj)>>_*B;QWKwE zzuEfgw1u;-mG~qt->+PABg$WPFpDWX`uTZDLjr@mnNP)r0PRan5~mwpTozooNRdTv g8mr}n=Ed&Lf(as;N)2qCed>X3Gb}d;C@@$90C42?9RL6T literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_doc_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_doc_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..b4582671abb2d5b9b75d19b4454188dd1611947c GIT binary patch literal 1335 zcmZ?wbhEHbRA5kG_|5x(y^UAXb|>YW!i?!UTz@8z|- zFJdbfMVHTyESViqJS#MRYH-d(|MV`Oiw^cKJTPI&p-IaQ&scqI`l_RI*PooT?!>}PrA;oE2d{2DbZz^Q>)Q@r+i~>9-jlcYoVd0B^qqaDZXY~z z_wc!UhtA$Ta{m6w%a2Z6dU*WegJT!&pT6?w?6oInu0B3@{mJFq&oAA2_VVrLuit-t z`S$bk*B^1!OSH^AlN(k}UVeD$%A-?O9GSKD`23Bh=508+Wb4_*Th1)ne0ts9OS_KW z+~Ke_wno9CvWdOeslZL>*sGiJ$wD}&4;hA z-+y`a?(?G;?>~O|{_V%F-+%rB@xR}1|IeHL@83UQ+=1h8lpr$%6o0ZXGB8YK&;jWO z(3bpzOq>{Oq)-Dkpat=K({8rTq$yix`_-8K(9y ze{YH54C0+CugaR>!ud3Lx|~H}n@h@3S0BdG0KG&{k)ECz6O_)nbUaxsDjBfYYp()R z_f^}Pw3Hk#&hyRd6Ao8-e0;{sE)`Ib^Y?}6nrKetpa})WN4jsd#Bg`qJiT3intJ7@ z7{>`O^nw?4XnHPE=?LiGI%S*BET5f4sYVmn-ZadySkiEY<=T^m8sX*q@>W5w4@^9K ztXC@i7SF1Kk{cU5nB_JWns`iD*#Z_zY;{!Q-CKP@$@JV` znJP!C=b2YmNALe{x0u0~`^0?qmb}X|1eF}>xn#B87aR>^WNMSv?~AegY!G{3W2g$t zi)+%#oh+By69}V=ql`^GO=B@M8NR4fJ4ayK_04r{qR~$8w6dEL4O_#0=X795{B#a7a!yNbdF1$zqXpJ)-C$FzHzVGp}Mw r3L`Ub!UqR7ff)jgY|G1CH_1)y{+~e%x=gCKTIE;}|e2`D5W9WfJ5203n#B`>c{5-B1uFTK9ELKMQo#12A106XAx Bv`hd1 literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_error_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_error_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..fccffd17d74756f8332e7e401bd02719f2e95387 GIT binary patch literal 1531 zcmVNk%w1VITk?0QUd@00030|Ns8}{)(T!jtdTv3=f724QUArV+jji7Z|8U zN1sANqh@EP4H0(<40H($TL%io5EZ@;6ub`n5~K|gp$!qA4H1?M5R(iL ziVF^j3lE124}J;_dB*2xf&v(7$M3YDZU{ryj5G_(9z5yF2*D= z%O*0-EIYX=Ho8|}lO8F|F+xfc8B7!!r7b&lAu8LiwCmyG&o)SbA}-4~OHdXa(K=3O z9VcBHB8DwFHHAGuygR60iv3rxYewDa^m$`(RyMvj!g`2#F zoV-+!>%ztpqA)wRObx5U@D#n`>c z+rP`)zRKIf&fdb!-Net|$@7v<*=j`(8?(^~V_xAYu`~3a-`}~nJE}}p`n>{?; z(9qk^(EtDcA^8LW00930EC2ui03ZM$000R80RIUbNU)&6g9fXyTE)s7xQ7rQh72(5y9L-7K!C@OAJ2i)cIp~Ng6}}8{8;ZAGm@t+p8QwMV>e|uae}0GO&H8m>}F0| zNfg{LnE3L^L>SE@r9OnBN|nlnm$s|#;0-(3RKS!4V8e>#2P|E>Tg0jj;OdddzPE7W z^3z9GfirJwF?PK)sjpwZrUI8LHEI;8PolIjB?_`!C`_0vK~iKWkexS~vK{QoZGh*` z1B^Y6Jo!){JaN!~X=Ke{SEA%VVUiSS(W1(i(|D;8<&V39U2o!Cwv3o3+KC)F8l)#q znlfa_NO_`U%+i0aL5}OBXi@Twb>N);DWheh5hOVxbeT4gGiXwV3JKa%hocrO<;|mz zAYsCz_C$S>haGXiu|^vlZNX6!Jv4BF2^IJOpa8-tvkWJ1pz$0QW4OW5MosuofC?yB zkb;B)b#+QosNAy&7+`Qwg%ng|q2NYa`~brW4XAJd1}I{8$|;?FrU`FRJh4O)M0^+k z101Y?K?W>na7TOjw1|!?uGCWr6iz5{#129T;A8+pw4lKT8@O<#K+xQSPKC=^s`YAA=K~z2z(6m zOqWG^=1Uh8m~a6H3^efr2@jOmkZBPJh#{ zTvLrOVQkPs2L{0KK?paHKm!g|tXq&Urz~C9C6%GtCT;?J>m=v&%`e`0~mx hu+$RE(ze)g3of$Al1nbS=(5W!z|5re)&vCv06Pq;x=;WB literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_error_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_error_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..61132ef2b01806f6122c31d173c98e01e499b9a0 GIT binary patch literal 1010 zcmZ?wbhEHbJMCn#OVEqF*oew~oaAu*+mN;-=y?VHT3tIe$XQqrDo-uB_a z!$aaK`z6))OKGn34?nwc^SuifkIL#EmDgV_qjg-#8v*0u4q4%1moUw{LZ54UeCgzNF^jX`uv-XK+9g@yFrG9?@ z!9&5&Tgk*j(b!GF&{N4I-Owl3GNQ;Kslp@APSw&&&ux9d>WxL~{EYoKm2KHvv3+ax zZUYB?Ae*8JnchZheXeEaa>@87?_fB*jV>(`erUx0B6j@wa!KnN)QWMO1rn9HC8 zQU}Tt3>@bftT|;oHYhlHH8T8tc{qL2LBC1&wnQeg^-S05<#H=J%;q~&KX!$OXH$lP zifQJ#9>L8|xhAVRHT-xPa*}7JK>(A*!AmL!CQC~j>707p+C5b#ib-SZ5@wfn#-0y8 zor_pb3M^%mkXhlduwjw4dk@RWhYZ<*tSUAV9x3eYyi#^d39lH{872xT#>g14FgCZb z+Lvv}DClhGVU*`8y(Qe}(9I>Lw<6->0~Q`zX3oMH2272dBARI`0wDzxS_G8b_H+a` TZ#n2*^y*Bf^Krq04Gh)*dSnrT literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_folder_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_folder_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..3683e75ceb075d5fcfec110d20b03c7f46fc879e GIT binary patch literal 1548 zcmchW?LQL;0LPbO)UBe()2dObD>>VxPkL}eSg0c^Wu=K(c^IP@^RRhnh&HbB(8G*8 zraX0dwhhfz7PCBUj2UK@hq2VBcJ8`A;(jl_Z@+K8KbJGk$81p$00giG__6i%b+x)e zt?p8*d1^IZrTU;$%2ld`zyDUNl=%zug(@XowNk#k_-b{fVRePAT;?q<46J<~`!ts; zpP^1qWY5p$%+Kb@q;!e6S~1rsmo+afbjfBq)>Q9hGhGTfM=tA;&+*qjOQxm#@gcHA zM3sng$47Ff#Fb;C4YSfV>14~Sw0&-dDIQ}iD0t(dZu#8kigHRmC;YNDzq}-sPi9C* z(^LxT*kG1WaBtvU`t)S0M9h#*c1k6@1%;5^7R_Pcxy@zTQhm(Mc_xo}lV zZm$b(ufIM0F>$OnRz01zEF_7#aEn9npFR@i2jZmfqb1xs6Fs-Z?5Od#QDfbaqVC95 zVbY2)X?Y}ZaVTM7FkT@b$oX+|{jsvX*x3*G86JMRH)fg_GxaWdl531YuOGb?Y5vLc2V;e+j1L2KARODMlNw7)6j!<*pV*SFr) z-xPM@Mwk&p9pN9_umi1OwfUEs75)v6ed`LYFv|Tq%24g4sJ7?VTZ;Xf>3&T`*BXni zy?J)^4ejddC&>Cj-?uN(-PM6zF9JKO0$7y+H1Z$S4=z>ZUaX*AsK~iccHg@++v|Cj zS8?WfdWL6B-ep-2At%-)JKE_{qU-$_=f^2$A11iw6Wt#rxlJ%)vTmQwjC4$oaJY-L zPYr`pVw|(@IFZ90(y;a^p>QhRWr<5%p6@{WKOHTx=QqMR^Z8YiUV#dL!BY5c^qgqb3e zsF3h)g#X3(f5Ysn<^}*@7-0EB{NobrN*3j zDpV6R+(-qaIBGW`Pyq-*`PqA*b9yDzDS(ES6j@h%)3d@g=bmmlodHPRTeXFUrvNhg zi#?*;F>nXwU8|#Z7`#7;Qs|ABxmVhR^R{VSWo3M#J36FpK4*#K)H!Y0)MB$kaEP8cDK*VL6}?$NatRSbqX9c(_0Md7cIepgK61?j z%lOb`4d_WHYcHP;3J9v9uakOL7a9f*2cS1SfTBIBo_5AU%o#z05Ylq7(`E~>wFgaO z#?4gB@D!VMadeq3m_DEN2(P_}jP179Z0iSK^co)ZV|=$OcFv?Z(BLK=IIT?jE_evE z*QQ?qb21HyK|R3+l+*$ZlNHQO5Y3%@_6{VRmAuu5<_Y|@&tnB-xb7HS|_Jxi&eR2mJL5oId1qfFFG|owY5LfzFJzOZE>)b0yGvZW5#ZG+ef9L3=};uqcn({l;Zq^R;&;_7OK)0jVUN0}pBTX+|j7$R*>Tk|N*^q>h8m z^T_Ksox?zCh#04&)AWBH_jtdSu^6y)3IZ@`v^7$w4rUE)uLcL0*_LSjG;J-e7(d$vVB0pc!*Y${ mbs=p&IF9+tFXs6IgC{xU!|gRJRrga7pEHap%Q_1OocIT4<@AgI literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_folder_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_folder_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..8e26f89ab658b0e5b7eb531482a90350d07d60d0 GIT binary patch literal 634 zcmV-=0)_oYNk%w1VGsZh0OkMy00030|NsB~m;CsX{`!^u`j!3rmHzye{P&Xl_mlbX zj`{A5`R|SQ?Tq&5iS_7+=GlPv>5BL2itgcs_U4H7<%jg-hvCtC>(+kq@aWvca_`rD z?bUqb%y;6-cHqc$-^X;^#dGi1e(u(N?9_be(R%04dF9P`<<5BH%XjeDf7-=#<=)27 zxNFX~YRt50%Ccz4uxG)lW7@)T*1m7lyl&IGZPB@G&9!RFvuWGIa@DeSXmwBn4fS`y^p^8wgl~=2iR;iIysE|~rk5r|NQ>2Viql;3YiBOz{POz9+u9jGi zcSVuWKAw&O)+9kGS}DF|Ns900000000000A^8LW004XdEC2ui z01yBV000NqfMrTZNJ&q8h$A67PKbP86$}y-RY+h!MmIQOjyD$z5fmy41PB5fG-+Q` zW+Xu(uq8AyAvQ2FM^i|AG%#=v4NiopkpqemCRM^%;qxJh7y}b{ zym&$+NR=#9=jgJn#eIXxVyVbf%Yk}p@<;6dZaksCQjm}rTUM@r3_ UZ`P2pbLXc~FM6UF{TT=VJH%-)MgRZ+ literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_help_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_help_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..43bfd56ff4d8dd78a36e9a00a424f7b4738a78e3 GIT binary patch literal 1019 zcmZ?wbhEHb&!azI*8lmk;p@A#e}6sr`F`csH>>~s zIP>r4m4CnPoH)?)>&v-+zaISi^`x`TyQbLV#)-NwueSXAa`5A=`Y(4IUtX^MaJ%`- z!``3ICTgkho9T;rJ1HfF>nDck_t$$Yni#ZrV(^M-;VY(xzrSAl`f~M?GvyCXl-@sH za_?Blje~{j=SF|M+xY2L{l}a2@2}UryH@+=O3kZF)h{nrJwIRh>|Ev3a}|$Imp?pJ zcJFxUy%VL!HfDUe161Ge_G<0(3snzKm4Cj|B*e!kE5R-+!C_+}nG&vFlw#3e=e~GC z@VRYSr#5Gt*pR+^X~L~Tg*OfqT-ud;VQ0?Sty!lxXC7FYeEV?G_5B5x_vD%Ah-{o0 zxn)lDy6F)IRwV6Rny_n8{Py{=Tj#}WoE3F!UE0yLsfSjj9ABTletN{(so|?9hpn6# zy1YMRX>ah7o}fitfeShVHq40ZD|ekw@cbMsu7o<}q`shydjmvisL p!{GFbhpkJ$uq=A4eoo%G`Ip_CyB!l`UA7c+>n!QG_@;ru8UVsPTmAq5 literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_info_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_info_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..b390fd4acff2f7d1634a80e0cdd6220704720a4e GIT binary patch literal 1383 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 UAotvJ4@7qX5E!L*K>+~(J2ci24FCWD literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_sortdown.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_sortdown.gif new file mode 100644 index 0000000000000000000000000000000000000000..9561bbe2a6bba2a1f35cfabae226491156b48046 GIT binary patch literal 117 zcmZ?wbhEHbxA_gcK(+xq`Oplq9?fU9B0wZdiD&sMF8xgvG$ZOwdF25SHo{3VxA_gcI@yYfX-VUD6>PlTrkbJWT=7sA|g@8>OlZzIIWU=08SOCy~C literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_success_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_success_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..9af317d8442bdb5e6b734d9fe71236c4e1dbd952 GIT binary patch literal 1492 zcmV;_1uObTNk%w1VITk?0QUd@00030|Ns8}{)(T!{r&#$@%8xm``O>>(b?wE*yUY$ zqF8g9RBn?@V}(atd_z}tTXvpTahFnRj!^|K)7$6t_W3F|NuROGq_xeu$Jx2Y*x=^wS z>hAMSWPFOEyQa9y@$~oh`18n4^TMt80~vQg?2M zv80N+nq--AKwU>WQ9w&|Q%7q}U6W#(yqs~GaE-%@rrV=_qY@1P{(uStaj+3l} z@b~Ows5W%MKW(@?YqdLEoHJXQGFOu@M|dYhawT!RK5Vu;YO_0MuR3R~Ic2IiUZ6Ev zmoizEF;$K)Z@NBSpEX#LF;k2$QHCu_eJXy;O?J9SiPTqp!cu&vUyQYKn7x5}nP{)c zp1;$wrL>#2#;ncO$M*U3e9c34#6WSnJ#V-?REjNs&_#R8Lwd+UdB{R}#X)MXI#!P_ zRf{fEi7kE1L|m3KREaKPpf+)~K7-RrfXzx+hc}L^dC=O)?eyqUgey^kD^GqZPJ1az zbSd@s^Z)<n0FneQp8WU1BaRX{ae{O*qXSF=LuR&E zNp!~tm{zXHM99Kp8aQpDN|mYxLyfCNjC?rRQ~)Van8Jz`OG|?gArnBn7{JxzwNP;5 z%B3aeOPDZQT(HI1^^KdqfCH!5!iLYEJX=V#C8}};8$E#tCBm~|@r?nPGh;3>!i%0g ze+D6P^kp$)k5ky}0W@fmqf3jV@U@xKgozQjL4*M<`jI72oyHtsdfH=_JA_(88imVL zElx~`3%INqGYBz~B{>?UX(PUBa(W#9?5Z-U0W66oMY=>u(YB4+rqRL*#0R&K&83%Lx zXG;LzT=QN4_QWGhIJz977(pytVL*dQJOM=$UvwhNEZ=a%Q9ZecBg`(mm{HIQ4c>Gg z1f0l1%{0~s$Wb@T9K#DS#i+802L!D^MUF@uafA+NP(#f;)5KGcHyma2%PFdyvI;B6 z)IpF6I*O=;H1o_;PCDv16AU*26atJgsIbyZFTNxbOLPLI;6#}R0Fi(h<$z-jI=YOr z$}_=ab4x3)K&p&0>ny_#83UoQV5XBL#1RgR!Z0(8F}=7FO*GJ~lVMiZ* z2qK6del*euBV{Z>5C=KjPy`Jzz~Dj)M6j@e3Mr(3!U+T1CV~YgWl)3+1s|O7!VW(i u@dzS>0Kx?)J)i&t5G)V@11w7*!2}dE&_D$hSYW{g4rnmb&O8$o5CA*0tKk~} literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_success_sml.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_success_sml.gif new file mode 100644 index 0000000000000000000000000000000000000000..52e85a430af9da4dfb217d71b4d6f3a1d4a4b571 GIT binary patch literal 990 zcmZ?wbhEHbBjy;4ci{C-1K14rU#4Xoa9{m6qopA9n0cn|!>ecYkij zwyX=!4*mH3EoqLqSGiVbyFqxD(bS8XSDu{6U1jZO70Ic@{~t&7=B^ zBD)NOoAkU&Gy^LQJ5PtV?u{&65}4ZUmfYbweP{LTy^YnAGv=AGa7*6wj}%~b0?7r5!@qH7P%p1*$L z@#{ODxoUwG+WsY)zWExj-aqxpQS(e!bx&6L`u)?tfB$~}{{8*?cVO&*V`-G2NeC$Z zWMO1r=w{FXnGVVm3>>=|#5rX=HY{-DP?VFNPL-%m%>B+*~5-k^-+4*MLFr;tQ0}^rlS-^!^Q`Mx1hrB$jwn&hk~Xk=#Nl+_9Nu|Y$D G!5RQ;-6)O# literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_usergroups_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_usergroups_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a4e356931cad1101df3b2c0aafa12c0fb488625 GIT binary patch literal 1520 zcmVUi zCV?z6#wIr4w7SSNN}*k7%05_5946CEXVzVO(sYn!Vq{`qVRA`ou6n7FXO2oTO*J1q z@$>ij`uxz?<=Efq2`5uWU4C45pHgXyaEh;ooxRA?;q~|Wma4|1w9K)<)V|BzEr)BXCC{rtl7@UZ>*yXoh`;M$J; z__yKRuKM@S`0kDE<(2pErvCP_?&-IPhkgF@sL;oZLO?M5`QiWm_x0w8{_mYCCKB`E zjsEPG#<+O><%ap5b>vp8xZ}dKv0~8|#oc>zPd6lTe^;K&p63 z>aBL#tAMVSfX%q2%V7r3X%xz36Vz=L&TJdlcqQ9_GTetf+lxqAJR{hXS>m2$ZcQ2MUlTo8gj3!zUA#$ghxSQo@(8_sem%y%}^h)>&x>yp9M-};hC&Oqazic$hdqkv;ey&UmuU8^#Ivb@#3dDd~!J&?sIR{rF2%JC= zUq3IWqoI#61ydabg(w4hAptrL0sf$y;L*^>KR@{K@xZ^o{{H^`{r&j(`0?@a=;-L$ z+S+DjX8-^HA^8LW00930EC2ui03ZM$000R80RIUbNU)&6g9sBUT*#21A551rS;{o1 z;X+TA^1zuhU_hfy77>O5G$0HYE?(5+8MG*5L4KYD4LIZF%$bvL9xZhAY15)gfCS?6 z)aZ|)j!19X0V&cF95o#wwfrZl(I7#EkPgVhWlkl8kUo_}2^CVsQHlT^vZHkXmorQa zg1XunDB)MOj+J2+$vy15W<~_Y9Xjmmntp)aug~QK7sqRggRBK)TuPelr7VuP?M-nm_%jz zr|;gBRIM13Og{r%kp?cgEQ3%#%UF@d6b?4gL^8w7LJKXmq%jabt>EI}GWrbEPZc)Q z5Jf-d;iE+-tEl4QEEe9P;6GLz;~|2s2y_nK1S@&QQcIt|5c3N#z)a&QHPnP7 zsyImC@PiOP3=zZ-tUAF;pRf$g6U;BY5aWw4&_E;2H@t%5Ycfdu@I$0SByq&CP`vuf zFToJQsWH$r(+oGGhMM=!WWJ8iYwj1#Xp>A0gXJn!7I1QJM$`^3ckLJ^I?1Q#rCItjZ2 z4?OY2lg&R@XmL*!R74R46HG)=3LC|g(@i%9Z`|?6A-_`!L01Un^M)s9V<$W6sPoRz W@350ij_0`~RMSuY>~u&00RTHZ4*LfH literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_warning_lrg.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/icon_warning_lrg.gif new file mode 100644 index 0000000000000000000000000000000000000000..83359d818d05e8bbc90e903cd834f0c92a64a70e GIT binary patch literal 1491 zcmV;^1uXhUNk%w1VITk?0QUd@00030|Ns8}{)(T!u8)zil9py-WR;AZg@20u{r-rH zrkta@ij=T?iK$Rsd2D~Ake<4$waM@C_4)ez`1$)~c$-#adSPvW(b?wE*yY&Y>f7P# zU3sEdbDC6clT2fUM_hbES9M!y^~QfiJ+Xp2r|hf86CNnd|RU42AYc4B|2HAGuy zgR5wRt8j|2a*VQBY>9P^vU`)ZewDa?mbieIxr3Ryg`2#FoV<@;>gnB$I;-+)Z)z5u?n0Y!lmP64z%E)nyXW zWD?F}5zS%|%wZAAU=hb(5y4v!zgrNzSrEKh5W89ss8J55P!6U~4y8{Ho=gp$OAVSz z4S6~W`FIxebrt7s6yO74f%N* zrcx2mXBN+87x{Z0yImLTb|2(&9{GJDuv!@FcOk1@BB^XYPchQ*vX;l!p)>PN5QI zNf3kvp9I(#K!C@OAFoJZlHdqNf?zd!$OOe5;TYm;OY?^p0{x0 z=JA7|0D%TW)?)11Z=c`4fcYuNM^BzS1vuCeRjEXuy?O53wR54^$$-n4FYCy0;2yk< z@5=d8yx3y|eDyd6ST_#BUYj|0?7%_0MuBa{?v2o%Dcg0SJ8Yb?aloiYj@-C!s+;+` z#R!@ZgIy)y#sn0!kp&qCkRy&a+hn5}FRP^D2qXpom_P#0Vb+2<++c&vHPXbhQ9Pdz z@`x&|2$MrWK)g{P7G|KK#s>aiV@);DJi|;f8zu8eE38N|2_BEThaXyVUXsCBD~RC2oIqThL53I`T#*4B5e?8BB$6w3MinAk_aiKn4-r(IcR`^ z6;nLXgax?>S&1c>xN^uSvkW2&DTx#-%Pfl6;=n*MR6#|CH&_q{9emUw#~pUq(Z?Qp z=%Gg-e-J}VIu#Jq0u)Ywv4jyt3=zZ^K>W~!4_oxW!vM40fWk>DfPnB!Sy%bj7w z8LP{2I!WYbmF&-Ixi?j6tD|K1XR2M#l>Aw*aXL%wXS3nYW}{zi=4WzsU5r%E6qx+# za{AThd85YVOsT`KDUrWsBtGknIa3>Sy(4;AS@f^Dxt>-=XPXm#FD(1Lr2hBv=9?3X zZS^!XrNw@)>eiN((2|w-y>{aB1+99DGMA?}+UTggT+(Z*rf8+5x~aWVOGcurtl;&U zIa)H3I&#vwvQjJBn`YHj9iKlB7`)(M#!e{yWMO1rC}Yq8NrU2qfqia6SyOXMYa1sM zM_a34eqyRfcQbQJY;^IYGTuzaxglKLqNQEA}OiQec+sQ#rUUjLqg_MpsPmY43 zsgmVV8EHK$eV-B~6*UcAW2+w%1e4o&9#aAczLGF}PmMg|6J0Ey4q A)Bpeg literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/logo.png b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c43f85223a6a53b2ad0b007c464108a5eff2f3 GIT binary patch literal 12258 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 R2)gm1KtqL0g_K#){{i4^>2&}A literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/logos/maven-feather.png b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/logos/maven-feather.png new file mode 100644 index 0000000000000000000000000000000000000000..5beac166dd79c5872b6ad3c3c8826781b74ef564 GIT binary patch literal 2907 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 literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/nw_maj_rond.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/nw_maj_rond.gif new file mode 100644 index 0000000000000000000000000000000000000000..add42a4024b1533eb768d91ce7ef653043b7cfba GIT binary patch literal 51 zcmZ?wbhEHbWMg1sXkcXc4+e@qSr{1@7#VaJfB+=Jz{J(kFSzU!@2trS85pbqhMf*R literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/strich.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/strich.gif new file mode 100644 index 0000000000000000000000000000000000000000..a33e79d96bc2f849b0045d18f7330191ec4ca674 GIT binary patch literal 43 ocmZ?wbhEHbWMW`sXkY+=|Ns9h{$v3&bwDIYhJlHRg^R%&0KVx4!vFvP literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/sw_maj_rond.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/sw_maj_rond.gif new file mode 100644 index 0000000000000000000000000000000000000000..110bdf4e389a23a5a7cbb15362df172b5d93c998 GIT binary patch literal 51 zcmZ?wbhEHbWMg1sXkcXc4+e@qSr{1@7#VaJfB+=Jz{KTJ*Ty*O+^k8P7#OSpg{=-= literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/sw_med_rond.gif b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/images/sw_med_rond.gif new file mode 100644 index 0000000000000000000000000000000000000000..6671c3d0da64fea5a4deafed8a2a7e6a37f2f8aa GIT binary patch literal 46 ucmZ?wbhEHbWMN=oXkcXc4+e@qSr{1@7#VaJfB+=Jz{Kj3H{(D6gEas?nhYEO literal 0 HcmV?d00001 diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/index.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/index.html new file mode 100644 index 0000000..2132a1c --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/index.html @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + Commons Logging - + Overview + + + + + + + + +
      + +
      +
      +
      + + + + + + +

      The Logging Component

      + +

      When writing a library it is very useful to log information. However there +are many logging implementations out there, and a library cannot impose the use +of a particular one on the overall application that the library is a part of.

      + +

      The Logging package is an ultra-thin bridge between different logging +implementations. A library that uses the commons-logging API can be used with +any logging implementation at runtime. Commons-logging comes with support for a +number of popular logging implementations, and writing adapters for others is a +reasonably simple task.

      + +

      Applications (rather than libraries) may also choose to use commons-logging. +While logging-implementation independence is not as important for applications +as it is for libraries, using commons-logging does allow the application to +change to a different logging implementation without recompiling code. +

      +Note that commons-logging does not attempt to initialise or terminate the underlying +logging implementation that is used at runtime; that is the responsibility of +the application. However many popular logging implementations do automatically +initialise themselves; in this case an application may be able to avoid +containing any code that is specific to the logging implementation used.

      + +
      + + +

      Documentation

      + +

      The +Release Notes document the new features and bug fixes that have been +included in the latest release.

      + +

      The +JavaDoc API documents for the latest release are available online. +In particular, you should read the package overview of the org.apache.commons.logging +package. In addition, there is a (short) +User Guide.

      + +

      The Wiki site has +the latest updates, an FAQ and much other useful information.

      +

      +Users needing to become experts or wanting to help develop JCL should +(in addition) consult the Tech Guide. +This gives short introductions to topics such as advanced class loading. +

      +
      + + +

      Releases

      +

      +Binary and source distributions are available + here. +

      +

      1.1.1 Release - November 2007

      +

      + This release is a minor update to the 1.1 release that fixes a number of bugs, and + resolves packaging issues for maven 1.x and maven 2.x users. +

      +

      For the full details, see the release notes for this version.

      +
      +

      1.1 Release - 10 May 2006

      +

      This release makes several changes that are intended to resolve issues that + have been encountered when using commons-logging in servlet containers or j2ee + containers where complex classpaths are present and multiple copies of + commons-logging libraries are present at different levels.

      +

      This release also adds support for the TRACE level added to log4j in the + 1.2.12 release. In former commons-logging versions, the log.trace method + caused log4j to output the message at the DEBUG level (the lowest level + supported by log4j at that time).

      +

      For the full details, see the release notes for this version.

      +
      +

      1.0.5 Release (Alpha)

      +

      + Note: the 1.0.5 release was abandoned at alpha status. +

      +

      + The next JCL release will be designated 1.1 since we feel this more + accurately reflects the improvements made to the codebase.

      +
      +

      1.0.4 Release - 16 Jun 2004

      +

      +The 1.0.4 release of commons-logging is a service +release containing support for both the 1.2.x and 1.3.x series of Log4J releases. +

      +
      +

      1.0.3 Release - 7 Apr 2003

      +

      +The 1.0.3 release is primarily a maintenance and code cleanup release with minimal new features. +

      +
      +

      1.0.2 Release - 27 September 2002

      +

      +The 1.0.2 release is a packaging of bug fixes since release 1.0.1. +

      +
      +

      1.0.1 Release - 13 August 2002

      +

      +The 1.0.1 release is a packaging of bug fixes and minor enhancements since release 1.0. +

      +
      +
      +

      Development Builds

      +

      +Regular builds of the current SVN HEAD code are made available. See the +wiki for details. +

      +
      + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/integration.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/integration.html new file mode 100644 index 0000000..6f49033 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/integration.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + Commons Logging - Continuous Integration + + + + + + + +
      + +
      +
      +
      +

      Overview

      This project uses Continuum.

      Access

      The following is a link to the continuous integration system used by the project.

      Notifiers

      Configuration for notifying developers/users when a build is unsuccessful, including user information and notification mode.
      TypeAddressConfiguration
      mail-address=dev@commons.apache.org
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/issue-tracking.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/issue-tracking.html new file mode 100644 index 0000000..dbe8b51 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/issue-tracking.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + Commons Logging - Issue Tracking + + + + + + + +
      + +
      +
      +
      +

      Overview

      This project uses JIRA a J2EE-based, issue tracking and project management application.

      Issue Tracking

      Issues, bugs, and feature requests should be submitted to the following issue tracking system for this project.

      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/jdepend-report.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/jdepend-report.html new file mode 100644 index 0000000..a1ab474 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/jdepend-report.html @@ -0,0 +1,352 @@ + + + + + + + + + + + + + + Commons Logging - JDepend Report Metrics + + + + + + + +
      + +
      +
      +
      +

      Metric Results

      [ summary ] [ packages ] [ cycles ] [ explanations ]

      The following document contains the results of a JDepend metric analysis. The various metrics are defined at the bottom of this document.

      Summary

      [ summary ] [ packages ] [ cycles ] [ explanations ]

      PackageTCCCACCaCeAIDV
      org.apache.commons.logging10821720.0%88.0%8.0%1
      org.apache.commons.logging.impl181801130.0%93.0%7.0%1

      Packages

      [ summary ] [ packages ] [ cycles ] [ explanations ]

      org.apache.commons.logging

      Afferent CouplingsEfferent CouplingsAbstractnessInstabilityDistance
      1720.0%88.0%8.0%
      Abstract ClassesConcrete ClassesUsed by PackagesUses Packages
      org.apache.commons.logging.Log
      org.apache.commons.logging.LogFactory
      org.apache.commons.logging.LogConfigurationException
      org.apache.commons.logging.LogFactory$1
      org.apache.commons.logging.LogFactory$2
      org.apache.commons.logging.LogFactory$3
      org.apache.commons.logging.LogFactory$4
      org.apache.commons.logging.LogFactory$5
      org.apache.commons.logging.LogFactory$6
      org.apache.commons.logging.LogSource
      org.apache.commons.logging.impl
      java.io
      java.lang
      java.lang.reflect
      java.net
      java.security
      java.util
      org.apache.commons.logging.impl

      org.apache.commons.logging.impl

      Afferent CouplingsEfferent CouplingsAbstractnessInstabilityDistance
      1130.0%93.0%7.0%
      Abstract ClassesConcrete ClassesUsed by PackagesUses Packages
      Noneorg.apache.commons.logging.impl.AvalonLogger
      org.apache.commons.logging.impl.Jdk13LumberjackLogger
      org.apache.commons.logging.impl.Jdk14Logger
      org.apache.commons.logging.impl.Log4JLogger
      org.apache.commons.logging.impl.LogFactoryImpl
      org.apache.commons.logging.impl.LogFactoryImpl$1
      org.apache.commons.logging.impl.LogFactoryImpl$2
      org.apache.commons.logging.impl.LogFactoryImpl$3
      org.apache.commons.logging.impl.LogKitLogger
      org.apache.commons.logging.impl.NoOpLog
      org.apache.commons.logging.impl.ServletContextCleaner
      org.apache.commons.logging.impl.SimpleLog
      org.apache.commons.logging.impl.SimpleLog$1
      org.apache.commons.logging.impl.WeakHashtable
      org.apache.commons.logging.impl.WeakHashtable$1
      org.apache.commons.logging.impl.WeakHashtable$Entry
      org.apache.commons.logging.impl.WeakHashtable$Referenced
      org.apache.commons.logging.impl.WeakHashtable$WeakKey
      org.apache.commons.logging
      java.io
      java.lang
      java.lang.ref
      java.lang.reflect
      java.security
      java.text
      java.util
      java.util.logging
      javax.servlet
      org.apache.avalon.framework.logger
      org.apache.commons.logging
      org.apache.log
      org.apache.log4j

      Cycles

      [ summary ] [ packages ] [ cycles ] [ explanations ]

      PackagePackage Dependencies
      org.apache.commons.loggingorg.apache.commons.logging.impl
      org.apache.commons.logging
      org.apache.commons.logging.implorg.apache.commons.logging
      org.apache.commons.logging.impl

      Explanation

      [ summary ] [ packages ] [ cycles ] [ explanations ]

      The following explanations are for quick reference and are lifted directly from the original JDepend documentation.

      TermDescription
      Number of ClassesThe number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.
      Afferent CouplingsThe number of other packages that depend upon classes within the package is an indicator of the package's responsibility.
      Efferent CouplingsThe number of other packages that the classes in the package depend upon is an indicator of the package's independence.
      AbstractnessThe ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package.
      InstabilityThe ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package.
      DistanceThe perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible.
      CyclesPackages participating in a package dependency cycle are in a deadly embrace with respect to reusability and their release cycle. Package dependency cycles can be easily identified by reviewing the textual reports of dependency cycles. Once these dependency cycles have been identified with JDepend, they can be broken by employing various object-oriented techniques.
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/junit-report.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/junit-report.html new file mode 100644 index 0000000..fc684a3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/junit-report.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + Commons Logging - + JUnit Test Results + + + + + + + + +
      + +
      +
      +
      + + + + + + +

      Summary

      +

      + The Apache Commons Logging test cases make extensive use of + sophisticated classloader configurations in order to simulate the + behaviour of various containers. It is difficult to run these tests + under Maven (which is used to generate the website). Once JCL is + upgraded to Maven 2 it is hoped that we will be able to display a report + on the unit tests. +

      +
      + + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/license.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/license.html new file mode 100644 index 0000000..908d475 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/license.html @@ -0,0 +1,558 @@ + + + + + + + + + + + + + + Commons Logging - Project License + + + + + + + +
      + +
      +
      +
      +

      Overview

      Typically the licenses listed for the project are that of the project itself, and not of dependencies.

      Project License

      The Apache Software License, Version 2.0

      +                                 Apache License
      +                           Version 2.0, January 2004
      +                        http://www.apache.org/licenses/
      +
      +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
      +
      +   1. Definitions.
      +
      +      "License" shall mean the terms and conditions for use, reproduction,
      +      and distribution as defined by Sections 1 through 9 of this document.
      +
      +      "Licensor" shall mean the copyright owner or entity authorized by
      +      the copyright owner that is granting the License.
      +
      +      "Legal Entity" shall mean the union of the acting entity and all
      +      other entities that control, are controlled by, or are under common
      +      control with that entity. For the purposes of this definition,
      +      "control" means (i) the power, direct or indirect, to cause the
      +      direction or management of such entity, whether by contract or
      +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      +      outstanding shares, or (iii) beneficial ownership of such entity.
      +
      +      "You" (or "Your") shall mean an individual or Legal Entity
      +      exercising permissions granted by this License.
      +
      +      "Source" form shall mean the preferred form for making modifications,
      +      including but not limited to software source code, documentation
      +      source, and configuration files.
      +
      +      "Object" form shall mean any form resulting from mechanical
      +      transformation or translation of a Source form, including but
      +      not limited to compiled object code, generated documentation,
      +      and conversions to other media types.
      +
      +      "Work" shall mean the work of authorship, whether in Source or
      +      Object form, made available under the License, as indicated by a
      +      copyright notice that is included in or attached to the work
      +      (an example is provided in the Appendix below).
      +
      +      "Derivative Works" shall mean any work, whether in Source or Object
      +      form, that is based on (or derived from) the Work and for which the
      +      editorial revisions, annotations, elaborations, or other modifications
      +      represent, as a whole, an original work of authorship. For the purposes
      +      of this License, Derivative Works shall not include works that remain
      +      separable from, or merely link (or bind by name) to the interfaces of,
      +      the Work and Derivative Works thereof.
      +
      +      "Contribution" shall mean any work of authorship, including
      +      the original version of the Work and any modifications or additions
      +      to that Work or Derivative Works thereof, that is intentionally
      +      submitted to Licensor for inclusion in the Work by the copyright owner
      +      or by an individual or Legal Entity authorized to submit on behalf of
      +      the copyright owner. For the purposes of this definition, "submitted"
      +      means any form of electronic, verbal, or written communication sent
      +      to the Licensor or its representatives, including but not limited to
      +      communication on electronic mailing lists, source code control systems,
      +      and issue tracking systems that are managed by, or on behalf of, the
      +      Licensor for the purpose of discussing and improving the Work, but
      +      excluding communication that is conspicuously marked or otherwise
      +      designated in writing by the copyright owner as "Not a Contribution."
      +
      +      "Contributor" shall mean Licensor and any individual or Legal Entity
      +      on behalf of whom a Contribution has been received by Licensor and
      +      subsequently incorporated within the Work.
      +
      +   2. Grant of Copyright License. Subject to the terms and conditions of
      +      this License, each Contributor hereby grants to You a perpetual,
      +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      +      copyright license to reproduce, prepare Derivative Works of,
      +      publicly display, publicly perform, sublicense, and distribute the
      +      Work and such Derivative Works in Source or Object form.
      +
      +   3. Grant of Patent License. Subject to the terms and conditions of
      +      this License, each Contributor hereby grants to You a perpetual,
      +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      +      (except as stated in this section) patent license to make, have made,
      +      use, offer to sell, sell, import, and otherwise transfer the Work,
      +      where such license applies only to those patent claims licensable
      +      by such Contributor that are necessarily infringed by their
      +      Contribution(s) alone or by combination of their Contribution(s)
      +      with the Work to which such Contribution(s) was submitted. If You
      +      institute patent litigation against any entity (including a
      +      cross-claim or counterclaim in a lawsuit) alleging that the Work
      +      or a Contribution incorporated within the Work constitutes direct
      +      or contributory patent infringement, then any patent licenses
      +      granted to You under this License for that Work shall terminate
      +      as of the date such litigation is filed.
      +
      +   4. Redistribution. You may reproduce and distribute copies of the
      +      Work or Derivative Works thereof in any medium, with or without
      +      modifications, and in Source or Object form, provided that You
      +      meet the following conditions:
      +
      +      (a) You must give any other recipients of the Work or
      +          Derivative Works a copy of this License; and
      +
      +      (b) You must cause any modified files to carry prominent notices
      +          stating that You changed the files; and
      +
      +      (c) You must retain, in the Source form of any Derivative Works
      +          that You distribute, all copyright, patent, trademark, and
      +          attribution notices from the Source form of the Work,
      +          excluding those notices that do not pertain to any part of
      +          the Derivative Works; and
      +
      +      (d) If the Work includes a "NOTICE" text file as part of its
      +          distribution, then any Derivative Works that You distribute must
      +          include a readable copy of the attribution notices contained
      +          within such NOTICE file, excluding those notices that do not
      +          pertain to any part of the Derivative Works, in at least one
      +          of the following places: within a NOTICE text file distributed
      +          as part of the Derivative Works; within the Source form or
      +          documentation, if provided along with the Derivative Works; or,
      +          within a display generated by the Derivative Works, if and
      +          wherever such third-party notices normally appear. The contents
      +          of the NOTICE file are for informational purposes only and
      +          do not modify the License. You may add Your own attribution
      +          notices within Derivative Works that You distribute, alongside
      +          or as an addendum to the NOTICE text from the Work, provided
      +          that such additional attribution notices cannot be construed
      +          as modifying the License.
      +
      +      You may add Your own copyright statement to Your modifications and
      +      may provide additional or different license terms and conditions
      +      for use, reproduction, or distribution of Your modifications, or
      +      for any such Derivative Works as a whole, provided Your use,
      +      reproduction, and distribution of the Work otherwise complies with
      +      the conditions stated in this License.
      +
      +   5. Submission of Contributions. Unless You explicitly state otherwise,
      +      any Contribution intentionally submitted for inclusion in the Work
      +      by You to the Licensor shall be under the terms and conditions of
      +      this License, without any additional terms or conditions.
      +      Notwithstanding the above, nothing herein shall supersede or modify
      +      the terms of any separate license agreement you may have executed
      +      with Licensor regarding such Contributions.
      +
      +   6. Trademarks. This License does not grant permission to use the trade
      +      names, trademarks, service marks, or product names of the Licensor,
      +      except as required for reasonable and customary use in describing the
      +      origin of the Work and reproducing the content of the NOTICE file.
      +
      +   7. Disclaimer of Warranty. Unless required by applicable law or
      +      agreed to in writing, Licensor provides the Work (and each
      +      Contributor provides its Contributions) on an "AS IS" BASIS,
      +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      +      implied, including, without limitation, any warranties or conditions
      +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      +      PARTICULAR PURPOSE. You are solely responsible for determining the
      +      appropriateness of using or redistributing the Work and assume any
      +      risks associated with Your exercise of permissions under this License.
      +
      +   8. Limitation of Liability. In no event and under no legal theory,
      +      whether in tort (including negligence), contract, or otherwise,
      +      unless required by applicable law (such as deliberate and grossly
      +      negligent acts) or agreed to in writing, shall any Contributor be
      +      liable to You for damages, including any direct, indirect, special,
      +      incidental, or consequential damages of any character arising as a
      +      result of this License or out of the use or inability to use the
      +      Work (including but not limited to damages for loss of goodwill,
      +      work stoppage, computer failure or malfunction, or any and all
      +      other commercial damages or losses), even if such Contributor
      +      has been advised of the possibility of such damages.
      +
      +   9. Accepting Warranty or Additional Liability. While redistributing
      +      the Work or Derivative Works thereof, You may choose to offer,
      +      and charge a fee for, acceptance of support, warranty, indemnity,
      +      or other liability obligations and/or rights consistent with this
      +      License. However, in accepting such obligations, You may act only
      +      on Your own behalf and on Your sole responsibility, not on behalf
      +      of any other Contributor, and only if You agree to indemnify,
      +      defend, and hold each Contributor harmless for any liability
      +      incurred by, or claims asserted against, such Contributor by reason
      +      of your accepting any such warranty or additional liability.
      +
      +   END OF TERMS AND CONDITIONS
      +
      +   APPENDIX: How to apply the Apache License to your work.
      +
      +      To apply the Apache License to your work, attach the following
      +      boilerplate notice, with the fields enclosed by brackets "[]"
      +      replaced with your own identifying information. (Don't include
      +      the brackets!)  The text should be enclosed in the appropriate
      +      comment syntax for the file format. We also recommend that a
      +      file or class name and description of purpose be included on the
      +      same "printed page" as the copyright notice for easier
      +      identification within third-party archives.
      +
      +   Copyright [yyyy] [name of copyright owner]
      +
      +   Licensed under the Apache License, Version 2.0 (the "License");
      +   you may not use this file except in compliance with the License.
      +   You may obtain a copy of the License at
      +
      +       http://www.apache.org/licenses/LICENSE-2.0
      +
      +   Unless required by applicable law or agreed to in writing, software
      +   distributed under the License is distributed on an "AS IS" BASIS,
      +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +   See the License for the specific language governing permissions and
      +   limitations under the License.
      +
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/mail-lists.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/mail-lists.html new file mode 100644 index 0000000..9080667 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/mail-lists.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + Commons Logging - Project Mailing Lists + + + + + + + +
      + +
      +
      +
      +

      Project Mailing Lists

      These are the mailing lists that have been established for this project. For each list, there is a subscribe, unsubscribe, and an archive link.

      NameSubscribeUnsubscribePostArchiveOther Archives
      Commons Commits ListSubscribeUnsubscribePostmail-archives.apache.orgwww.mail-archive.com
      Commons Dev ListSubscribeUnsubscribePostmail-archives.apache.orgwww.mail-archive.com
      www.nabble.com
      Commons Issues ListSubscribeUnsubscribePostmail-archives.apache.orgwww.mail-archive.com
      www.nabble.com
      Commons User ListSubscribeUnsubscribePostmail-archives.apache.orgwww.mail-archive.com
      www.nabble.com
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-info.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-info.html new file mode 100644 index 0000000..dd259c8 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-info.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + Commons Logging - Project Information + + + + + + + +
      + +
      +
      +
      +

      Project Information

      This document provides an overview of the various documents and links that are part of this project's general information. All of this content is automatically generated by Maven on behalf of the project.

      Overview

      DocumentDescription
      Continuous IntegrationThis is a link to the definitions of all continuous integration processes that builds and tests code on a frequent, regular basis.
      DependenciesThis document lists the projects dependencies and provides information on each dependency.
      Issue TrackingThis is a link to the issue management system for this project. Issues (bugs, features, change requests) can be created and queried using this link.
      Mailing ListsThis document provides subscription and archive information for this project's mailing lists.
      Project LicenseThis is a link to the definitions of project licenses.
      Project SummaryThis document lists other related information of this project
      Project TeamThis document provides information on the members of this project. These are the individuals who have contributed to the project in one form or another.
      Source RepositoryThis is a link to the online source repository that can be viewed via a web browser.
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-reports.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-reports.html new file mode 100644 index 0000000..5b73eec --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-reports.html @@ -0,0 +1,352 @@ + + + + + + + + + + + + + + Commons Logging - Generated Reports + + + + + + + +
      + +
      +
      +
      +

      Generated Reports

      This document provides an overview of the various reports that are automatically generated by Maven Each report is briefly described below.

      Overview

      DocumentDescription
      ClirrReport on binary and source API differences between releases
      JavaDocsJavaDoc API documentation.
      JDependJDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to manage package dependencies effectively.
      Maven Surefire ReportReport on the test results of the project.
      RAT ReportReport on compliance to license related source code policies
      Source XrefHTML based, cross-reference version of Java source code.
      Test Source XrefHTML based, cross-reference version of Java test source code.
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-summary.html new file mode 100644 index 0000000..fe2f1c8 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/project-summary.html @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + Commons Logging - Project Summary + + + + + + + +
      + +
      +
      +
      +

      Project Summary

      Project Information

      FieldValue
      NameCommons Logging
      DescriptionCommons Logging is a thin adapter allowing configurable bridging to other, + well known logging systems.
      Homepagehttp://commons.apache.org/logging

      Project Organization

      FieldValue
      NameThe Apache Software Foundation
      URLhttp://www.apache.org/

      Build Information

      FieldValue
      GroupIdcommons-logging
      ArtifactIdcommons-logging
      Version1.1.1
      Typejar
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/proposal.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/proposal.html new file mode 100644 index 0000000..a27f214 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/proposal.html @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + Commons Logging - +Proposal for Logging Library Package + + + + + + + +
      + +
      +
      +
      + + + + + +

      Proposal for Logging Package

      + + + +

      (0) Rationale

      + +

      There is a great need for debugging and logging information inside of +Commons components such as HTTPClient and dbcp. However, there are many +logging APIs out there and it is difficult to choose among them. +

      + +

      The Logging package will be an ultra-thin bridge between different logging +libraries. Commons components may use the Logging JAR to remove +compile-time/runtime dependencies on any particular logging package, +and contributors may write Log implementations for the library of their choice. +

      + +
      +

      (1) Scope of the Package

      + +

      The package shall create and maintain a package that provides extremely +basic logging functionality and bridges to other, more sophisticated logging +implementations. +

      + +

      +The package should : +

        +
      • Have an API which should be as simple to use as possible
      • +
      • Provide support for log4j
      • +
      • Provide pluggable support for other logging APIs
      • +
      + + + +Non-goals: +
        +
      • This package will not perform logging itself, except at the most basic + level.
      • +
      • We do not seek to become a "standard" API.
      • +
      + + +
      +

      (1.5) Interaction With Other Packages

      + +Logging relies on: + + +
        +
      • Java Development Kit (Version 1.1 or later)
      • +
      • Avalon Framework (compile-time dependency only unless this Log + implementation is selected at runtime)
      • +
      • Avalon LogKit (compile-time dependency only unless this Log + implementation is selected at runtime)
      • +
      • JDK 1.4 (compile-time dependency only unless this log implementation + is selected at runtime).
      • +
      • Log4J (compile-time dependency only unless this Log + implementation is selected at runtime)
      • +
      • Lumberjack + (compile-time dependency only unless this Log + implementation is selected at runtime)
      • +
      + +
      +

      (2) Required Jakarta-Commons Resources

      + +
        +
      • CVS Repository - New directory logging in the +jakarta-commons CVS repository.
      • + +
      • Initial Committers - The list is provided below.
      • + +
      • Mailing List - Discussions will take place on the general +dev@commons.apache.org mailing list. To help list +subscribers identify messages of interest, it is suggested that the +message subject of messages about this component be prefixed with +[Logging].
      • + +
      • Bugzilla - New component "Logging" under the "Commons" product +category, with appropriate version identifiers as needed.
      • + +
      • Jyve FAQ - New category "commons-logging" (when available).
      • +
      + + +
      +

      (4) Initial Committers

      + +The initial committers on the Logging component shall be: + +
        +
      • Morgan Delagrange
      • +
      • Rodney Waldhoff
      • +
      • Craig McClanahan
      • +
      + +
      +
      + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/rat-report.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/rat-report.html new file mode 100644 index 0000000..2757bd3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/rat-report.html @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + Commons Logging - RAT (Release Audit Tool) results + + + + + + + +
      + +
      +
      +
      +

      RAT (Release Audit Tool) results

      The following document contains the results of RAT (Release Audit Tool).

      +*****************************************************
      +Summary
      +-------
      +Notes: 3
      +Binaries: 3
      +Archives: 0
      +Standards: 105
      +
      +Apache Licensed: 103
      +Generated Documents: 0
      +
      +JavaDocs are generated and so license header is optional
      +Generated files do not required license headers
      +
      +2 Unknown Licenses
      +
      +*******************************
      +
      +Archives (+ indicates readable, $ unreadable): 
      +
      + 
      +*****************************************************
      +  Files with AL headers will be marked L
      +  Binary files (which do not require AL headers) will be marked B
      +  Compressed archives will be marked A
      +  Notices, licenses etc will be marked N
      +  AL    build-testing.xml
      +  AL    build.properties.sample
      +  AL    build.xml
      +  AL    checkstyle.xml
      +  AL    commons-logging-api.pom
      + !????? doap_logging.rdf
      +  AL    license-header.txt
      +  N     LICENSE.txt
      +  AL    maven.xml
      +  N     NOTICE.txt
      +  AL    pom.xml
      +  AL    project.properties
      +  AL    project.xml
      +  AL    PROPOSAL.html
      +  N     RELEASE-NOTES.txt
      +  AL    src/assembly/bin.xml
      +  AL    src/assembly/src.xml
      + !????? src/conf/MANIFEST.MF
      +  AL    src/java/org/apache/commons/logging/impl/AvalonLogger.java
      +  AL    src/java/org/apache/commons/logging/impl/Jdk13LumberjackLogger.java
      +  AL    src/java/org/apache/commons/logging/impl/Jdk14Logger.java
      +  AL    src/java/org/apache/commons/logging/impl/Log4JLogger.java
      +  AL    src/java/org/apache/commons/logging/impl/LogFactoryImpl.java
      +  AL    src/java/org/apache/commons/logging/impl/LogKitLogger.java
      +  AL    src/java/org/apache/commons/logging/impl/NoOpLog.java
      +  AL    src/java/org/apache/commons/logging/impl/package.html
      +  AL    src/java/org/apache/commons/logging/impl/ServletContextCleaner.java
      +  AL    src/java/org/apache/commons/logging/impl/SimpleLog.java
      +  AL    src/java/org/apache/commons/logging/impl/WeakHashtable.java
      +  AL    src/java/org/apache/commons/logging/Log.java
      +  AL    src/java/org/apache/commons/logging/LogConfigurationException.java
      +  AL    src/java/org/apache/commons/logging/LogFactory.java
      +  AL    src/java/org/apache/commons/logging/LogSource.java
      +  AL    src/java/org/apache/commons/logging/package.html
      +  AL    src/java/overview.html
      +  B     src/media/logo.png
      +  B     src/media/logo.xcf
      +  AL    src/site/site.xml
      +  AL    src/test/org/apache/commons/logging/AbstractLogTest.java
      +  AL    src/test/org/apache/commons/logging/AltHashtable.java
      +  AL    src/test/org/apache/commons/logging/AltHashtableTestCase.java
      +  AL    src/test/org/apache/commons/logging/avalon/AvalonLoggerTestCase.java
      +  AL    src/test/org/apache/commons/logging/BadHashtablePropertyTestCase.java
      +  AL    src/test/org/apache/commons/logging/BasicOperationsTestCase.java
      +  AL    src/test/org/apache/commons/logging/config/FirstPriorityConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/config/nopriority/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/config/priority10/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/config/priority20/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/config/priority20a/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/config/PriorityConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/DummyException.java
      +  AL    src/test/org/apache/commons/logging/impl/WeakHashtableTest.java
      +  AL    src/test/org/apache/commons/logging/jdk14/CustomConfig.properties
      +  AL    src/test/org/apache/commons/logging/jdk14/CustomConfigAPITestCase.java
      +  AL    src/test/org/apache/commons/logging/jdk14/CustomConfigFullTestCase.java
      +  AL    src/test/org/apache/commons/logging/jdk14/CustomConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/jdk14/DefaultConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/jdk14/TestHandler.java
      +  AL    src/test/org/apache/commons/logging/LoadTestCase.java
      +  AL    src/test/org/apache/commons/logging/log4j/log4j12/ApiClasspathStandardTestCase.java
      +  AL    src/test/org/apache/commons/logging/log4j/log4j12/AppClasspathStandardTestCase.java
      +  AL    src/test/org/apache/commons/logging/log4j/log4j12/ChildClasspathStandardTestCase.java
      +  AL    src/test/org/apache/commons/logging/log4j/log4j12/Log4j12StandardTests.java
      +  AL    src/test/org/apache/commons/logging/log4j/log4j12/ParentClasspathStandardTestCase.java
      +  AL    src/test/org/apache/commons/logging/log4j/log4j12/TestAppender.java
      +  AL    src/test/org/apache/commons/logging/log4j/StandardTests.java
      +  AL    src/test/org/apache/commons/logging/logkit/StandardTestCase.java
      +  AL    src/test/org/apache/commons/logging/LogTestCase.java
      +  AL    src/test/org/apache/commons/logging/noop/NoOpLogTestCase.java
      +  AL    src/test/org/apache/commons/logging/NullClassLoaderTestCase.java
      +  AL    src/test/org/apache/commons/logging/pathable/ChildFirstTestCase.java
      +  AL    src/test/org/apache/commons/logging/pathable/GeneralTestCase.java
      +  AL    src/test/org/apache/commons/logging/pathable/ParentFirstTestCase.java
      +  AL    src/test/org/apache/commons/logging/PathableClassLoader.java
      +  AL    src/test/org/apache/commons/logging/PathableTestSuite.java
      +  AL    src/test/org/apache/commons/logging/security/MockSecurityManager.java
      +  AL    src/test/org/apache/commons/logging/security/SecurityAllowedTestCase.java
      +  AL    src/test/org/apache/commons/logging/security/SecurityForbiddenTestCase.java
      +  AL    src/test/org/apache/commons/logging/servlet/BasicServletTestCase.java
      +  AL    src/test/org/apache/commons/logging/simple/CustomConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/simple/DateTimeCustomConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/simple/DecoratedSimpleLog.java
      +  AL    src/test/org/apache/commons/logging/simple/DefaultConfigTestCase.java
      +  AL    src/test/org/apache/commons/logging/simple/LogRecord.java
      +  AL    src/test/org/apache/commons/logging/SimpleLogTestCase.java
      +  AL    src/test/org/apache/commons/logging/tccl/BadTCCLTestCase.java
      +  AL    src/test/org/apache/commons/logging/tccl/custom/MyLog.java
      +  AL    src/test/org/apache/commons/logging/tccl/custom/MyLogFactoryImpl.java
      +  AL    src/test/org/apache/commons/logging/tccl/log/props_disable_tccl/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/tccl/log/props_enable_tccl/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/tccl/log/TcclDisabledTestCase.java
      +  AL    src/test/org/apache/commons/logging/tccl/log/TcclEnabledTestCase.java
      +  AL    src/test/org/apache/commons/logging/tccl/logfactory/props_disable_tccl/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/tccl/logfactory/props_enable_tccl/commons-logging.properties
      +  AL    src/test/org/apache/commons/logging/tccl/logfactory/TcclDisabledTestCase.java
      +  AL    src/test/org/apache/commons/logging/tccl/logfactory/TcclEnabledTestCase.java
      +  AL    src/test/org/apache/commons/logging/tccl/NullTCCLTestCase.java
      +  AL    src/test/org/apache/commons/logging/UserClass.java
      +  AL    STATUS.html
      +  AL    xdocs/building.xml
      +  AL    xdocs/cvs-usage.xml
      +  AL    xdocs/guide.xml
      +  B     xdocs/images/logo.png
      +  AL    xdocs/index.xml
      +  AL    xdocs/issue-tracking.xml.bak
      +  AL    xdocs/junit-report.xml
      +  AL    xdocs/navigation.xml
      +  AL    xdocs/proposal.xml
      +  AL    xdocs/style/project.css
      +  AL    xdocs/tech.xml
      +  AL    xdocs/troubleshooting.xml
      + 
      + *****************************************************
      + Printing headers for files without AL header...
      + 
      + 
      + =======================================================================
      + ==doap_logging.rdf
      + =======================================================================
      + <?xml version="1.0"?>
      +<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:doap="http://usefulinc.com/ns/doap#" xml:lang="en">
      +  <Project rdf:about="http://commons.apache.org/logging/">
      +    <name>Apache Commons Logging</name>
      +    <homepage rdf:resource="http://commons.apache.org/logging/"/>
      +    <programming-language>Java</programming-language>
      +    <category rdf:resource="http://projects.apache.org/category/library"/>
      +    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
      +    <bug-database rdf:resource="http://issues.apache.org/jira/browse/LOGGING"/>
      +    <download-page rdf:resource="http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi"/>
      +    <asfext:pmc rdf:resource="http://commons.apache.org/"/>
      +    <shortdesc xml:lang="en">Commons Logging</shortdesc>
      +    <description xml:lang="en">
      +    Commons Logging is a thin adapter allowing configurable bridging to other,
      +    well known logging systems.
      +  </description>
      +    <repository>
      +      <SVNRepository>
      +        <browse rdf:resource="http://svn.apache.org/repos/asf/commons/proper/logging/trunk"/>
      +        <location rdf:resource="http://svn.apache.org/repos/asf/commons/proper/logging"/>
      +      </SVNRepository>
      +    </repository>
      +    <release>
      +      <revision>
      +        <name>commons-logging</name>
      +        <created>2004-06-15</created>
      +        <version>1.0.4</version>
      +      </revision>
      +    </release>
      +    <mailing-list rdf:resource="http://commons.apache.org/mail-lists.html"/>
      +  </Project>
      +</rdf:RDF>
      +
      + =======================================================================
      + ==src/conf/MANIFEST.MF
      + =======================================================================
      + Extension-Name: org.apache.commons.logging
      +Specification-Title: Commons Logging
      +Specification-Vendor: Apache Software Foundation
      +Specification-Version: 1.0
      +Implementation-Title: Commons Logging
      +Implementation-Vendor-Id: org.apache
      +Implementation-Vendor: Apache Software Foundation
      +Implementation-Version: 1.1.1
      +

      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/source-repository.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/source-repository.html new file mode 100644 index 0000000..fef2223 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/source-repository.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + Commons Logging - Source Repository + + + + + + + +
      + +
      +
      +
      +

      Overview

      This project uses a Source Content Management System to manage its source code.

      Web Access

      The following is a link to the online source repository.

      Anonymous access

      Refer to the documentation of the SCM used for more information about anonymously check out. The connection url is:

      svn:http://svn.apache.org/repos/asf/commons/proper/logging/tags/commons-logging-1.1.1

      Developer access

      Refer to the documentation of the SCM used for more information about developer checked out. The connection url is:

      svn:https://svn.apache.org/repos/asf/commons/proper/logging/tags/commons-logging-1.1.1

      Access from behind a firewall

      Refer to the documentation of the SCM used for more information about an access behind a firewall.

      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/surefire-report.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/surefire-report.html new file mode 100644 index 0000000..0f79041 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/surefire-report.html @@ -0,0 +1,366 @@ + + + + + + + + + + + + + + Commons Logging - + + + + + + + +
      + +
      +
      +
      +

      Summary

      TestsErrors FailuresSkippedSuccess RateTime
      1000100%0.11

      Note: failures are anticipated and checked for with assertions while errors are unanticipated.

      Package List

      PackageTestsErrors FailuresSkippedSuccess RateTime
      org.apache.commons.logging.avalon1000100%0.11

      Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.

      org.apache.commons.logging.avalon

      ClassTestsErrors FailuresSkippedSuccess RateTime
      AvalonLoggerTestCase1000100%0.11

      Test Cases

      AvalonLoggerTestCase

      testLoggingWithNullParameters0.11
      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/team-list.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/team-list.html new file mode 100644 index 0000000..cc7e305 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/team-list.html @@ -0,0 +1,371 @@ + + + + + + + + + + + + + + Commons Logging - Team list + + + + + + + +
      + +
      +
      +
      +

      The Team

      A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.

      The team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.

      Members

      The following is a list of developers with commit privileges that have directly contributed to the project in one way or another.

      IdNameEmailOrganizationRoles
      morgandMorgan Delagrangemorgand at apache dot orgApacheJava Developer
      rwaldhoffRodney Waldhoffrwaldhoff at apache orgApache Software Foundation-
      craigmccCraig McClanahancraigmcc at apache orgApache Software Foundation-
      sandersScott Sanderssanders at apache dot orgApache Software Foundation-
      rdonkinRobert Burrell Donkinrdonkin at apache dot orgApache Software Foundation-
      donaldpPeter Donalddonaldp at apache dot org--
      costinCostin Manolachecostin at apache dot orgApache Software Foundation-
      rsitzeRichard Sitzersitze at apache dot orgApache Software Foundation-
      baliukaJuozas Baliukabaliuka@apache.org-Java Developer
      skitchingSimon Kitchingskitching@apache.orgApache Software Foundation-
      dennislDennis Lundbergdennisl@apache.orgApache Software Foundation-
      bstansberryBrian Stansberry---

      Contributors

      There are no contributors listed for this project. Please check back again later.

      +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/tech.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/tech.html new file mode 100644 index 0000000..a22bc42 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/tech.html @@ -0,0 +1,949 @@ + + + + + + + + + + + + + + Commons Logging - + Technology Guide + + + + + + + + +
      + +
      +
      +
      + + + + + +

      Overview

      + +

      Introduction

      + + This guide is aimed at describing the technologies that JCL developers and expert users + (and users who need to become experts) + should be familiar with. The aim is to give an understanding whilst being precise but brief. + Details which are not relevant for JCL have been suppressed. + References have been included. + + + These topics are a little difficult and it's easy for even experienced developers to make + mistakes. We need you to help us get it right! Please submit corrections, comments, additional references + and requests for clarification + by either: + + + + TIA + +
      + +
      +

      A Short Introduction to Class Loading and Class Loaders

      +

      Preamble

      + + This is intended to present a guide to the process by which Java bytecode uses bytecode in other classes + from the perspective of the language and virtual machine specifications. The focus will be on deciding + which bytecode will be used (rather than the mechanics of the usage). It focusses on facts and terminology. + + + The process is recursive: it is therefore difficult to pick a starting point. + Sun's documentation starts from the persective of the startup of a new application. + This guide starts from the perspective of an executing application. + + + During this discussion, please assume that each time that class is mentioned, + the comments applied equally well to interfaces. + + + This document is targeted at Java 1.2 and above. + +
      +

      Resolution Of Symbolic References

      + + (LangSpec 12.3.3) + The bytecode representation of a class contains symbolic names for other classes referenced. + + + + In practical development terms: If a class is imported (either explicitly in the list of imports at the top of + the source file or implicitly through a fully qualified name in the source code) it is referenced symbolically. + + + + (VMSpec 5.4.3) + Resolution of a symbolic reference occurs dynamically at runtime and is carried out by + the Java Virtual Machine. Resolution of a symbolic reference requires loading and linking of the new class. + + + + Note: references are not statically resolved at compile time. + + +
      +

      Loading

      + + (VMSpec 2.17.2) + Loading is the name given to the process by which a binary form of a class is obtained + by the Java Virtual Machine. + Java classes are always loaded and linked dynamically by the Java Virtual Machine + (rather than statically by the compiler). + + + + In practical development terms: + This means that the developer has no certain knowledge about the actual + bytecode that will be used to execute any external call (one made outside the class). This is determined only + at execution time and is affected by the way that the code is deployed. + + +
      +

      Linking

      + + (VMSpec 2.17.3) + Linking is the name used for combining the + binary form of a class into the Java Virtual Machine. This must happen before the class can be used. + + + (VMSpec 2.17.3) + Linking is composed of verification, preparation and resolution (of symbolic references). + Flexibility is allowed over the timing of resolution. (Within limit) this may happen at any time after + preparation and before that reference is used. + + + + In practical development terms: This means that different JVMs may realize that a reference cannot be + resolved at different times during execution. Consequently, the actual behaviour cannot be precisely predicted + without intimate knowledge of the JVM (on which the bytecode will be executed). + This makes it hard to give universal guidance to users. + + +
      + +

      Loading Classes

      + + (VMSpec 2.17.2) + The loading process is performed by a ClassLoader. + + + (VMSpec 5.3) + A classloader may create a class either by delegation or by defining it directly. + The classloader that initiates loading of a class is known as the initiating loader. + The classloader that defines the class is known as the defining loader. + + + + In practical terms: understanding and appreciating this distinction is crucial when debugging issues + concerning classloaders. + + +
      + +

      Bootstrap Classloader

      + + (VMSPEC 5.3) + The bootstrap is the base ClassLoader supplied by the Java Virtual Machine. + All others are user (also known as application) ClassLoader instances. + + + + In practical development terms: The System classloader returned by Classloader.getSystemClassLoader() + will be either the bootstrap classloader or a direct descendent of the bootstrap classloader. + Only when debugging issues concerning the system classloader should there be any need to consider the detailed + differences between the bootstrap classloader and the system classloader. + + +
      +

      Runtime Package

      + + (VMSpec 5.3) + At runtime, a class (or interface) is determined by its fully qualified name + and by the classloader that defines it. This is known as the class's runtime package. + + + (VMSpec 5.4.4) + Only classes in the same runtime package are mutually accessible. + + + + In practical development terms: two classes with the same symbolic name can only be used interchangably + if they are defined by the same classloader. A classic symptom indicative of a classloader issue is that + two classes with the same fully qualified name are found to be incompatible during a method call. + This may happen when a member is expecting an interface which is (seemingly) implemented by a class + but the class is in a different runtime package after being defined by a different classloader. This is a + fundamental java language security feature. + + +
      + +

      Loader Used To Resolve A Symbolic Reference

      + + (VMSpec 5.3) + The classloader which defines the class (whose reference is being resolved) is the one + used to initiate loading of the class referred to. + + + + In practial development terms: This is very important to bear in mind when trying to solve classloader issues. + A classic misunderstanding is this: suppose class A defined by classloader C has a symbolic reference to + class B and further that when C initiates loading of B, this is delegated to classloader D which defines B. + Class B can now only resolve symbols that can be loaded by D, rather than all those which can be loaded by C. + This is a classic recipe for classloader problems. + + +
      + +

      Bibliography

      +
        +
      • + VMSpec The Java Virtual Machine Specification, Second Edition +
      • +
      • + LangSpec The Java Language Specification, Second Edition +
      • +
      +
      +
      +

      A Short Guide To Hierarchical Class Loading

      +

      Delegating Class Loaders

      + + When asked to load a class, a class loader may either define the class itself or delegate. + The base ClassLoader class insists that every implementation has a parent class loader. + This delegation model therefore naturally forms a tree structure rooted in the bootstrap classloader. + + + Containers (i.e. applications such as servlet engines or application servers + that manage and provide support services for a number of "contained" applications + that run inside of them) often use complex trees to allow isolation of different applications + running within the container. This is particularly true of J2EE containers. + +
      + +

      Parent-First And Child-First Class Loaders

      + + When a classloader is asked to load a class, a question presents itself: should it immediately + delegate the loading to its parent (and thus only define those classes not defined by its parent) + or should it try to define it first itself (and only delegate to its parent those classes it does + not itself define). Classloaders which universally adopt the first approach are termed parent-first + and the second child-first. + + + Note: the term child-first (though commonly used) is misleading. + A better term (and one which may be encountered on the mailing list) is parent-last. + This more accurately describes the actual process of classloading performed + by such a classloader. + + + Parent-first loading has been the standard mechanism in the JDK + class loader, at least since Java 1.2 introduced hierarchical classloaders. + +

      + Child-first classloading has the advantage of helping to improve isolation + between containers and the applications inside them. If an application + uses a library jar that is also used by the container, but the version of + the jar used by the two is different, child-first classloading allows the + contained application to load its version of the jar without affecting the + container. +

      +

      + The ability for a servlet container to offer child-first classloading + is made available, as an option, by language in the servlet spec (Section + 9.7.2) that allows a container to offer child-first loading with + certain restrictions, such as not allowing replacement of java.* or + javax.* classes, or the container's implementation classes. +

      +

      + Though child-first and parent-first are not the only strategies possible, + they are by far the most common. + All other strategies are rare. + However, it is not uncommon to be faced with a mixture of parent-first and child-first + classloaders within the same hierarchy. +

      +
      + +

      Class ClassLoader

      +

      + The class loader used to define a class is available programmatically by calling + the getClassLoader method + on the class in question. This is often known as the class classloader. +

      +
      + +

      Context ClassLoader

      +

      + Java 1.2 introduces a mechanism which allows code to access classloaders + which are not the class classloader or one of its parents. + A thread may have a class loader associated with it by its creator for use + by code running in the thread when loading resources and classes. + This classloader is accessed by the getContextClassLoader + method on Thread. It is therefore often known as the context classloader. +

      +

      + Note that the quality and appropriateness of the context classloader depends on the + care with which the thread's owner manages it. +

      +
      + +

      The Context Classloader in Container Applications

      +

      + The Javadoc for + + Thread.setContextClassLoader emphasizes the setting of the + context classloader as an aspect of thread creation. However, in many + applications the context classloader is not fixed at thread creation but + rather is changed throughout the life of a thread as thread execution moves + from one context to another. This usage of the context classloader is + particularly important in container applications. +

      +

      + For example, in a hypothetical servlet container, a pool of threads + is created to handle HTTP requests. When created these threads have their + context classloader set to a classloader that loads container classes. + After the thread is assigned to handle a request, container code parses + the request and then determines which of the deployed web applications + should handle it. Only when the container is about to call code associated + with a particular web application (i.e. is about to cross an "application + boundary") is the context classloader set to the classloader used to load + the web app's classes. When the web application finishes handling the + request and the call returns, the context classloader is set back to the + container classloader. +

      +

      + In a properly managed container, changes in the context classloader are + made when code execution crosses an application boundary. When contained + application A is handling a request, the context classloader + should be the one used to load A's resources. When application + B is handling a request, the context classloader should be + B's. +

      +

      + While a contained application is handling a request, it is not + unusual for it to call system or library code loaded by the container. + For example, a contained application may wish to call a utility function + provided by a shared library. This kind of call is considered to be + within the "application boundary", so the context classloader remains + the contained application's classloader. If the system or library code + needs to load classes or other resources only visible to the contained + application's classloader, it can use the context classloader to access + these resources. +

      +

      + If the context classloader is properly managed, system and library code + that can be accessed by multiple applications can not only use it to load + application-specific resources, but also can use it to detect which + application is making a call and thereby provided services tailored to the + caller. +

      +
      + +

      Issues with Context ClassLoaders

      +

      + In practice, context classloaders vary in quality and issues sometimes arise + when using them. + The owner of the thread is responsible for setting the classloader. + If the context classloader is not set then it will default to the system + classloader. + Any container doing so will cause difficulties for any code using the context classloader. +

      +

      + The owner is also at liberty to set the classloader as they wish. + Containers may set the context classloader so that it is neither a child nor a parent + of the classloader that defines the class using that loader. + Again, this will cause difficulties. +

      +

      + Introduced in Java J2EE 1.3 + is a requirement for vendors to appropriately set the context classloader. + Section 6.2.4.8 (1.4 text): +

      +
      +This specification requires that J2EE containers provide a per thread
      +context class loader for the use of system or library classes in
      +dynamicly loading classes provided by the application.  The EJB
      +specification requires that all EJB client containers provide a per
      +thread context class loader for dynamicly loading system value classes.
      +The per thread context class loader is accessed using the Thread method
      +getContextClassLoader.
      +
      +The classes used by an application will typically be loaded by a
      +hierarchy of class loaders. There may be a top level application class
      +loader, an extension class loader, and so on, down to a system class
      +loader.  The top level application class loader delegates to the lower
      +class loaders as needed.  Classes loaded by lower class loaders, such as
      +portable EJB system value classes, need to be able to discover the top
      +level application class loader used to dynamicly load application
      +classes.
      +
      +We require that containers provide a per thread context class loader
      +that can be used to load top level application classes as described
      +above.
      +
      +

      + This specification leaves quite a lot of freedom for vendors. + (As well as using unconventional terminology and containing the odd typo.) + It is a difficult passage (to say the least). +

      +
      + +

      Reflection And The Context ClassLoader

      +

      + Reflection cannot bypass restrictions imposed by the java language security model, but, by avoiding symbolic + references, reflection can be used to load classes which could not otherwise be loaded. Another ClassLoader + can be used to load a class and then reflection used to create an instance. +

      +

      + Recall that the runtime packaging is used to determine accessibility. + Reflection cannot be used to avoid basic java security. + Therefore, the runtime packaging becomes an issue when attempting to cast classes + created by reflection using other class loaders. + When using this strategy, various modes of failure are possible + when common class references are defined by the different class loaders. +

      +

      + Reflection is often used with the context classloader. In theory, this allows a class defined in + a parent classloader to load any class that is loadable by the application. + In practice, this only works well when the context classloader is set carefully. +

      +
      + +

      More Information

      + +
      +
      + +

      A Short Theory Guide To JCL

      +

      Isolation And The Context Class Loader

      + + JCL takes the view that different context class loader indicate boundaries between applications + running in a container environment. Isolation requires that JCL honours these boundaries + and therefore allows different isolated applications to configure their logging systems + independently. + +
      +

      Log And LogFactory

      + + Performance dictates that symbolic references to these classes are present in the calling application code + (reflection would simply be too slow). Therefore, these classes must be loadable by the classloader + that loads the application code. + +
      +

      Log Implementations

      + + Performance dictates that symbolic references to the logging systems are present in the implementation + classes (again, reflection would simply be too slow). So, for an implementation to be able to function, + it is neccessary for the logging system to be loadable by the classloader that defines the implementing class. + +
      + +

      Using Reflection To Load Log Implementations

      + + However, there is actually no reason why LogFactory requires symbolic references to particular Log + implementations. Reflection can be used to load these from an appropriate classloader + without unacceptable performance degradation. + This is the strategy adopted by JCL. + + + JCL uses the context classloader to load the Log implementation. + +
      +
      + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/troubleshooting.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/troubleshooting.html new file mode 100644 index 0000000..893574f --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/troubleshooting.html @@ -0,0 +1,767 @@ + + + + + + + + + + + + + + Commons Logging - + Troubleshooting Guide + + + + + + + + +
      + +
      +
      +
      + + + + + + +

      Using JCL Diagnostics

      + +Diagnostics is a feature introduced in JCL 1.1 as an aid to debugging problems +with JCL configurations. When diagnostics are switched on, messages are logged +to a stream (specified by the user) by the two main classes involved in discovery +in JCL (LogFactory and LogFactoryImpl). + + +Diagnostics are intended to be used in conjunction with the source. The source +contains numerous and lengthy comments. Often these are intended to help explain +the meaning of the messages. + +

      When To Use Diagnostic Logging

      + +Diagnostic logging is intended only to be used when debugging a problematic +configuration. It should be switched off for production. + +
      +

      How To Use Diagnostic logging

      + +Diagnostic logging is controlled through the system property +org.apache.commons.logging.diagnostics.dest. Setting the property value +to the special strings STDOUT or STDERR (case-sensitive) +will output messages to System.out and System.err respectively. +Setting the property value to a valid file name will result in the messages being logged +to that file. + +
      +

      OIDs

      + +Diagnostics uses the concept of an Object ID (OID). This allows the identity of objects +to be tracked without relying on useful toString implementations. +These are of the form: + +
      +classname@system identity hash code
      +
      + +The system identity hash code is found by calling System.identityHashCode() +which should uniquely identify a particular instance. The classname is usually the fully qualified +class name though in a few cases, org.apache.commons.logging.impl.LogFactoryImpl may be +shortened to LogFactoryImpl to increase ease of reading. For example: + +
      +sun.misc.Launcher$AppClassLoader@20120943
      +LogFactoryImpl@1671711
      +
      + +OIDs are intended to be used to cross-reference. They allow particular instances of classloaders +and JCL classes to be tracked in different contexts. This plays a vital role in building +up the understanding of the classloader environment required to diagnose JCL problems. + +
      +

      Diagnostic Message Prefix

      + +Each diagnostic message is prefixed with details of the relevant class in a standard format. +This takes the form: + +
      +[class-identifier from ClassLoader OID]
      +
      + +ClassLoader OID is the OID of a classloader which loaded +the class issuing the message. +class-identifier identifies the object issuing the message. + + +In the case of +LogFactory, this is just LogFactory. For example (line split): + +
      +[LogFactory 
      +   from sun.misc.Launcher$AppClassLoader@20120943] BOOTSTRAP COMPLETED
      +
      + +In the case of +LogFactoryImpl, the prefix is the instance OID. This can be cross referenced +to discover the details of the TCCL used to manage this instance. For example (line split): + +
      +[LogFactoryImpl@1671711 
      +   from sun.misc.Launcher$AppClassLoader@20120943] Instance created.
      +
      +
      +

      ClassLoader Hierarchy Tree

      + +Understanding the relationships between classloaders is vital when debugging JCL. +At various points, JCL will print to the diagnostic log the hierarchy for important +classloaders. This is obtained by walking the tree using getParent. +Each classloader is represented (visually) by an OID (to allow cross referencing) +and the relationship indicated in child --> parent fashion. +For example (line split for easy reading): + +
      +ClassLoader tree:java.net.URLClassLoader@3526198  
      +      --> sun.misc.Launcher$AppClassLoader@20120943 (SYSTEM) 
      +      --> sun.misc.Launcher$ExtClassLoader@11126876 
      +      --> BOOT
      +
      + +Represents a hierarchy with four elements ending in the boot classloader. + +
      +

      LogFactory Class Bootstrap

      + +Whenever the LogFactory class is initialized, diagnostic messages about +the classloader environment are logged. The content of each of these messages is prefixed by +[ENV] to help distinguish them. The extension directories, application classpath, +details of the classloader (including the OID and toString +value) used to load LogFactory and the +classloader tree for that classloader +are logged. + + +Many Sun classloaders have confusing toString values. For example, the OID may be + +
      +sun.misc.Launcher$AppClassLoader@20120943
      +
      + +with a toString value of + +
      +sun.misc.Launcher$AppClassLoader@133056f
      +
      + +Other classloader implementations may give very useful information (such as the local classpath). + + +Finally, once initialization is complete a BOOTSTRAP COMPLETED message is issued. + +
      +

      Construction Of LogFactoryImpl Instances

      + +LogFactoryImpl is the standard and default LogFactory implementation. +This section obviously only applies to configurations using this implementation. + +

      +Before assigning a Log instance, LogFactory loads a +LogFactory implementation. The content is prefixed by [LOOKUP] +for each diagnostic message logged by this process. +

      +

      +The implementation used can vary per Thread context classloader (TCCL). If this is the first time +that a Log has been requested for a particular TCCL a new instance will be created. +

      +

      +Information of particular interest is logged at this stage. Details of the TCCL are logged +allowing the OID later to be cross-referenced to the toString value +and the classloader tree. For example, the +following log snippet details the TCCL (lines split): +

      +
      +[LogFactory from sun.misc.Launcher$AppClassLoader@20120943] 
      +    [LOOKUP] LogFactory implementation requested for the first time for context 
      +        classloader java.net.URLClassLoader@3526198
      +[LogFactory from sun.misc.Launcher$AppClassLoader@20120943] 
      +    [LOOKUP] java.net.URLClassLoader@3526198 == 'java.net.URLClassLoader@35ce36'
      +[LogFactory from sun.misc.Launcher$AppClassLoader@20120943] 
      +    [LOOKUP] ClassLoader tree:java.net.URLClassLoader@3526198 
      +        --> sun.misc.Launcher$AppClassLoader@20120943 (SYSTEM)  
      +          --> sun.misc.Launcher$ExtClassLoader@11126876 
      +            --> BOOT
      +
      +
      +

      Log Discovery Diagnostics

      +

      +The standard LogFactoryImpl issues many diagnostic messages when discovering +the Log implementation to be used. +

      +

      +During discovery, environment variables are loaded and values set. This content is prefixed by +[ENV] to make it easier to distinguish this material. +

      +

      +The possible messages issued during discovery are numerous. To understand them, the source +should be consulted. Attention should be paid to the classloader hierarchy trees for the +classloader used to load LogFactory and to the TCCL. +

      +
      +
      +

      Containers With Custom LogFactory Implementations

      +

      + Some containers use a custom LogFactory implementation to adapt JCL to their particular + logging system. This has some important consequences for the deployment of applications using JCL within + these containers. +

      +

      + Containers known to use this mechanism: +

      + + + Containers suspected to use this mechanism: + +
        +
      • WebSphere Application Server (other versions).
      • +
      + +The Apache Commons team would be grateful if reports were posted to the development list +of other containers using a custom implementation. + +

      The Incompatible LogFactory Issue

      +

      Symptoms

      +

      + An exception is thrown by JCL with a message similar to: +

      +
      +  The chosen LogFactory implementation does not extend LogFactory. Please check your configuration. 
      +  (Caused by java.lang.ClassCastException: The application has specified that a custom LogFactory 
      +  implementation should be used but Class 'com.ibm.ws.commons.logging.TrLogFactory' cannot be converted 
      +  to 'org.apache.commons.logging.LogFactory'. The conflict is caused by the presence of multiple 
      +  LogFactory classes in incompatible classloaders. Background can be found in 
      +  http://commons.apache.org/logging/tech.html. If you have not explicitly specified a custom
      +  LogFactory then it is likely that the container has set one without your knowledge. 
      +  In this case, consider using the commons-logging-adapters.jar file or specifying the standard 
      +  LogFactory from the command line. Help can be found @http://commons.apache.org/logging.
      +  
      +

      + This is a WebSphere example so the name of the custom LogFactory is + com.ibm.ws.commons.logging.TrLogFactory. For other containers, this class name will + differ. +

      +
      +

      Explanation

      +

      + A custom LogFactory implementation can only be used if the implementation class loaded + dynamically at runtime can be cast to the LogFactory class that loaded it. There are + several ways in which this cast can fail. The most obvious is that the source code may not actually + extend LogFactory. The source may be compatible but if the LogFactory class + against which the source is compiled is not binary compatible then the cast will also fail. +

      +

      + There is also another more unusual way in which this cast can fail: even when the binary is compatible, + the implementation class loaded at runtime may be linked to a different instance of the + LogFactory class. For more information, see the tech guide. +

      +

      + This situation may be encountered in containers which use a custom LogFactory implementation. + The implementation will typically be provided in a shared, high level classloader together with JCL. + When an application classloader contains LogFactory, the implementation will be loaded + from that higher level classloader. The implementation class will be linked to the LogFactory + class loaded by the higher level classloader. Even if the + LogFactory implementations are binary compatible, since they are loaded by different classloaders + the two LogFactory Class instances are not equal and so the cast must fail. +

      +

      +The policy adopted by JCL in this situation is to re-throw this exception. Additional information +is included in the message to help diagnosis. The reasoning behind this choice is that a +particular LogFactory implementation has been actively specified and this +choice should not be ignored. This policy has unfortunate consequences when running in +containers which have custom implementations: the above runtime exception may be thrown +under certain classloading policies without the user knowingly specifying a custom +implementation. +

      +
      +

      Fixes

      +

      + There are various ways to fix this problem. Which fix is right depends on the circumstances. +

      +

      + If you are happy using another classloading policy for the application, select a + classloading policy which ensures that LogFactory will be loaded from the + shared classloader containing the custom implementation. +

      +

      + If you want to bypass the container adaption mechanism then set the appropriate system property + to the default value when the container is started: +

      +
      + -Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
      + 
      +

      + If you want to continue to use the default container mechanism then: +

      +
        +
      • + Find and replace the commons-logging implementation used by the container with + the most modern release +
      • +
      • + Replace the commons-logging jar in the application with the commons-logging-adapters jar. + This will ensure that application classloader will delegate to it's parent when loading + LogFactory. +
      • +
      + + If you encounter difficulties when applying the fixes recommended, please turn on + diagnostics and consult the logs. + +
      +
      +
      +

      Containers With Custom ClassLoading Behaviour for Logging

      + + Because commons-logging is such a fundamental library, some containers modify the way + in which classloading behaves for commons-logging classes. + +

      Apache Tomcat

      +

      + At the current date, Tomcat 5.5.16 is the current release. All releases from version + 4.1.x through 5.5.16 have a startup process that places jarfile + ${tomcat.home}/bin/commons-logging-api.jar in the system classpath and then + prevents any webapp from overriding the classes in that jarfile. Effectively, all + webapps behave as if "parent-first" classloading were enabled for those classes. +

      +

      + This has some benefits; in particular it means that there are no problems in + these Tomcat versions with having multiple copies of the commons-logging Log + interface in the classpath (which avoids the "Log does not implement Log" + problem described elsewhere). +

      +

      + However it also means that no webapp can override the core commons-logging + classes by including an updated commons-logging jarfile in WEB-INF/lib; any + class already loaded via the container takes priority. In particular, as + Tomcat bundles logging 1.0.4 only, the new diagnostics and memory-leak-prevention + features of the 1.1 release will not be available unless the container's + library version is updated. +

      +

      + Because the commons-logging-api.jar in the container does not contain any + log-library-adapter classes, updated behaviour for these will be + seen when logging 1.1 is bundled in WEB-INF/lib. In particular, the + support for log4j's TRACE level will take effect without having to update + the container. +

      +

      + If you do wish to update Tomcat's version of commons-logging, then you + must use the commons-logging-1.1-api jar only, not the full jar. + Classes in the webapp cannot override classes loaded from the system + classpath set up during Tomcat's startup process, and logging adapters + can only see their matching concrete logging library if that library is + available in the same classpath. Bundling the full commons-logging jarfile + (with adapters) into the system classpath therefore means that logging + libraries (eg log4j) within WEB-INF/lib are not accessable. +

      +

      + Note that the behaviour described here only applies if the standard Tomcat + startup process is run. When Tomcat is embedded in a larger + framework (eg run embedded within an IDE) this may not apply. +

      +
      +

      JBoss Application Server

      +

      + The JBoss Application Server can be configured to prevent deployed + code from overriding classes higher in the hierarchy, effectively + forcing "parent-first" behaviour for selected classes. By default, + commons-logging is in this list (at least for some JBoss versions + starting with 4.0.2), and therefore including an updated version + of commons-logging in WEB-INF/lib or similar will have no effect. + See the JBoss classloading documentation for more details. +

      +
      +

      Other Containers

      +

      + As more information becomes available on this topic, it may be added + to the commons-logging wiki site. +

      +
      +
      + + +
      +
      +
      +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/allclasses-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/allclasses-frame.html new file mode 100644 index 0000000..e40b9bd --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/allclasses-frame.html @@ -0,0 +1,167 @@ + + + + + + All Classes + + + + +

      All Classes

      + + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/index.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/index.html new file mode 100644 index 0000000..460f417 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/index.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference + + + + + + + + + <body> + <h1>Frame Alert</h1> + <p> + You don't have frames. Go <a href="overview-summary.html">here</a> + </p> + </body> + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AbstractLogTest.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AbstractLogTest.html new file mode 100644 index 0000000..40c21af --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AbstractLogTest.html @@ -0,0 +1,110 @@ + + + + +AbstractLogTest xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18   
      +19  package org.apache.commons.logging;
      +20  
      +21  import junit.framework.TestCase;
      +22  
      +23  
      +24  /**
      +25    * Generic tests that can be applied to any log adapter by
      +26    * subclassing this class and defining method getLogObject
      +27    * appropriately.
      +28    * 
      +29    * @author Sean C. Sullivan
      +30    * @version $Revision: 581090 $
      +31    */
      +32  public abstract class AbstractLogTest extends TestCase {
      +33  
      +34      public abstract Log getLogObject();
      +35  
      +36      public void testLoggingWithNullParameters()
      +37      {
      +38          Log log = this.getLogObject();
      +39  
      +40          assertNotNull(log);
      +41  
      +42  
      +43          log.debug(null);
      +44  
      +45          log.debug(null, null);
      +46  
      +47          log.debug(log.getClass().getName() + ": debug statement");
      +48  
      +49          log.debug(log.getClass().getName() + ": debug statement w/ null exception", new RuntimeException());
      +50  
      +51  
      +52          log.error(null);
      +53  
      +54          log.error(null, null);
      +55  
      +56          log.error(log.getClass().getName() + ": error statement");
      +57  
      +58          log.error(log.getClass().getName() + ": error statement w/ null exception", new RuntimeException());
      +59  
      +60  
      +61          log.fatal(null);
      +62  
      +63          log.fatal(null, null);
      +64  
      +65          log.fatal(log.getClass().getName() + ": fatal statement");
      +66  
      +67          log.fatal(log.getClass().getName() + ": fatal statement w/ null exception", new RuntimeException());
      +68  
      +69  
      +70          log.info(null);
      +71  
      +72          log.info(null, null);
      +73  
      +74          log.info(log.getClass().getName() + ": info statement");
      +75  
      +76          log.info(log.getClass().getName() + ": info statement w/ null exception", new RuntimeException());
      +77  
      +78  
      +79          log.trace(null);
      +80  
      +81          log.trace(null, null);
      +82  
      +83          log.trace(log.getClass().getName() + ": trace statement");
      +84  
      +85          log.trace(log.getClass().getName() + ": trace statement w/ null exception", new RuntimeException());
      +86  
      +87  
      +88          log.warn(null);
      +89  
      +90          log.warn(null, null);
      +91  
      +92          log.warn(log.getClass().getName() + ": warn statement");
      +93  
      +94          log.warn(log.getClass().getName() + ": warn statement w/ null exception", new RuntimeException());
      +95      }    
      +96  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtable.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtable.html new file mode 100644 index 0000000..0c52fbf --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtable.html @@ -0,0 +1,46 @@ + + + + +AltHashtable xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  import java.util.Hashtable;
      +21  
      +22  public class AltHashtable extends Hashtable {
      +23  
      +24      public static Object lastKey;
      +25      public static Object lastValue;
      +26      
      +27      public Object put(Object key, Object value) {
      +28          lastKey = key;
      +29          lastValue = value;
      +30          return super.put(key, value);
      +31      }
      +32  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtableTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtableTestCase.html new file mode 100644 index 0000000..594a4f8 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/AltHashtableTestCase.html @@ -0,0 +1,108 @@ + + + + +AltHashtableTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  import junit.framework.*;
      +21  
      +22  /**
      +23   * Test the ability to force the LogFactory class to use some
      +24   * arbitrary Hashtable implementation to store its mapping from
      +25   * context-classloader -> LogFactory object.
      +26   * <p>
      +27   * This is done by 
      +28   */
      +29  public class AltHashtableTestCase extends TestCase {
      +30  
      +31      public static Test suite() throws Exception {
      +32          Class thisClass = AltHashtableTestCase.class;
      +33          ClassLoader thisClassLoader = thisClass.getClassLoader();
      +34  
      +35          PathableClassLoader loader = new PathableClassLoader(null);
      +36          loader.useExplicitLoader("junit.", thisClassLoader);
      +37          loader.addLogicalLib("testclasses");
      +38          loader.addLogicalLib("commons-logging");
      +39  
      +40          Class testClass = loader.loadClass(thisClass.getName());
      +41          return new PathableTestSuite(testClass, loader);
      +42      }
      +43  
      +44      /**
      +45       * Set up before each test.
      +46       * <p>
      +47       * This method ensures that the appropriate system property is defined
      +48       * to force the LogFactory class to use the AltHashtable class as its
      +49       * Hashtable implementation for storing factories in. 
      +50       * <p>
      +51       * This does make the assumption that whatever JVM we are running in
      +52       * doesn't initialise classes until they are actually referenced (ie the
      +53       * LogFactory class hasn't been initialised before this method is called).
      +54       * This is true of all JVMs I know of; and if it isn't then this test will
      +55       * fail and someone will tell us. 
      +56       */
      +57      public void setUp() {
      +58          System.setProperty(
      +59                  "org.apache.commons.logging.LogFactory.HashtableImpl",
      +60                  AltHashtable.class.getName());
      +61      }
      +62      
      +63      /**
      +64       * Verify that initialising the LogFactory class will cause it
      +65       * to instantiate an object of type specified in system property
      +66       * "org.apache.commons.logging.LogFactory.HashtableImpl".
      +67       */
      +68      public void testType() {
      +69          // Here, the reference to the LogFactory class should cause the
      +70          // class to be loaded and initialised. It will see the property
      +71          // set and use the AltHashtable class. If other tests in this
      +72          // class have already been run within the same classloader then
      +73          // LogFactory will already have been initialised, but that
      +74          // doesn't change the effectiveness of this test.
      +75          assertTrue(LogFactory.factories instanceof AltHashtable);
      +76      }
      +77      
      +78      /**
      +79       * Verify that when LogFactory sees a context-classloader for the
      +80       * first time that it creates a new entry in the LogFactory.factories
      +81       * hashmap. In particular, this checks that this process works ok when
      +82       * a system property has been used to specify an alternative Hashtable
      +83       * implementation for LogFactory to use.
      +84       */
      +85      public void testPutCalled() throws Exception {
      +86          AltHashtable.lastKey = null;
      +87          AltHashtable.lastValue = null;
      +88          
      +89          LogFactory.getLog(AltHashtableTestCase.class);
      +90          ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +91          assertEquals(contextLoader, AltHashtable.lastKey);
      +92          assertNotNull(AltHashtable.lastValue);
      +93      }
      +94  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BadHashtablePropertyTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BadHashtablePropertyTestCase.html new file mode 100644 index 0000000..612ce44 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BadHashtablePropertyTestCase.html @@ -0,0 +1,49 @@ + + + + +BadHashtablePropertyTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  import junit.framework.*;
      +21  import java.util.Hashtable;
      +22  
      +23  /**
      +24   * Tests behaviour when the property is misconfigured.
      +25   */
      +26  public class BadHashtablePropertyTestCase extends TestCase {
      +27  
      +28      public void testType()  {
      +29          assertTrue(LogFactory.factories instanceof Hashtable);
      +30      }
      +31      
      +32      public void testPutCalled() throws Exception {
      +33          Log log = LogFactory.getLog(BadHashtablePropertyTestCase.class);
      +34      }
      +35  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BasicOperationsTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BasicOperationsTestCase.html new file mode 100644 index 0000000..61fc4ed --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/BasicOperationsTestCase.html @@ -0,0 +1,135 @@ + + + + +BasicOperationsTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18  package org.apache.commons.logging;
      +19  
      +20  import junit.framework.TestCase;
      +21  
      +22  /**
      +23   * Tests the basic logging operations to ensure that they all function 
      +24   * without exception failure. In other words, that they do no fail by
      +25   * throwing exceptions.
      +26   * This is the minimum requirement for any well behaved logger 
      +27   * and so this test should be run for each kind.
      +28   */
      +29  public class BasicOperationsTestCase extends TestCase
      +30  {
      +31      public void testIsEnabledClassLog()
      +32      {
      +33          Log log = LogFactory.getLog(BasicOperationsTestCase.class);
      +34          executeIsEnabledTest(log);
      +35      }
      +36      
      +37      public void testIsEnabledNamedLog()
      +38      {
      +39          Log log = LogFactory.getLog(BasicOperationsTestCase.class.getName());
      +40          executeIsEnabledTest(log);
      +41      }    
      +42      
      +43      public void executeIsEnabledTest(Log log)
      +44      {
      +45          try
      +46          {
      +47              log.isTraceEnabled();
      +48              log.isDebugEnabled();
      +49              log.isInfoEnabled();
      +50              log.isWarnEnabled();
      +51              log.isErrorEnabled();
      +52              log.isFatalEnabled();
      +53          }
      +54          catch (Throwable t)
      +55          {
      +56              t.printStackTrace();
      +57              fail("Exception thrown: " + t);
      +58          }
      +59      }
      +60      
      +61      
      +62      public void testMessageWithoutExceptionClassLog()
      +63      {
      +64          Log log = LogFactory.getLog(BasicOperationsTestCase.class);
      +65          executeMessageWithoutExceptionTest(log);
      +66      }
      +67      
      +68      public void testMessageWithoutExceptionNamedLog()
      +69      {
      +70          Log log = LogFactory.getLog(BasicOperationsTestCase.class.getName());
      +71          executeMessageWithoutExceptionTest(log);
      +72      }    
      +73      
      +74      public void executeMessageWithoutExceptionTest(Log log)
      +75      {
      +76          try
      +77          {
      +78              log.trace("Hello, Mum");
      +79              log.debug("Hello, Mum");
      +80              log.info("Hello, Mum");
      +81              log.warn("Hello, Mum");
      +82              log.error("Hello, Mum");
      +83              log.fatal("Hello, Mum");
      +84          }
      +85          catch (Throwable t)
      +86          {
      +87              t.printStackTrace();
      +88              fail("Exception thrown: " + t);
      +89          }
      +90      }
      +91      
      +92      public void testMessageWithExceptionClassLog()
      +93      {
      +94          Log log = LogFactory.getLog(BasicOperationsTestCase.class);
      +95          executeMessageWithExceptionTest(log);
      +96      }
      +97      
      +98      public void testMessageWithExceptionNamedLog()
      +99      {
      +100         Log log = LogFactory.getLog(BasicOperationsTestCase.class.getName());
      +101         executeMessageWithExceptionTest(log);
      +102     }    
      +103     
      +104     public void executeMessageWithExceptionTest(Log log)
      +105     {
      +106         try
      +107         {
      +108             log.trace("Hello, Mum", new ArithmeticException());
      +109             log.debug("Hello, Mum", new ArithmeticException());
      +110             log.info("Hello, Mum", new ArithmeticException());
      +111             log.warn("Hello, Mum", new ArithmeticException());
      +112             log.error("Hello, Mum", new ArithmeticException());
      +113             log.fatal("Hello, Mum", new ArithmeticException());
      +114         }
      +115         catch (Throwable t)
      +116         {
      +117             t.printStackTrace();
      +118             fail("Exception thrown: " + t);
      +119         }
      +120     }
      +121 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/DummyException.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/DummyException.html new file mode 100644 index 0000000..2c4f9c7 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/DummyException.html @@ -0,0 +1,43 @@ + + + + +DummyException xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18  package org.apache.commons.logging;
      +19  
      +20  /**
      +21   * Dummy exception that unit tests create instances of when they want to test
      +22   * logging of an Exception object.
      +23   */
      +24  public class DummyException extends Exception {
      +25      private static final long serialVersionUID = 1L;
      +26      public DummyException() {
      +27          // super("Dummy Exception for unit testing");
      +28      }
      +29  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LoadTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LoadTestCase.html new file mode 100644 index 0000000..db97fe8 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LoadTestCase.html @@ -0,0 +1,245 @@ + + + + +LoadTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging;
      +18  
      +19  import junit.framework.TestCase;
      +20  
      +21  /**
      +22   * testcase to emulate container and application isolated from container
      +23   * @author  baliuka
      +24   * @version $Id: LoadTestCase.java 424108 2006-07-20 23:19:55Z skitching $
      +25   */
      +26  public class LoadTestCase extends TestCase{
      +27      //TODO: need some way to add service provider packages
      +28      static private String LOG_PCKG[] = {"org.apache.commons.logging",
      +29                                          "org.apache.commons.logging.impl"};
      +30      
      +31      /**
      +32       * A custom classloader which "duplicates" logging classes available
      +33       * in the parent classloader into itself.
      +34       * <p>
      +35       * When asked to load a class that is in one of the LOG_PCKG packages,
      +36       * it loads the class itself (child-first). This class doesn't need
      +37       * to be set up with a classpath, as it simply uses the same classpath
      +38       * as the classloader that loaded it.
      +39       */
      +40      static class AppClassLoader extends ClassLoader{
      +41          
      +42          java.util.Map classes = new java.util.HashMap();
      +43          
      +44          AppClassLoader(ClassLoader parent){
      +45              super(parent);
      +46          }
      +47          
      +48          private Class def(String name)throws ClassNotFoundException{
      +49              
      +50              Class result = (Class)classes.get(name);
      +51              if(result != null){
      +52                  return result;
      +53              }
      +54              
      +55              try{
      +56                  
      +57                  ClassLoader cl = this.getClass().getClassLoader();
      +58                  String classFileName = name.replace('.','/') + ".class";
      +59                  java.io.InputStream is = cl.getResourceAsStream(classFileName);
      +60                  java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
      +61                  
      +62                  while(is.available() > 0){
      +63                      out.write(is.read());
      +64                  }
      +65                  
      +66                  byte data [] = out.toByteArray();
      +67                  
      +68                  result = super.defineClass(name, data, 0, data.length );
      +69                  classes.put(name,result);
      +70                  
      +71                  return result;
      +72                  
      +73              }catch(java.io.IOException ioe){
      +74                  
      +75                  throw new ClassNotFoundException( name + " caused by "
      +76                  + ioe.getMessage() );
      +77              }
      +78              
      +79              
      +80          }
      +81          
      +82          // not very trivial to emulate we must implement "findClass",
      +83          // but it will delegete to junit class loder first
      +84          public Class loadClass(String name)throws ClassNotFoundException{
      +85              
      +86              //isolates all logging classes, application in the same classloader too.
      +87              //filters exeptions to simlify handling in test
      +88              for(int i = 0; i < LOG_PCKG.length; i++ ){
      +89                  if( name.startsWith( LOG_PCKG[i] ) &&
      +90                  name.indexOf("Exception") == -1   ){
      +91                      return def(name);
      +92                  }
      +93              }
      +94              return super.loadClass(name);
      +95          }
      +96          
      +97      }
      +98      
      +99  
      +100     /**
      +101      * Call the static setAllowFlawedContext method on the specified class
      +102      * (expected to be a UserClass loaded via a custom classloader), passing
      +103      * it the specified state parameter.
      +104      */
      +105     private void setAllowFlawedContext(Class c, String state) throws Exception {
      +106         Class[] params = {String.class};
      +107         java.lang.reflect.Method m = c.getDeclaredMethod("setAllowFlawedContext", params);
      +108         m.invoke(null, new Object[] {state});
      +109     }
      +110 
      +111     /**
      +112      * Test what happens when we play various classloader tricks like those
      +113      * that happen in web and j2ee containers.
      +114      * <p>
      +115      * Note that this test assumes that commons-logging.jar and log4j.jar
      +116      * are available via the system classpath.
      +117      */
      +118     public void testInContainer()throws Exception{
      +119         
      +120         //problem can be in this step (broken app container or missconfiguration)
      +121         //1.  Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
      +122         //2.  Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
      +123         // we expect this :
      +124         // 1. Thread.currentThread().setContextClassLoader(appLoader);
      +125         // 2. Thread.currentThread().setContextClassLoader(null);
      +126         
      +127         // Context classloader is same as class calling into log
      +128         Class cls = reload();
      +129         Thread.currentThread().setContextClassLoader(cls.getClassLoader());
      +130         execute(cls);
      +131         
      +132         // Context classloader is the "bootclassloader". This is technically
      +133         // bad, but LogFactoryImpl.ALLOW_FLAWED_CONTEXT defaults to true so
      +134         // this test should pass.
      +135         cls = reload();
      +136         Thread.currentThread().setContextClassLoader(null);
      +137         execute(cls);
      +138         
      +139         // Context classloader is the "bootclassloader". This is same as above
      +140         // except that ALLOW_FLAWED_CONTEXT is set to false; an error should
      +141         // now be reported.
      +142         cls = reload();
      +143         Thread.currentThread().setContextClassLoader(null);
      +144         try {
      +145             setAllowFlawedContext(cls, "false");
      +146             execute(cls);
      +147             fail("Logging config succeeded when context classloader was null!");
      +148         } catch(LogConfigurationException ex) {
      +149             // expected; the boot classloader doesn't *have* JCL available
      +150         }
      +151         
      +152         // Context classloader is the system classloader.
      +153         //
      +154         // This is expected to cause problems, as LogFactoryImpl will attempt
      +155         // to use the system classloader to load the Log4JLogger class, which
      +156         // will then be unable to cast that object to the Log interface loaded
      +157         // via the child classloader. However as ALLOW_FLAWED_CONTEXT defaults
      +158         // to true this test should pass.
      +159         cls = reload();
      +160         Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
      +161         execute(cls);
      +162         
      +163         // Context classloader is the system classloader. This is the same
      +164         // as above except that ALLOW_FLAWED_CONTEXT is set to false; an error 
      +165         // should now be reported.
      +166         cls = reload();
      +167         Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
      +168         try {
      +169             setAllowFlawedContext(cls, "false");
      +170             execute(cls);
      +171             fail("Error: somehow downcast a Logger loaded via system classloader"
      +172                     + " to the Log interface loaded via a custom classloader");
      +173         } catch(LogConfigurationException ex) {
      +174             // expected 
      +175         }
      +176     }
      +177 
      +178     /**
      +179      * Load class UserClass via a temporary classloader which is a child of
      +180      * the classloader used to load this test class.
      +181      */
      +182     private Class reload()throws Exception{
      +183         
      +184         Class testObjCls = null;
      +185         
      +186         AppClassLoader appLoader = new AppClassLoader( 
      +187                 this.getClass().getClassLoader());
      +188         try{
      +189             
      +190             testObjCls = appLoader.loadClass(UserClass.class.getName());
      +191             
      +192         }catch(ClassNotFoundException cnfe){
      +193             throw cnfe;
      +194         }catch(Throwable t){
      +195             t.printStackTrace();
      +196             fail("AppClassLoader failed ");
      +197         }
      +198         
      +199         assertTrue( "app isolated" ,testObjCls.getClassLoader() == appLoader );
      +200         
      +201         
      +202         return testObjCls;
      +203         
      +204         
      +205     }
      +206     
      +207     
      +208     private void execute(Class cls)throws Exception{
      +209             
      +210             cls.newInstance();
      +211         
      +212     }
      +213     
      +214     
      +215     public static void main(String[] args){
      +216         String[] testCaseName = { LoadTestCase.class.getName() };
      +217         junit.textui.TestRunner.main(testCaseName);
      +218     }
      +219     
      +220     public void setUp() {
      +221         // save state before test starts so we can restore it when test ends
      +222         origContextClassLoader = Thread.currentThread().getContextClassLoader();
      +223     }
      +224     
      +225     public void tearDown() {
      +226         // restore original state so a test can't stuff up later tests.
      +227         Thread.currentThread().setContextClassLoader(origContextClassLoader);
      +228     }
      +229     
      +230     private ClassLoader origContextClassLoader;
      +231 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LogTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LogTestCase.html new file mode 100644 index 0000000..754a211 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/LogTestCase.html @@ -0,0 +1,64 @@ + + + + +LogTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18  package org.apache.commons.logging;
      +19  
      +20  
      +21  /**
      +22   * 
      +23   *
      +24   * 
      +25   * 
      +26   * 
      +27   * 
      +28   */
      +29  public class LogTestCase extends AbstractLogTest
      +30  {
      +31  
      +32      /**
      +33       * 
      +34       * 
      +35       * 
      +36       */
      +37      public Log getLogObject()
      +38      {
      +39          /**
      +40           * Pickup whatever is found/configured!
      +41           */
      +42          return LogFactory.getLog(this.getClass().getName());
      +43      }
      +44  
      +45      public static void main(String[] args)
      +46      {
      +47              String[] testCaseName = { LogTestCase.class.getName() };
      +48              junit.textui.TestRunner.main(testCaseName);    
      +49      }
      +50  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/NullClassLoaderTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/NullClassLoaderTestCase.html new file mode 100644 index 0000000..6c8e03f --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/NullClassLoaderTestCase.html @@ -0,0 +1,65 @@ + + + + +NullClassLoaderTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging;
      +18  
      +19  import junit.framework.TestCase;
      +20  
      +21  /**
      +22   * Test cases for situations where getClassLoader or getContextClassLoader
      +23   * return null. This can happen when using JDK 1.1. It can also happen when
      +24   * JCL is deployed via the bootclassloader - something that could be done when
      +25   * using java in embedded systems.
      +26   */
      +27  public class NullClassLoaderTestCase extends TestCase {
      +28  
      +29      //---------------------- Main ---------------------------------    
      +30  
      +31      /**
      +32       * Main method so this test case can be run direct from the command line.
      +33       */
      +34      public static void main(String[] args){
      +35          String[] testCaseName = { NullClassLoaderTestCase.class.getName() };
      +36          junit.textui.TestRunner.main(testCaseName);
      +37      }
      +38  
      +39      //---------------------- unit tests ---------------------------------    
      +40      
      +41      /**
      +42       * This tests that when getContextClassLoader returns null, the
      +43       * LogFactory.getLog(name) method still correctly returns the same
      +44       * log object when called multiple times with the same name.
      +45       */
      +46      public void testSameLogObject() throws Exception {
      +47          // unfortunately, there just isn't any way to emulate JCL being
      +48          // accessable via the null classloader in "standard" systems, so
      +49          // we can't include this test in our standard unit tests.
      +50      }
      +51  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableClassLoader.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableClassLoader.html new file mode 100644 index 0000000..c945767 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableClassLoader.html @@ -0,0 +1,451 @@ + + + + +PathableClassLoader xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  import java.io.File;
      +21  import java.io.IOException;
      +22  import java.io.InputStream;
      +23  import java.net.URL;
      +24  import java.net.URLClassLoader;
      +25  import java.util.ArrayList;
      +26  import java.util.Collections;
      +27  import java.util.Enumeration;
      +28  import java.util.HashMap;
      +29  import java.util.Iterator;
      +30  import java.util.Map;
      +31  
      +32  /**
      +33   * A ClassLoader which sees only specified classes, and which can be
      +34   * set to do parent-first or child-first path lookup.
      +35   * <p>
      +36   * Note that this classloader is not "industrial strength"; users
      +37   * looking for such a class may wish to look at the Tomcat sourcecode
      +38   * instead. In particular, this class may not be threadsafe.
      +39   * <p>
      +40   * Note that the ClassLoader.getResources method isn't overloaded here.
      +41   * It would be nice to ensure that when child-first lookup is set the
      +42   * resources from the child are returned earlier in the list than the
      +43   * resources from the parent. However overriding this method isn't possible
      +44   * as the java 1.4 version of ClassLoader declares this method final
      +45   * (though the java 1.5 version has removed the final qualifier). As the
      +46   * ClassLoader javadoc doesn't specify the order in which resources
      +47   * are returned, it's valid to return the resources in any order (just
      +48   * untidy) so the inherited implementation is technically ok.
      +49   */
      +50  
      +51  public class PathableClassLoader extends URLClassLoader {
      +52      
      +53      private static final URL[] NO_URLS = new URL[0];
      +54      
      +55      /**
      +56       * A map of package-prefix to ClassLoader. Any class which is in
      +57       * this map is looked up via the specified classloader instead of
      +58       * the classpath associated with this classloader or its parents.
      +59       * <p>
      +60       * This is necessary in order for the rest of the world to communicate
      +61       * with classes loaded via a custom classloader. As an example, junit
      +62       * testcases which are loaded via a custom classloader needs to see
      +63       * the same junit classes as the code invoking the testcase, otherwise
      +64       * they can't pass result objects back. 
      +65       * <p>
      +66       * Normally, only a classloader created with a null parent needs to
      +67       * have any lookasides defined.
      +68       */
      +69      private HashMap lookasides = null;
      +70  
      +71      /**
      +72       * See setParentFirst.
      +73       */
      +74      private boolean parentFirst = true;
      +75  
      +76      /**
      +77       * Constructor.
      +78       * <p>
      +79       * Often, null is passed as the parent, ie the parent of the new
      +80       * instance is the bootloader. This ensures that the classpath is
      +81       * totally clean; nothing but the standard java library will be
      +82       * present.
      +83       * <p>
      +84       * When using a null parent classloader with a junit testcase, it *is*
      +85       * necessary for the junit library to also be visible. In this case, it
      +86       * is recommended that the following code be used:
      +87       * <pre>
      +88       * pathableLoader.useExplicitLoader(
      +89       *   "junit.",
      +90       *   junit.framework.Test.class.getClassLoader());
      +91       * </pre>
      +92       * Note that this works regardless of whether junit is on the system
      +93       * classpath, or whether it has been loaded by some test framework that
      +94       * creates its own classloader to run unit tests in (eg maven2's
      +95       * Surefire plugin).
      +96       */
      +97      public PathableClassLoader(ClassLoader parent) {
      +98          super(NO_URLS, parent);
      +99      }
      +100     
      +101     /**
      +102      * Allow caller to explicitly add paths. Generally this not a good idea;
      +103      * use addLogicalLib instead, then define the location for that logical
      +104      * library in the build.xml file.
      +105      */
      +106     public void addURL(URL url) {
      +107         super.addURL(url);
      +108     }
      +109 
      +110     /**
      +111      * Specify whether this classloader should ask the parent classloader
      +112      * to resolve a class first, before trying to resolve it via its own
      +113      * classpath.
      +114      * <p> 
      +115      * Checking with the parent first is the normal approach for java, but
      +116      * components within containers such as servlet engines can use 
      +117      * child-first lookup instead, to allow the components to override libs
      +118      * which are visible in shared classloaders provided by the container.
      +119      * <p>
      +120      * Note that the method getResources always behaves as if parentFirst=true,
      +121      * because of limitations in java 1.4; see the javadoc for method
      +122      * getResourcesInOrder for details.
      +123      * <p>
      +124      * This value defaults to true.
      +125      */
      +126     public void setParentFirst(boolean state) {
      +127         parentFirst = state;
      +128     }
      +129 
      +130     /**
      +131      * For classes with the specified prefix, get them from the system
      +132      * classpath <i>which is active at the point this method is called</i>.
      +133      * <p>
      +134      * This method is just a shortcut for
      +135      * <pre>
      +136      * useExplicitLoader(prefix, ClassLoader.getSystemClassLoader());
      +137      * </pre>
      +138      * <p>
      +139      * Of course, this assumes that the classes of interest are already
      +140      * in the classpath of the system classloader.
      +141      */
      +142     public void useSystemLoader(String prefix) {
      +143         useExplicitLoader(prefix, ClassLoader.getSystemClassLoader());
      +144         
      +145     }
      +146 
      +147     /**
      +148      * Specify a classloader to use for specific java packages.
      +149      * <p>
      +150      * The specified classloader is normally a loader that is NOT
      +151      * an ancestor of this classloader. In particular, this loader
      +152      * may have the bootloader as its parent, but be configured to 
      +153      * see specific other classes (eg the junit library loaded
      +154      * via the system classloader).
      +155      * <p>
      +156      * The differences between using this method, and using
      +157      * addLogicalLib are:
      +158      * <ul>
      +159      * <li>If code calls getClassLoader on a class loaded via
      +160      * "lookaside", then traces up its inheritance chain, it
      +161      * will see the "real" classloaders. When the class is remapped
      +162      * into this classloader via addLogicalLib, the classloader
      +163      * chain seen is this object plus ancestors.
      +164      * <li>If two different jars contain classes in the same
      +165      * package, then it is not possible to load both jars into
      +166      * the same "lookaside" classloader (eg the system classloader)
      +167      * then map one of those subsets from here. Of course they could
      +168      * be loaded into two different "lookaside" classloaders and
      +169      * then a prefix used to map from here to one of those classloaders.
      +170      * </ul>
      +171      */
      +172     public void useExplicitLoader(String prefix, ClassLoader loader) {
      +173         if (lookasides == null) {
      +174             lookasides = new HashMap();
      +175         }
      +176         lookasides.put(prefix, loader);
      +177     }
      +178 
      +179     /**
      +180      * Specify a collection of logical libraries. See addLogicalLib.
      +181      */
      +182     public void addLogicalLib(String[] logicalLibs) {
      +183         for(int i=0; i<logicalLibs.length; ++i) {
      +184             addLogicalLib(logicalLibs[i]);
      +185         }
      +186     }
      +187 
      +188     /**
      +189      * Specify a logical library to be included in the classpath used to
      +190      * locate classes. 
      +191      * <p>
      +192      * The specified lib name is used as a key into the system properties;
      +193      * there is expected to be a system property defined with that name
      +194      * whose value is a url that indicates where that logical library can
      +195      * be found. Typically this is the name of a jar file, or a directory
      +196      * containing class files.
      +197      * <p>
      +198      * If there is no system property, but the classloader that loaded
      +199      * this class is a URLClassLoader then the set of URLs that the
      +200      * classloader uses for its classpath is scanned; any jar in the
      +201      * URL set whose name starts with the specified string is added to
      +202      * the classpath managed by this instance. 
      +203      * <p>
      +204      * Using logical library names allows the calling code to specify its
      +205      * desired classpath without knowing the exact location of the necessary
      +206      * classes. 
      +207      */
      +208     public void addLogicalLib(String logicalLib) {
      +209         // first, check the system properties
      +210         String filename = System.getProperty(logicalLib);
      +211         if (filename != null) {
      +212             try {
      +213                 URL libUrl = new File(filename).toURL();
      +214                 addURL(libUrl);
      +215                 return;
      +216             } catch(java.net.MalformedURLException e) {
      +217                 throw new UnknownError(
      +218                     "Invalid file [" + filename + "] for logical lib [" + logicalLib + "]");
      +219             }
      +220         }
      +221 
      +222         // now check the classpath for a similar-named lib
      +223         URL libUrl = libFromClasspath(logicalLib);
      +224         if (libUrl != null) {
      +225             addURL(libUrl);
      +226             return;
      +227         }
      +228 
      +229         // lib not found
      +230         throw new UnknownError(
      +231             "Logical lib [" + logicalLib + "] is not defined"
      +232             + " as a System property.");
      +233     }
      +234 
      +235     /**
      +236      * If the classloader that loaded this class has this logical lib in its
      +237      * path, then return the matching URL otherwise return null.
      +238      * <p>
      +239      * This only works when the classloader loading this class is an instance
      +240      * of URLClassLoader and thus has a getURLs method that returns the classpath
      +241      * it uses when loading classes. However in practice, the vast majority of the
      +242      * time this type is the classloader used.
      +243      * <p>
      +244      * The classpath of the classloader for this instance is scanned, and any
      +245      * jarfile in the path whose name starts with the logicalLib string is
      +246      * considered a match. For example, passing "foo" will match a url
      +247      * of <code>file:///some/where/foo-2.7.jar</code>.
      +248      * <p>
      +249      * When multiple classpath entries match the specified logicalLib string,
      +250      * the one with the shortest filename component is returned. This means that
      +251      * if "foo-1.1.jar" and "foobar-1.1.jar" are in the path, then a logicalLib
      +252      * name of "foo" will match the first entry above.
      +253      */
      +254     private URL libFromClasspath(String logicalLib) {
      +255         ClassLoader cl = this.getClass().getClassLoader();
      +256         if (cl instanceof URLClassLoader == false) {
      +257             return null;
      +258         }
      +259         
      +260         URLClassLoader ucl = (URLClassLoader) cl;
      +261         URL[] path = ucl.getURLs();
      +262         URL shortestMatch = null;
      +263         int shortestMatchLen = Integer.MAX_VALUE;
      +264         for(int i=0; i<path.length; ++i) {
      +265             URL u = path[i];
      +266             
      +267             // extract the filename bit on the end of the url
      +268             String filename = u.toString();
      +269             if (!filename.endsWith(".jar")) {
      +270                 // not a jarfile, ignore it
      +271                 continue;
      +272             }
      +273 
      +274             int lastSlash = filename.lastIndexOf('/');
      +275             if (lastSlash >= 0) {
      +276                 filename = filename.substring(lastSlash+1);
      +277             }
      +278             
      +279             if (filename.startsWith(logicalLib)) {
      +280                 // ok, this is a candidate
      +281                 if (filename.length() < shortestMatchLen) {
      +282                     shortestMatch = u;
      +283                     shortestMatchLen = filename.length();
      +284                 }
      +285             }
      +286         }
      +287         
      +288         return shortestMatch;
      +289     }
      +290 
      +291     /**
      +292      * Override ClassLoader method.
      +293      * <p>
      +294      * For each explicitly mapped package prefix, if the name matches the 
      +295      * prefix associated with that entry then attempt to load the class via 
      +296      * that entries' classloader.
      +297      */
      +298     protected Class loadClass(String name, boolean resolve) 
      +299     throws ClassNotFoundException {
      +300         // just for performance, check java and javax
      +301         if (name.startsWith("java.") || name.startsWith("javax.")) {
      +302             return super.loadClass(name, resolve);
      +303         }
      +304 
      +305         if (lookasides != null) {
      +306             for(Iterator i = lookasides.entrySet().iterator(); i.hasNext(); ) {
      +307                 Map.Entry entry = (Map.Entry) i.next();
      +308                 String prefix = (String) entry.getKey();
      +309                 if (name.startsWith(prefix) == true) {
      +310                     ClassLoader loader = (ClassLoader) entry.getValue();
      +311                     Class clazz = Class.forName(name, resolve, loader);
      +312                     return clazz;
      +313                 }
      +314             }
      +315         }
      +316         
      +317         if (parentFirst) {
      +318             return super.loadClass(name, resolve);
      +319         } else {
      +320             // Implement child-first. 
      +321             //
      +322             // It appears that the findClass method doesn't check whether the
      +323             // class has already been loaded. This seems odd to me, but without
      +324             // first checking via findLoadedClass we can get java.lang.LinkageError
      +325             // with message "duplicate class definition" which isn't good.
      +326             
      +327             try {
      +328                 Class clazz = findLoadedClass(name);
      +329                 if (clazz == null) {
      +330                     clazz = super.findClass(name);
      +331                 }
      +332                 if (resolve) {
      +333                     resolveClass(clazz);
      +334                 }
      +335                 return clazz;
      +336             } catch(ClassNotFoundException e) {
      +337                 return super.loadClass(name, resolve);
      +338             }
      +339         }
      +340     }
      +341     
      +342     /**
      +343      * Same as parent class method except that when parentFirst is false
      +344      * the resource is looked for in the local classpath before the parent
      +345      * loader is consulted.
      +346      */
      +347     public URL getResource(String name) {
      +348         if (parentFirst) {
      +349             return super.getResource(name);
      +350         } else {
      +351             URL local = super.findResource(name);
      +352             if (local != null) {
      +353                 return local;
      +354             }
      +355             return super.getResource(name);
      +356         }
      +357     }
      +358     
      +359     /**
      +360      * Emulate a proper implementation of getResources which respects the
      +361      * setting for parentFirst.
      +362      * <p>
      +363      * Note that it's not possible to override the inherited getResources, as
      +364      * it's declared final in java1.4 (thought that's been removed for 1.5).
      +365      * The inherited implementation always behaves as if parentFirst=true.
      +366      */
      +367     public Enumeration getResourcesInOrder(String name) throws IOException {
      +368         if (parentFirst) {
      +369             return super.getResources(name);
      +370         } else {
      +371             Enumeration localUrls = super.findResources(name);
      +372             
      +373             ClassLoader parent = getParent();
      +374             if (parent == null) {
      +375                 // Alas, there is no method to get matching resources
      +376                 // from a null (BOOT) parent classloader. Calling
      +377                 // ClassLoader.getSystemClassLoader isn't right. Maybe
      +378                 // calling Class.class.getResources(name) would do?
      +379                 //
      +380                 // However for the purposes of unit tests, we can
      +381                 // simply assume that no relevant resources are
      +382                 // loadable from the parent; unit tests will never be
      +383                 // putting any of their resources in a "boot" classloader
      +384                 // path!
      +385                 return localUrls;
      +386             }
      +387             Enumeration parentUrls = parent.getResources(name);
      +388 
      +389             ArrayList localItems = toList(localUrls);
      +390             ArrayList parentItems = toList(parentUrls);
      +391             localItems.addAll(parentItems);
      +392             return Collections.enumeration(localItems);
      +393         }
      +394     }
      +395     
      +396     /**
      +397      * 
      +398      * Clean implementation of list function of 
      +399      * {@link java.utils.Collection} added in JDK 1.4 
      +400      * @param en <code>Enumeration</code>, possibly null
      +401      * @return <code>ArrayList</code> containing the enumerated
      +402      * elements in the enumerated order, not null
      +403      */
      +404     private ArrayList toList(Enumeration en) {
      +405         ArrayList results = new ArrayList();
      +406         if (en != null) {
      +407             while (en.hasMoreElements()){
      +408                 Object element = en.nextElement();
      +409                 results.add(element);
      +410             }
      +411         }
      +412         return results;
      +413     }
      +414     
      +415     /**
      +416      * Same as parent class method except that when parentFirst is false
      +417      * the resource is looked for in the local classpath before the parent
      +418      * loader is consulted.
      +419      */
      +420     public InputStream getResourceAsStream(String name) {
      +421         if (parentFirst) {
      +422             return super.getResourceAsStream(name);
      +423         } else {
      +424             URL local = super.findResource(name);
      +425             if (local != null) {
      +426                 try {
      +427                     return local.openStream();
      +428                 } catch(IOException e) {
      +429                     // TODO: check if this is right or whether we should
      +430                     // fall back to trying parent. The javadoc doesn't say...
      +431                     return null;
      +432                 }
      +433             }
      +434             return super.getResourceAsStream(name);
      +435         }
      +436     }
      +437 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableTestSuite.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableTestSuite.html new file mode 100644 index 0000000..70834be --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/PathableTestSuite.html @@ -0,0 +1,162 @@ + + + + +PathableTestSuite xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  import java.util.Properties;
      +21  
      +22  import junit.framework.Test;
      +23  import junit.framework.TestResult;
      +24  import junit.framework.TestSuite;
      +25  
      +26  /**
      +27   * Custom TestSuite class that can be used to control the context classloader
      +28   * in operation when a test runs.
      +29   * <p>
      +30   * For tests that need to control exactly what the classloader hierarchy is
      +31   * like when the test is run, something like the following is recommended:
      +32   * <pre>
      +33   * class SomeTestCase extends TestCase {
      +34   *  public static Test suite() throws Exception {
      +35   *   PathableClassLoader parent = new PathableClassLoader(null);
      +36   *   parent.useSystemLoader("junit.");
      +37   * 
      +38   *   PathableClassLoader child = new PathableClassLoader(parent);
      +39   *   child.addLogicalLib("testclasses");
      +40   *   child.addLogicalLib("log4j12");
      +41   *   child.addLogicalLib("commons-logging");
      +42   * 
      +43   *   Class testClass = child.loadClass(SomeTestCase.class.getName());
      +44   *   ClassLoader contextClassLoader = child;
      +45   * 
      +46   *   PathableTestSuite suite = new PathableTestSuite(testClass, child);
      +47   *   return suite;
      +48   *  }
      +49   * 
      +50   *  // test methods go here
      +51   * }
      +52   * </pre>
      +53   * Note that if the suite method throws an exception then this will be handled
      +54   * reasonable gracefully by junit; it will report that the suite method for 
      +55   * a test case failed with exception yyy.
      +56   * <p>
      +57   * The use of PathableClassLoader is not required to use this class, but it
      +58   * is expected that using the two classes together is common practice.
      +59   * <p>
      +60   * This class will run each test methods within the specified TestCase using
      +61   * the specified context classloader and system classloader. If different
      +62   * tests within the same class require different context classloaders,
      +63   * then the context classloader passed to the constructor should be the 
      +64   * "lowest" one available, and tests that need the context set to some parent
      +65   * of this "lowest" classloader can call
      +66   * <pre>
      +67   *  // NB: pseudo-code only
      +68   *  setContextClassLoader(getContextClassLoader().getParent());
      +69   * </pre>
      +70   * This class ensures that any context classloader changes applied by a test
      +71   * is undone after the test is run, so tests don't need to worry about
      +72   * restoring the context classloader on exit. This class also ensures that
      +73   * the system properties are restored to their original settings after each
      +74   * test, so tests that manipulate those don't need to worry about resetting them. 
      +75   * <p>
      +76   * This class does not provide facilities for manipulating system properties;
      +77   * tests that need specific system properties can simply set them in the
      +78   * fixture or at the start of a test method.
      +79   * <p>
      +80   * <b>Important!</b> When the test case is run, "this.getClass()" refers of
      +81   * course to the Class object passed to the constructor of this class - which 
      +82   * is different from the class whose suite() method was executed to determine
      +83   * the classpath. This means that the suite method cannot communicate with
      +84   * the test cases simply by setting static variables (for example to make the
      +85   * custom classloaders available to the test methods or setUp/tearDown fixtures).
      +86   * If this is really necessary then it is possible to use reflection to invoke
      +87   * static methods on the class object passed to the constructor of this class.
      +88   * <p>
      +89   * <h2>Limitations</h2>
      +90   * <p>
      +91   * This class cannot control the system classloader (ie what method 
      +92   * ClassLoader.getSystemClassLoader returns) because Java provides no
      +93   * mechanism for setting the system classloader. In this case, the only
      +94   * option is to invoke the unit test in a separate JVM with the appropriate
      +95   * settings.
      +96   * <p>
      +97   * The effect of using this approach in a system that uses junit's
      +98   * "reloading classloader" behaviour is unknown. This junit feature is
      +99   * intended for junit GUI apps where a test may be run multiple times
      +100  * within the same JVM - and in particular, when the .class file may
      +101  * be modified between runs of the test. How junit achieves this is
      +102  * actually rather weird (the whole junit code is rather weird in fact)
      +103  * and it is not clear whether this approach will work as expected in
      +104  * such situations.
      +105  */
      +106 public class PathableTestSuite extends TestSuite {
      +107 
      +108     /**
      +109      * The classloader that should be set as the context classloader
      +110      * before each test in the suite is run.
      +111      */
      +112     private ClassLoader contextLoader;
      +113 
      +114     /**
      +115      * Constructor.
      +116      * 
      +117      * @param testClass is the TestCase that is to be run, as loaded by
      +118      * the appropriate ClassLoader.
      +119      * 
      +120      * @param contextClassLoader is the loader that should be returned by
      +121      * calls to Thread.currentThread.getContextClassLoader from test methods
      +122      * (or any method called by test methods).
      +123      */
      +124     public PathableTestSuite(Class testClass, ClassLoader contextClassLoader) {
      +125         super(testClass);
      +126         contextLoader = contextClassLoader;
      +127     }
      +128 
      +129     /**
      +130      * This method is invoked once for each Test in the current TestSuite.
      +131      * Note that a Test may itself be a TestSuite object (ie a collection
      +132      * of tests).
      +133      * <p>
      +134      * The context classloader and system properties are saved before each
      +135      * test, and restored after the test completes to better isolate tests.
      +136      */
      +137     public void runTest(Test test, TestResult result) {
      +138         ClassLoader origContext = Thread.currentThread().getContextClassLoader();
      +139         Properties oldSysProps = (Properties) System.getProperties().clone();
      +140         try {
      +141             Thread.currentThread().setContextClassLoader(contextLoader);
      +142             test.run(result);
      +143         } finally {
      +144             System.setProperties(oldSysProps);
      +145             Thread.currentThread().setContextClassLoader(origContext);
      +146         }
      +147     }
      +148 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/SimpleLogTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/SimpleLogTestCase.html new file mode 100644 index 0000000..216549a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/SimpleLogTestCase.html @@ -0,0 +1,60 @@ + + + + +SimpleLogTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18  package org.apache.commons.logging;
      +19  
      +20  import org.apache.commons.logging.impl.SimpleLog;
      +21  
      +22  /**
      +23   * 
      +24   *
      +25   * 
      +26   * 
      +27   * 
      +28   * 
      +29   */
      +30  public class SimpleLogTestCase extends AbstractLogTest
      +31  {
      +32      /**
      +33       *
      +34       *
      +35       *
      +36       */
      +37      public Log getLogObject()
      +38      {
      +39          return (Log) new SimpleLog(this.getClass().getName());
      +40      }
      +41  
      +42      public static void main(String[] args) {
      +43          String[] testCaseName = { SimpleLogTestCase.class.getName() };
      +44          junit.textui.TestRunner.main(testCaseName);
      +45      }
      +46  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/UserClass.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/UserClass.html new file mode 100644 index 0000000..f93a32e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/UserClass.html @@ -0,0 +1,57 @@ + + + + +UserClass xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18  package org.apache.commons.logging;
      +19  
      +20  import org.apache.commons.logging.LogFactory;
      +21  import org.apache.commons.logging.impl.LogFactoryImpl;
      +22  
      +23  public class UserClass {
      +24      
      +25  
      +26      /**
      +27       * Set the ALLOW_FLAWED_CONTEXT feature on the LogFactoryImpl object
      +28       * associated with this class' classloader.
      +29       * <p>
      +30       * Don't forget to set the context classloader to whatever it will be
      +31       * when an instance of this class is actually created <i>before</i> calling
      +32       * this method!
      +33       */
      +34      public static void setAllowFlawedContext(String state) {
      +35          LogFactory f = LogFactory.getFactory();
      +36          f.setAttribute(LogFactoryImpl.ALLOW_FLAWED_CONTEXT_PROPERTY, state); 
      +37      }
      +38  
      +39      public UserClass() {
      +40          Log log = LogFactory.getLog(LoadTestCase.class);
      +41        }
      +42      
      +43  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/AvalonLoggerTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/AvalonLoggerTestCase.html new file mode 100644 index 0000000..421eb9d --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/AvalonLoggerTestCase.html @@ -0,0 +1,62 @@ + + + + +AvalonLoggerTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging.avalon;
      +18  
      +19  import org.apache.avalon.framework.logger.ConsoleLogger;
      +20  import org.apache.commons.logging.impl.AvalonLogger;
      +21  import org.apache.commons.logging.Log;
      +22  import org.apache.commons.logging.AbstractLogTest;
      +23  
      +24  import junit.framework.Test;
      +25  import junit.framework.TestSuite;
      +26  
      +27  /**
      +28   * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
      +29   * @version $Revision: 581090 $ $Date: 2007-10-02 00:01:06 +0200 (ti, 02 okt 2007) $
      +30   */
      +31  public class AvalonLoggerTestCase extends AbstractLogTest {
      +32  
      +33      public static void main(String[] args) {
      +34          String[] testCaseName = { AvalonLoggerTestCase.class.getName() };
      +35          junit.textui.TestRunner.main(testCaseName);
      +36      }
      +37  
      +38      public static Test suite() {
      +39          TestSuite suite = new TestSuite();
      +40          suite.addTestSuite(AvalonLoggerTestCase.class);
      +41          return suite;
      +42      }
      +43  
      +44      public Log getLogObject() {
      +45          Log log = new AvalonLogger(new ConsoleLogger());
      +46          return log;
      +47      }
      +48  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-frame.html new file mode 100644 index 0000000..e9c1afa --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-frame.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.avalon + + + + +

      + org.apache.commons.logging.avalon +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-summary.html new file mode 100644 index 0000000..05b38ca --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/avalon/package-summary.html @@ -0,0 +1,67 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.avalon + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.avalon

      + + + + + + + + + + + + +
      Class Summary
      + AvalonLoggerTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/FirstPriorityConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/FirstPriorityConfigTestCase.html new file mode 100644 index 0000000..c08ec1d --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/FirstPriorityConfigTestCase.html @@ -0,0 +1,139 @@ + + + + +FirstPriorityConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.config;
      +19  
      +20  
      +21  import java.net.URL;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  import org.apache.commons.logging.LogFactory;
      +27  import org.apache.commons.logging.PathableClassLoader;
      +28  import org.apache.commons.logging.PathableTestSuite;
      +29  
      +30  
      +31  /**
      +32   * Tests that verify that the process of configuring logging on startup
      +33   * works correctly by selecting the file with the highest priority.
      +34   * <p>
      +35   * This test sets up a classpath where:
      +36   * <ul>
      +37   * <li> first file found has priority=20
      +38   * <li> second file found has priority=10
      +39   * </ul>
      +40   * The result should be that the first file is used.
      +41   */
      +42  public class FirstPriorityConfigTestCase extends TestCase {
      +43  
      +44      // ------------------------------------------- JUnit Infrastructure Methods
      +45  
      +46  
      +47      /**
      +48       * Return the tests included in this test suite.
      +49       */
      +50      public static Test suite() throws Exception {
      +51          Class thisClass = FirstPriorityConfigTestCase.class;
      +52  
      +53          // Determine the URL to this .class file, so that we can then
      +54          // append the priority dirs to it. For tidiness, load this
      +55          // class through a dummy loader though this is not absolutely
      +56          // necessary...
      +57          PathableClassLoader dummy = new PathableClassLoader(null);
      +58          dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
      +59          dummy.addLogicalLib("testclasses");
      +60          dummy.addLogicalLib("commons-logging");
      +61          
      +62          String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
      +63          URL baseUrl = dummy.findResource(thisClassPath);
      +64  
      +65          // Now set up the desired classloader hierarchy. We'll put JCL
      +66          // in the container path, the testcase in a webapp path, and
      +67          // both config files into the webapp path too.
      +68          PathableClassLoader containerLoader = new PathableClassLoader(null);
      +69          containerLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +70          containerLoader.addLogicalLib("commons-logging");
      +71          
      +72          PathableClassLoader webappLoader = new PathableClassLoader(containerLoader);
      +73          webappLoader.addLogicalLib("testclasses");
      +74  
      +75          URL pri20URL = new URL(baseUrl, "priority20/");
      +76          webappLoader.addURL(pri20URL);
      +77  
      +78          URL pri10URL = new URL(baseUrl, "priority10/");
      +79          webappLoader.addURL(pri10URL);
      +80          
      +81          // load the test class via webapp loader, and use the webapp loader
      +82          // as the tccl loader too.
      +83          Class testClass = webappLoader.loadClass(thisClass.getName());
      +84          return new PathableTestSuite(testClass, webappLoader);
      +85      }
      +86  
      +87      /**
      +88       * Set up instance variables required by this test case.
      +89       */
      +90      public void setUp() throws Exception {
      +91          LogFactory.releaseAll();
      +92      }
      +93  
      +94      /**
      +95       * Tear down instance variables required by this test case.
      +96       */
      +97      public void tearDown() {
      +98          LogFactory.releaseAll();
      +99      }
      +100 
      +101     // ----------------------------------------------------------- Test Methods
      +102 
      +103     /**
      +104      * Verify that the config file being used is the one containing
      +105      * the desired configId value.
      +106      */
      +107     public void testPriority() throws Exception {
      +108         LogFactory instance = LogFactory.getFactory();
      +109 
      +110         ClassLoader thisClassLoader = this.getClass().getClassLoader();
      +111         ClassLoader lfClassLoader = instance.getClass().getClassLoader();
      +112         ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
      +113 
      +114         // context classloader should be thisClassLoader
      +115         assertEquals(thisClassLoader, contextClassLoader);
      +116         
      +117         // lfClassLoader should be parent of this classloader
      +118         assertEquals(lfClassLoader, thisClassLoader.getParent());
      +119         assertEquals(PathableClassLoader.class.getName(),
      +120                 lfClassLoader.getClass().getName());
      +121 
      +122         String id = (String) instance.getAttribute("configId");
      +123         assertEquals("Correct config file loaded", "priority20", id );
      +124     }
      +125 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/PriorityConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/PriorityConfigTestCase.html new file mode 100644 index 0000000..3fec685 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/PriorityConfigTestCase.html @@ -0,0 +1,144 @@ + + + + +PriorityConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.config;
      +19  
      +20  
      +21  import java.net.URL;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  import org.apache.commons.logging.LogFactory;
      +27  import org.apache.commons.logging.PathableClassLoader;
      +28  import org.apache.commons.logging.PathableTestSuite;
      +29  
      +30  
      +31  /**
      +32   * Tests that verify that the process of configuring logging on startup
      +33   * works correctly by selecting the file with the highest priority.
      +34   * <p>
      +35   * This test sets up a classpath where:
      +36   * <ul>
      +37   * <li> first file (in parent loader) has priority=10 (parentFirst=true)
      +38   * <li> second file found has no priority set
      +39   * <li> third file found has priority=20
      +40   * <li> fourth file found also has priority=20
      +41   * </ul>
      +42   * The result should be that the third file is used.
      +43   * <p>
      +44   * Note that parentFirst=true is used in this test because method
      +45   * <code>PathableClassLoader.getResources</code> always behaves as if
      +46   * parentFirst=true; see the PathableClassLoader javadoc for details.
      +47   */
      +48  
      +49  public class PriorityConfigTestCase extends TestCase {
      +50  
      +51      // ------------------------------------------- JUnit Infrastructure Methods
      +52  
      +53  
      +54      /**
      +55       * Return the tests included in this test suite.
      +56       */
      +57      public static Test suite() throws Exception {
      +58          Class thisClass = PriorityConfigTestCase.class;
      +59  
      +60          // Determine the URL to this .class file, so that we can then
      +61          // append the priority dirs to it. For tidiness, load this
      +62          // class through a dummy loader though this is not absolutely
      +63          // necessary...
      +64          PathableClassLoader dummy = new PathableClassLoader(null);
      +65          dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
      +66          dummy.addLogicalLib("testclasses");
      +67          dummy.addLogicalLib("commons-logging");
      +68          
      +69          String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
      +70          URL baseUrl = dummy.findResource(thisClassPath);
      +71  
      +72          // Now set up the desired classloader hierarchy. We'll put a config
      +73          // file of priority=10 in the container path, and ones of both
      +74          // "no priority" and priority=20 in the webapp path.
      +75          //
      +76          // A second properties file with priority=20 is also added,
      +77          // so we can check that the first one in the classpath is
      +78          // used.
      +79          PathableClassLoader containerLoader = new PathableClassLoader(null);
      +80          containerLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +81          containerLoader.addLogicalLib("commons-logging");
      +82          
      +83          URL pri10URL = new URL(baseUrl, "priority10/");
      +84          containerLoader.addURL(pri10URL);
      +85  
      +86          PathableClassLoader webappLoader = new PathableClassLoader(containerLoader);
      +87          webappLoader.setParentFirst(true);
      +88          webappLoader.addLogicalLib("testclasses");
      +89  
      +90          URL noPriorityURL = new URL(baseUrl, "nopriority/");
      +91          webappLoader.addURL(noPriorityURL);
      +92          
      +93          URL pri20URL = new URL(baseUrl, "priority20/");
      +94          webappLoader.addURL(pri20URL);
      +95          
      +96          URL pri20aURL = new URL(baseUrl, "priority20a/");
      +97          webappLoader.addURL(pri20aURL);
      +98          
      +99          // load the test class via webapp loader, and use the webapp loader
      +100         // as the tccl loader too.
      +101         Class testClass = webappLoader.loadClass(thisClass.getName());
      +102         return new PathableTestSuite(testClass, webappLoader);
      +103     }
      +104 
      +105     /**
      +106      * Set up instance variables required by this test case.
      +107      */
      +108     public void setUp() throws Exception {
      +109         LogFactory.releaseAll();
      +110     }
      +111 
      +112     /**
      +113      * Tear down instance variables required by this test case.
      +114      */
      +115     public void tearDown() {
      +116         LogFactory.releaseAll();
      +117     }
      +118 
      +119     // ----------------------------------------------------------- Test Methods
      +120 
      +121     /**
      +122      * Verify that the config file being used is the one containing
      +123      * the desired configId value.
      +124      */
      +125     public void testPriority() throws Exception {
      +126         LogFactory instance = LogFactory.getFactory();
      +127         String id = (String) instance.getAttribute("configId");
      +128         assertEquals("Correct config file loaded", "priority20", id );
      +129     }
      +130 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-frame.html new file mode 100644 index 0000000..66ac61c --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-frame.html @@ -0,0 +1,27 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.config + + + + +

      + org.apache.commons.logging.config +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-summary.html new file mode 100644 index 0000000..eaf501e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/config/package-summary.html @@ -0,0 +1,72 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.config + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.config

      + + + + + + + + + + + + + + + +
      Class Summary
      + FirstPriorityConfigTestCase +
      + PriorityConfigTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/WeakHashtableTest.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/WeakHashtableTest.html new file mode 100644 index 0000000..ccbabd7 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/WeakHashtableTest.html @@ -0,0 +1,264 @@ + + + + +WeakHashtableTest xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  import java.lang.ref.*;
      +22  import junit.framework.*;
      +23  import java.util.*;
      +24  
      +25  public class WeakHashtableTest extends TestCase {
      +26  
      +27      
      +28      /** Maximum number of iterations before our test fails */
      +29      private static final int MAX_GC_ITERATIONS = 50;
      +30  
      +31      private WeakHashtable weakHashtable;
      +32      private Long keyOne;
      +33      private Long keyTwo;
      +34      private Long keyThree;
      +35      private Long valueOne;
      +36      private Long valueTwo;
      +37      private Long valueThree;
      +38  
      +39      public WeakHashtableTest(String testName) {
      +40          super(testName);
      +41      }
      +42      
      +43  
      +44      protected void setUp() throws Exception {
      +45          super.setUp();
      +46          weakHashtable = new WeakHashtable();
      +47          
      +48          keyOne = new Long(1);
      +49          keyTwo = new Long(2);
      +50          keyThree = new Long(3);
      +51          valueOne = new Long(100);
      +52          valueTwo = new Long(200);
      +53          valueThree = new Long(300);
      +54          
      +55          weakHashtable.put(keyOne, valueOne);
      +56          weakHashtable.put(keyTwo, valueTwo);
      +57          weakHashtable.put(keyThree, valueThree);
      +58      }
      +59  
      +60      /** Tests public boolean contains(Object value) */
      +61      public void testContains() throws Exception {
      +62          assertFalse(weakHashtable.contains(new Long(1)));
      +63          assertFalse(weakHashtable.contains(new Long(2)));
      +64          assertFalse(weakHashtable.contains(new Long(3)));
      +65          assertTrue(weakHashtable.contains(new Long(100)));
      +66          assertTrue(weakHashtable.contains(new Long(200)));
      +67          assertTrue(weakHashtable.contains(new Long(300)));
      +68          assertFalse(weakHashtable.contains(new Long(400)));
      +69      }
      +70      
      +71      /** Tests public boolean containsKey(Object key) */
      +72      public void testContainsKey() throws Exception {
      +73          assertTrue(weakHashtable.containsKey(new Long(1)));
      +74          assertTrue(weakHashtable.containsKey(new Long(2)));
      +75          assertTrue(weakHashtable.containsKey(new Long(3)));
      +76          assertFalse(weakHashtable.containsKey(new Long(100)));
      +77          assertFalse(weakHashtable.containsKey(new Long(200)));
      +78          assertFalse(weakHashtable.containsKey(new Long(300)));
      +79          assertFalse(weakHashtable.containsKey(new Long(400)));    
      +80      }
      +81      
      +82      /** Tests public boolean containsValue(Object value) */
      +83      public void testContainsValue() throws Exception {
      +84          assertFalse(weakHashtable.containsValue(new Long(1)));
      +85          assertFalse(weakHashtable.containsValue(new Long(2)));
      +86          assertFalse(weakHashtable.containsValue(new Long(3)));
      +87          assertTrue(weakHashtable.containsValue(new Long(100)));
      +88          assertTrue(weakHashtable.containsValue(new Long(200)));
      +89          assertTrue(weakHashtable.containsValue(new Long(300)));
      +90          assertFalse(weakHashtable.containsValue(new Long(400)));    
      +91      }
      +92      
      +93      /** Tests public Enumeration elements() */
      +94      public void testElements() throws Exception {
      +95          ArrayList elements = new ArrayList();
      +96          for (Enumeration e = weakHashtable.elements(); e.hasMoreElements();) {
      +97              elements.add(e.nextElement());
      +98          }
      +99          assertEquals(3, elements.size());
      +100         assertTrue(elements.contains(valueOne));
      +101         assertTrue(elements.contains(valueTwo));
      +102         assertTrue(elements.contains(valueThree));
      +103     }
      +104     
      +105     /** Tests public Set entrySet() */
      +106     public void testEntrySet() throws Exception {
      +107         Set entrySet = weakHashtable.entrySet();
      +108         for (Iterator it = entrySet.iterator(); it.hasNext();) {
      +109             Map.Entry entry = (Map.Entry) it.next();
      +110             Object key = entry.getKey();
      +111             if (keyOne.equals(key)) {
      +112                 assertEquals(valueOne, entry.getValue());
      +113             } else if (keyTwo.equals(key)) {
      +114                 assertEquals(valueTwo, entry.getValue());
      +115             } else if (keyThree.equals(key)) {
      +116                 assertEquals(valueThree, entry.getValue());
      +117             } else {
      +118                 fail("Unexpected key");
      +119             }
      +120         }
      +121     }
      +122     
      +123     /** Tests public Object get(Object�key) */
      +124     public void testGet() throws Exception {
      +125         assertEquals(valueOne, weakHashtable.get(keyOne));
      +126         assertEquals(valueTwo, weakHashtable.get(keyTwo));
      +127         assertEquals(valueThree, weakHashtable.get(keyThree));
      +128         assertNull(weakHashtable.get(new Long(50)));
      +129     }
      +130     
      +131     /** Tests public Enumeration keys() */
      +132     public void testKeys() throws Exception {
      +133         ArrayList keys = new ArrayList();
      +134         for (Enumeration e = weakHashtable.keys(); e.hasMoreElements();) {
      +135             keys.add(e.nextElement());
      +136         }
      +137         assertEquals(3, keys.size());
      +138         assertTrue(keys.contains(keyOne));
      +139         assertTrue(keys.contains(keyTwo));
      +140         assertTrue(keys.contains(keyThree));    
      +141     }
      +142     
      +143     /** Tests public Set keySet() */
      +144     public void testKeySet() throws Exception {
      +145         Set keySet = weakHashtable.keySet();
      +146         assertEquals(3, keySet.size());
      +147         assertTrue(keySet.contains(keyOne));
      +148         assertTrue(keySet.contains(keyTwo));
      +149         assertTrue(keySet.contains(keyThree));
      +150     }
      +151     
      +152     /** Tests public Object put(Object key, Object value) */
      +153     public void testPut() throws Exception {
      +154         Long anotherKey = new Long(2004);
      +155         weakHashtable.put(anotherKey, new Long(1066));
      +156         
      +157         assertEquals(new Long(1066), weakHashtable.get(anotherKey));
      +158                
      +159         // Test compliance with the hashtable API re nulls
      +160         Exception caught = null;
      +161         try {
      +162             weakHashtable.put(null, new Object());
      +163         }
      +164         catch (Exception e) {
      +165             caught = e;
      +166         }
      +167         assertNotNull("did not throw an exception adding a null key", caught);
      +168         caught = null;
      +169         try {
      +170             weakHashtable.put(new Object(), null);
      +171         }
      +172         catch (Exception e) {
      +173             caught = e;
      +174         }
      +175         assertNotNull("did not throw an exception adding a null value", caught);
      +176     }
      +177     
      +178     /** Tests public void putAll(Map t) */
      +179     public void testPutAll() throws Exception {
      +180         Map newValues = new HashMap();
      +181         Long newKey = new Long(1066);
      +182         Long newValue = new Long(1415);
      +183         newValues.put(newKey, newValue);
      +184         Long anotherNewKey = new Long(1645);
      +185         Long anotherNewValue = new Long(1815);
      +186         newValues.put(anotherNewKey, anotherNewValue);
      +187         weakHashtable.putAll(newValues);
      +188         
      +189         assertEquals(5, weakHashtable.size());
      +190         assertEquals(newValue, weakHashtable.get(newKey));
      +191         assertEquals(anotherNewValue, weakHashtable.get(anotherNewKey));
      +192     }
      +193     
      +194     /** Tests public Object remove(Object�key) */
      +195     public void testRemove() throws Exception {
      +196         weakHashtable.remove(keyOne);
      +197         assertEquals(2, weakHashtable.size());
      +198         assertNull(weakHashtable.get(keyOne));
      +199     }
      +200     
      +201     /** Tests public Collection values() */
      +202     public void testValues() throws Exception {
      +203         Collection values = weakHashtable.values();
      +204         assertEquals(3, values.size());
      +205         assertTrue(values.contains(valueOne));
      +206         assertTrue(values.contains(valueTwo));
      +207         assertTrue(values.contains(valueThree));
      +208     }
      +209     
      +210     public void testRelease() throws Exception {
      +211         assertNotNull(weakHashtable.get(new Long(1)));
      +212         ReferenceQueue testQueue = new ReferenceQueue();
      +213         WeakReference weakKeyOne = new WeakReference(keyOne, testQueue);
      +214 
      +215         // lose our references
      +216         keyOne = null;
      +217         keyTwo = null;
      +218         keyThree = null;
      +219         valueOne = null;
      +220         valueTwo = null;
      +221         valueThree = null;
      +222         
      +223         int iterations = 0;
      +224         int bytz = 2;
      +225         while(true) {
      +226             System.gc();
      +227             if(iterations++ > MAX_GC_ITERATIONS){
      +228                 fail("Max iterations reached before resource released.");
      +229             }
      +230             
      +231             if(weakHashtable.get(new Long(1)) == null) {
      +232                 break;
      +233                 
      +234             } else {
      +235                 // create garbage:
      +236                 byte[] b =  new byte[bytz];
      +237                 bytz = bytz * 2;
      +238             }
      +239         }
      +240         
      +241         // some JVMs seem to take a little time to put references on 
      +242         // the reference queue once the reference has been collected
      +243         // need to think about whether this is enough to justify
      +244         // stepping through the collection each time...
      +245         while(testQueue.poll() == null) {}
      +246         
      +247         // Test that the released objects are not taking space in the table
      +248         assertEquals("underlying table not emptied", 0, weakHashtable.size());
      +249     }
      +250 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-frame.html new file mode 100644 index 0000000..3a83d95 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-frame.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.impl + + + + +

      + org.apache.commons.logging.impl +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-summary.html new file mode 100644 index 0000000..31589d1 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/impl/package-summary.html @@ -0,0 +1,67 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.impl + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.impl

      + + + + + + + + + + + + +
      Class Summary
      + WeakHashtableTest +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigAPITestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigAPITestCase.html new file mode 100644 index 0000000..b742f36 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigAPITestCase.html @@ -0,0 +1,75 @@ + + + + +CustomConfigAPITestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.jdk14;
      +19  
      +20  import junit.framework.Test;
      +21  
      +22  import org.apache.commons.logging.PathableClassLoader;
      +23  import org.apache.commons.logging.PathableTestSuite;
      +24  
      +25  
      +26  /**
      +27   * TestCase for Jdk14 logging when the commons-logging-api jar file is in
      +28   * the parent classpath and commons-logging.jar is in the child.
      +29   */
      +30  
      +31  public class CustomConfigAPITestCase extends CustomConfigTestCase {
      +32  
      +33      public CustomConfigAPITestCase(String name) {
      +34          super(name);
      +35      }
      +36  
      +37      /**
      +38       * Return the tests included in this test suite.
      +39       */
      +40      public static Test suite() throws Exception {
      +41          PathableClassLoader parent = new PathableClassLoader(null);
      +42          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +43  
      +44          // the TestHandler class must be accessable from the System classloader
      +45          // in order for java.util.logging.LogManager.readConfiguration to
      +46          // be able to instantiate it. And this test case must see the same
      +47          // class in order to be able to access its data. Yes this is ugly
      +48          // but the whole jdk14 API is a ******* mess anyway.
      +49          ClassLoader scl = ClassLoader.getSystemClassLoader();
      +50          loadTestHandler(HANDLER_NAME, scl);
      +51          parent.useExplicitLoader(HANDLER_NAME, scl);
      +52          parent.addLogicalLib("commons-logging-api");
      +53  
      +54          PathableClassLoader child = new PathableClassLoader(parent);
      +55          child.addLogicalLib("testclasses");
      +56          child.addLogicalLib("commons-logging");
      +57          
      +58          Class testClass = child.loadClass(CustomConfigAPITestCase.class.getName());
      +59          return new PathableTestSuite(testClass, child);
      +60      }
      +61  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigFullTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigFullTestCase.html new file mode 100644 index 0000000..7eac0be --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigFullTestCase.html @@ -0,0 +1,77 @@ + + + + +CustomConfigFullTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.jdk14;
      +19  
      +20  
      +21  import junit.framework.Test;
      +22  
      +23  import org.apache.commons.logging.PathableTestSuite;
      +24  import org.apache.commons.logging.PathableClassLoader;
      +25  
      +26  
      +27  /**
      +28   * TestCase for Jdk14 logging when the commons-logging jar file is in
      +29   * the parent classpath.
      +30   */
      +31  
      +32  public class CustomConfigFullTestCase extends CustomConfigTestCase {
      +33  
      +34  
      +35      public CustomConfigFullTestCase(String name) {
      +36          super(name);
      +37      }
      +38  
      +39  
      +40      /**
      +41       * Return the tests included in this test suite.
      +42       */
      +43      public static Test suite() throws Exception {
      +44          PathableClassLoader parent = new PathableClassLoader(null);
      +45          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +46  
      +47          // the TestHandler class must be accessable from the System classloader
      +48          // in order for java.util.logging.LogManager.readConfiguration to
      +49          // be able to instantiate it. And this test case must see the same
      +50          // class in order to be able to access its data. Yes this is ugly
      +51          // but the whole jdk14 API is a ******* mess anyway.
      +52          ClassLoader scl = ClassLoader.getSystemClassLoader();
      +53          loadTestHandler(HANDLER_NAME, scl);
      +54          parent.useExplicitLoader(HANDLER_NAME, scl);
      +55          parent.addLogicalLib("commons-logging");
      +56  
      +57          PathableClassLoader child = new PathableClassLoader(parent);
      +58          child.addLogicalLib("testclasses");
      +59          
      +60          Class testClass = child.loadClass(CustomConfigFullTestCase.class.getName());
      +61          return new PathableTestSuite(testClass, child);
      +62      }
      +63  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigTestCase.html new file mode 100644 index 0000000..c4bee11 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/CustomConfigTestCase.html @@ -0,0 +1,412 @@ + + + + +CustomConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.jdk14;
      +19  
      +20  
      +21  import java.io.ByteArrayOutputStream;
      +22  import java.io.InputStream;
      +23  import java.lang.reflect.Method;
      +24  import java.util.Iterator;
      +25  import java.util.logging.Handler;
      +26  import java.util.logging.Level;
      +27  import java.util.logging.LogManager;
      +28  import java.util.logging.LogRecord;
      +29  import java.util.logging.Logger;
      +30  
      +31  import junit.framework.Test;
      +32  
      +33  import org.apache.commons.logging.DummyException;
      +34  import org.apache.commons.logging.PathableClassLoader;
      +35  import org.apache.commons.logging.PathableTestSuite;
      +36  
      +37  
      +38  /**
      +39   * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
      +40   * custom configuration, so that JDK 1.4 should be selected and an appropriate
      +41   * logger configured per the configuration properties.</p>
      +42   *
      +43   * @author Craig R. McClanahan
      +44   * @version $Revision: 568760 $ $Date: 2007-08-23 00:19:45 +0200 (to, 23 aug 2007) $
      +45   */
      +46  
      +47  public class CustomConfigTestCase extends DefaultConfigTestCase {
      +48  
      +49      protected static final String HANDLER_NAME 
      +50          = "org.apache.commons.logging.jdk14.TestHandler";
      +51  
      +52      // ----------------------------------------------------------- Constructors
      +53  
      +54  
      +55      /**
      +56       * <p>Construct a new instance of this test case.</p>
      +57       *
      +58       * @param name Name of the test case
      +59       */
      +60      public CustomConfigTestCase(String name) {
      +61          super(name);
      +62      }
      +63  
      +64  
      +65      // ----------------------------------------------------- Instance Variables
      +66  
      +67  
      +68      /**
      +69       * <p>The customized <code>Handler</code> we will be using.</p>
      +70       */
      +71      protected TestHandler handler = null;
      +72  
      +73  
      +74      /**
      +75       * <p>The underlying <code>Handler</code>s we will be using.</p>
      +76       */
      +77      protected Handler handlers[] = null;
      +78  
      +79  
      +80      /**
      +81       * <p>The underlying <code>Logger</code> we will be using.</p>
      +82       */
      +83      protected Logger logger = null;
      +84  
      +85  
      +86      /**
      +87       * <p>The underlying <code>LogManager</code> we will be using.</p>
      +88       */
      +89      protected LogManager manager = null;
      +90  
      +91  
      +92      /**
      +93       * <p>The message levels that should have been logged.</p>
      +94       */
      +95      protected Level testLevels[] =
      +96      { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE };
      +97  
      +98  
      +99      /**
      +100      * <p>The message strings that should have been logged.</p>
      +101      */
      +102     protected String testMessages[] =
      +103     { "debug", "info", "warn", "error", "fatal" };
      +104 
      +105 
      +106     // ------------------------------------------- JUnit Infrastructure Methods
      +107 
      +108 
      +109     /**
      +110      * Given the name of a class that is somewhere in the classpath of the provided
      +111      * classloader, return the contents of the corresponding .class file.
      +112      */
      +113     protected static byte[] readClass(String name, ClassLoader srcCL) throws Exception {
      +114         String resName = name.replace('.', '/') + ".class";
      +115         System.err.println("Trying to load resource [" + resName + "]");
      +116         InputStream is = srcCL.getResourceAsStream(resName);
      +117         ByteArrayOutputStream baos = new ByteArrayOutputStream();
      +118         System.err.println("Reading resource [" + resName + "]");
      +119         byte[] buf = new byte[1000];
      +120         for(;;) {
      +121             int read = is.read(buf);
      +122             if (read <= 0) {
      +123                 break;
      +124             }
      +125             baos.write(buf, 0, read);
      +126         }
      +127         is.close();
      +128         return baos.toByteArray();
      +129     }
      +130 
      +131     /**
      +132      * Make a class available in the system classloader even when its classfile is
      +133      * not present in the classpath configured for that classloader. This only
      +134      * works for classes for which all dependencies are already loaded in
      +135      * that classloader.
      +136      */
      +137     protected static void loadTestHandler(String className, ClassLoader targetCL) {
      +138         try {
      +139             targetCL.loadClass(className);
      +140             // fail("Class already in target classloader");
      +141             return;
      +142         } catch(ClassNotFoundException ex) {
      +143             // ok, go ahead and load it
      +144         }
      +145 
      +146         try {
      +147             ClassLoader srcCL = CustomConfigAPITestCase.class.getClassLoader();
      +148             byte[] classData = readClass(className, srcCL);
      +149 
      +150             Class[] params = new Class[] {
      +151                 String.class, classData.getClass(), 
      +152                 Integer.TYPE, Integer.TYPE};
      +153             Method m = ClassLoader.class.getDeclaredMethod("defineClass", params);
      +154 
      +155             Object[] args = new Object[4];
      +156             args[0] = className;
      +157             args[1] = classData;
      +158             args[2] = new Integer(0);
      +159             args[3] = new Integer(classData.length);
      +160             m.setAccessible(true);
      +161             m.invoke(targetCL, args);
      +162         } catch(Exception e) {
      +163             e.printStackTrace();
      +164             fail("Unable to load class " + className);
      +165         }
      +166     }
      +167 
      +168     /**
      +169      * Set up instance variables required by this test case.
      +170      */
      +171     public void setUp() throws Exception {
      +172         setUpManager
      +173             ("org/apache/commons/logging/jdk14/CustomConfig.properties");
      +174         setUpLogger("TestLogger");
      +175         setUpHandlers();
      +176         setUpFactory();
      +177         setUpLog("TestLogger");
      +178     }
      +179 
      +180 
      +181     /**
      +182      * Return the tests included in this test suite.
      +183      */
      +184     public static Test suite() throws Exception {
      +185         PathableClassLoader cl = new PathableClassLoader(null);
      +186         cl.useExplicitLoader("junit.", Test.class.getClassLoader());
      +187 
      +188         // the TestHandler class must be accessable from the System classloader
      +189         // in order for java.util.logging.LogManager.readConfiguration to
      +190         // be able to instantiate it. And this test case must see the same
      +191         // class in order to be able to access its data. Yes this is ugly
      +192         // but the whole jdk14 API is a ******* mess anyway.
      +193         ClassLoader scl = ClassLoader.getSystemClassLoader();
      +194         loadTestHandler(HANDLER_NAME, scl);
      +195         cl.useExplicitLoader(HANDLER_NAME, scl);
      +196         cl.addLogicalLib("commons-logging");
      +197         cl.addLogicalLib("testclasses");
      +198         
      +199         Class testClass = cl.loadClass(CustomConfigTestCase.class.getName());
      +200         return new PathableTestSuite(testClass, cl);
      +201     }
      +202 
      +203     /**
      +204      * Tear down instance variables required by this test case.
      +205      */
      +206     public void tearDown() {
      +207         super.tearDown();
      +208         handlers = null;
      +209         logger = null;
      +210         manager = null;
      +211     }
      +212 
      +213 
      +214     // ----------------------------------------------------------- Test Methods
      +215 
      +216 
      +217     // Test logging message strings with exceptions
      +218     public void testExceptionMessages() throws Exception {
      +219 
      +220         logExceptionMessages();
      +221         checkLogRecords(true);
      +222 
      +223     }
      +224 
      +225 
      +226     // Test logging plain message strings
      +227     public void testPlainMessages() throws Exception {
      +228 
      +229         logPlainMessages();
      +230         checkLogRecords(false);
      +231 
      +232     }
      +233 
      +234 
      +235     // Test pristine Handlers instances
      +236     public void testPristineHandlers() {
      +237 
      +238         assertNotNull(handlers);
      +239         assertEquals(1, handlers.length);
      +240         assertTrue(handlers[0] instanceof TestHandler);
      +241         assertNotNull(handler);
      +242 
      +243     }
      +244 
      +245 
      +246     // Test pristine Logger instance
      +247     public void testPristineLogger() {
      +248 
      +249         assertNotNull("Logger exists", logger);
      +250         assertEquals("Logger name", "TestLogger", logger.getName());
      +251 
      +252         // Assert which logging levels have been enabled
      +253         assertTrue(logger.isLoggable(Level.SEVERE));
      +254         assertTrue(logger.isLoggable(Level.WARNING));
      +255         assertTrue(logger.isLoggable(Level.INFO));
      +256         assertTrue(logger.isLoggable(Level.CONFIG));
      +257         assertTrue(logger.isLoggable(Level.FINE));
      +258         assertTrue(!logger.isLoggable(Level.FINER));
      +259         assertTrue(!logger.isLoggable(Level.FINEST));
      +260 
      +261     }
      +262 
      +263 
      +264     // Test Serializability of Log instance
      +265     public void testSerializable() throws Exception {
      +266 
      +267         super.testSerializable();
      +268         testExceptionMessages();
      +269 
      +270     }
      +271 
      +272 
      +273     // -------------------------------------------------------- Support Methods
      +274 
      +275 
      +276     // Check the log instance
      +277     protected void checkLog() {
      +278 
      +279         assertNotNull("Log exists", log);
      +280         assertEquals("Log class",
      +281                      "org.apache.commons.logging.impl.Jdk14Logger",
      +282                      log.getClass().getName());
      +283 
      +284         // Assert which logging levels have been enabled
      +285         assertTrue(log.isFatalEnabled());
      +286         assertTrue(log.isErrorEnabled());
      +287         assertTrue(log.isWarnEnabled());
      +288         assertTrue(log.isInfoEnabled());
      +289         assertTrue(log.isDebugEnabled());
      +290         assertTrue(!log.isTraceEnabled());
      +291 
      +292     }
      +293 
      +294 
      +295     // Check the recorded messages
      +296     protected void checkLogRecords(boolean thrown) {
      +297         Iterator records = handler.records();
      +298         for (int i = 0; i < testMessages.length; i++) {
      +299             assertTrue(records.hasNext());
      +300             LogRecord record = (LogRecord) records.next();
      +301             assertEquals("LogRecord level",
      +302                          testLevels[i], record.getLevel());
      +303             assertEquals("LogRecord message",
      +304                          testMessages[i], record.getMessage());
      +305             assertTrue("LogRecord class",
      +306                          record.getSourceClassName().startsWith(
      +307                                  "org.apache.commons.logging.jdk14.CustomConfig"));
      +308             if (thrown) {
      +309                 assertEquals("LogRecord method",
      +310                              "logExceptionMessages",
      +311                              record.getSourceMethodName());
      +312             } else {
      +313                 assertEquals("LogRecord method",
      +314                              "logPlainMessages",
      +315                              record.getSourceMethodName());
      +316             }
      +317             if (thrown) {
      +318                 assertNotNull("LogRecord thrown", record.getThrown());
      +319                 assertTrue("LogRecord thrown type",
      +320                            record.getThrown() instanceof DummyException);
      +321             } else {
      +322                 assertNull("LogRecord thrown",
      +323                            record.getThrown());
      +324             }
      +325         }
      +326         assertTrue(!records.hasNext());
      +327         handler.flush();
      +328     }
      +329 
      +330 
      +331     // Log the messages with exceptions
      +332     protected void logExceptionMessages() {
      +333         Throwable t = new DummyException();
      +334         log.trace("trace", t); // Should not actually get logged
      +335         log.debug("debug", t);
      +336         log.info("info", t);
      +337         log.warn("warn", t);
      +338         log.error("error", t);
      +339         log.fatal("fatal", t);
      +340     }
      +341 
      +342 
      +343     // Log the plain messages
      +344     protected void logPlainMessages() {
      +345         log.trace("trace"); // Should not actually get logged
      +346         log.debug("debug");
      +347         log.info("info");
      +348         log.warn("warn");
      +349         log.error("error");
      +350         log.fatal("fatal");
      +351     }
      +352 
      +353 
      +354     // Set up handlers instance
      +355     protected void setUpHandlers() throws Exception {
      +356         Logger parent = logger;
      +357         while (parent.getParent() != null) {
      +358             parent = parent.getParent();
      +359         }
      +360         handlers = parent.getHandlers();
      +361         
      +362         // The CustomConfig.properties file explicitly defines one handler class
      +363         // to be attached to the root logger, so if it isn't there then 
      +364         // something is badly wrong...
      +365         //
      +366         // Yes this testing is also done in testPristineHandlers but
      +367         // unfortunately:
      +368         //  * we need to set up the handlers variable here, 
      +369         //  * we don't want that to be set up incorrectly, as that can
      +370         //    produce weird error messages in other tests, and
      +371         //  * we can't rely on testPristineHandlers being the first
      +372         //    test to run.
      +373         // so we need to test things here too.
      +374         assertNotNull("No Handlers defined for JDK14 logging", handlers);
      +375         assertEquals("Unexpected number of handlers for JDK14 logging", 1, handlers.length);
      +376         assertNotNull("Handler is null", handlers[0]);
      +377         assertTrue("Handler not of expected type", handlers[0] instanceof TestHandler);
      +378         handler = (TestHandler) handlers[0];
      +379     }
      +380 
      +381 
      +382     // Set up logger instance
      +383     protected void setUpLogger(String name) throws Exception {
      +384         logger = Logger.getLogger(name);
      +385     }
      +386 
      +387 
      +388     // Set up LogManager instance
      +389     protected void setUpManager(String config) throws Exception {
      +390         manager = LogManager.getLogManager();
      +391         InputStream is =
      +392             this.getClass().getClassLoader().getResourceAsStream(config);
      +393         manager.readConfiguration(is);
      +394         is.close();
      +395     }
      +396 
      +397 
      +398 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/DefaultConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/DefaultConfigTestCase.html new file mode 100644 index 0000000..2633310 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/DefaultConfigTestCase.html @@ -0,0 +1,206 @@ + + + + +DefaultConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.jdk14;
      +19  
      +20  
      +21  import java.io.ByteArrayInputStream;
      +22  import java.io.ByteArrayOutputStream;
      +23  import java.io.ObjectInputStream;
      +24  import java.io.ObjectOutputStream;
      +25  
      +26  import junit.framework.Test;
      +27  import junit.framework.TestCase;
      +28  import junit.framework.TestSuite;
      +29  
      +30  import org.apache.commons.logging.Log;
      +31  import org.apache.commons.logging.LogFactory;
      +32  import org.apache.commons.logging.PathableClassLoader;
      +33  import org.apache.commons.logging.PathableTestSuite;
      +34  
      +35  
      +36  /**
      +37   * <p>TestCase for JDK 1.4 logging when running on a JDK 1.4 system with
      +38   * zero configuration, and with Log4J not present (so JDK 1.4 logging
      +39   * should be automatically configured.</p>
      +40   *
      +41   * @author Craig R. McClanahan
      +42   * @version $Revision: 427808 $ $Date: 2006-08-02 02:08:20 +0200 (on, 02 aug 2006) $
      +43   */
      +44  
      +45  public class DefaultConfigTestCase extends TestCase {
      +46  
      +47  
      +48      // ----------------------------------------------------------- Constructors
      +49  
      +50  
      +51      /**
      +52       * <p>Construct a new instance of this test case.</p>
      +53       *
      +54       * @param name Name of the test case
      +55       */
      +56      public DefaultConfigTestCase(String name) {
      +57          super(name);
      +58      }
      +59  
      +60  
      +61      // ----------------------------------------------------- Instance Variables
      +62  
      +63  
      +64      /**
      +65       * <p>The {@link LogFactory} implementation we have selected.</p>
      +66       */
      +67      protected LogFactory factory = null;
      +68  
      +69  
      +70      /**
      +71       * <p>The {@link Log} implementation we have selected.</p>
      +72       */
      +73      protected Log log = null;
      +74  
      +75  
      +76      // ------------------------------------------- JUnit Infrastructure Methods
      +77  
      +78  
      +79      /**
      +80       * Set up instance variables required by this test case.
      +81       */
      +82      public void setUp() throws Exception {
      +83          setUpFactory();
      +84          setUpLog("TestLogger");
      +85      }
      +86  
      +87  
      +88      /**
      +89       * Return the tests included in this test suite.
      +90       */
      +91      public static Test suite() throws Exception {
      +92          PathableClassLoader loader = new PathableClassLoader(null);
      +93          loader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +94          loader.addLogicalLib("testclasses");
      +95          loader.addLogicalLib("commons-logging");
      +96          
      +97          Class testClass = loader.loadClass(DefaultConfigTestCase.class.getName());
      +98          return new PathableTestSuite(testClass, loader);
      +99      }
      +100 
      +101     /**
      +102      * Tear down instance variables required by this test case.
      +103      */
      +104     public void tearDown() {
      +105         log = null;
      +106         factory = null;
      +107         LogFactory.releaseAll();
      +108     }
      +109 
      +110 
      +111     // ----------------------------------------------------------- Test Methods
      +112 
      +113 
      +114     // Test pristine Log instance
      +115     public void testPristineLog() {
      +116 
      +117         checkLog();
      +118 
      +119     }
      +120 
      +121 
      +122     // Test pristine LogFactory instance
      +123     public void testPristineFactory() {
      +124 
      +125         assertNotNull("LogFactory exists", factory);
      +126         assertEquals("LogFactory class",
      +127                      "org.apache.commons.logging.impl.LogFactoryImpl",
      +128                      factory.getClass().getName());
      +129 
      +130         String names[] = factory.getAttributeNames();
      +131         assertNotNull("Names exists", names);
      +132         assertEquals("Names empty", 0, names.length);
      +133 
      +134     }
      +135 
      +136 
      +137     // Test Serializability of Log instance
      +138     public void testSerializable() throws Exception {
      +139 
      +140         // Serialize and deserialize the instance
      +141         ByteArrayOutputStream baos = new ByteArrayOutputStream();
      +142         ObjectOutputStream oos = new ObjectOutputStream(baos);
      +143         oos.writeObject(log);
      +144         oos.close();
      +145         ByteArrayInputStream bais =
      +146             new ByteArrayInputStream(baos.toByteArray());
      +147         ObjectInputStream ois = new ObjectInputStream(bais);
      +148         log = (Log) ois.readObject();
      +149         ois.close();
      +150 
      +151         // Check the characteristics of the resulting object
      +152         checkLog();
      +153 
      +154     }
      +155 
      +156 
      +157     // -------------------------------------------------------- Support Methods
      +158 
      +159 
      +160 
      +161     // Check the log instance
      +162     protected void checkLog() {
      +163 
      +164         assertNotNull("Log exists", log);
      +165         assertEquals("Log class",
      +166                      "org.apache.commons.logging.impl.Jdk14Logger",
      +167                      log.getClass().getName());
      +168 
      +169         // Can we call level checkers with no exceptions?
      +170         log.isDebugEnabled();
      +171         log.isErrorEnabled();
      +172         log.isFatalEnabled();
      +173         log.isInfoEnabled();
      +174         log.isTraceEnabled();
      +175         log.isWarnEnabled();
      +176 
      +177     }
      +178 
      +179 
      +180     // Set up factory instance
      +181     protected void setUpFactory() throws Exception {
      +182         factory = LogFactory.getFactory();
      +183     }
      +184 
      +185 
      +186     // Set up log instance
      +187     protected void setUpLog(String name) throws Exception {
      +188         log = LogFactory.getLog(name);
      +189     }
      +190 
      +191 
      +192 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/TestHandler.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/TestHandler.html new file mode 100644 index 0000000..f1a919b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/TestHandler.html @@ -0,0 +1,84 @@ + + + + +TestHandler xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging.jdk14;
      +18  
      +19  
      +20  import java.util.ArrayList;
      +21  import java.util.Iterator;
      +22  import java.util.List;
      +23  import java.util.logging.Handler;
      +24  import java.util.logging.LogRecord;
      +25  
      +26  
      +27  /**
      +28   * <p>Test implementation of <code>java.util.logging.Handler</code>.</p>
      +29   *
      +30   * @author Craig R. McClanahan
      +31   * @version $Revision: 424108 $ $Date: 2006-07-21 01:19:55 +0200 (fr, 21 jul 2006) $
      +32   */
      +33  
      +34  public class TestHandler extends Handler {
      +35  
      +36  
      +37  
      +38      // ----------------------------------------------------- Instance Variables
      +39  
      +40  
      +41      // The set of logged records for this handler
      +42      private List records = new ArrayList();
      +43  
      +44  
      +45      // --------------------------------------------------------- Public Methods
      +46  
      +47  
      +48      public Iterator records() {
      +49          return (records.iterator());
      +50      }
      +51  
      +52  
      +53      // -------------------------------------------------------- Handler Methods
      +54  
      +55  
      +56      public void close() {
      +57      }
      +58  
      +59  
      +60      public void flush() {
      +61          records.clear();
      +62      }
      +63  
      +64  
      +65      public void publish(LogRecord record) {
      +66          records.add(record);
      +67      }
      +68  
      +69  
      +70  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-frame.html new file mode 100644 index 0000000..29f1870 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-frame.html @@ -0,0 +1,36 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.jdk14 + + + + +

      + org.apache.commons.logging.jdk14 +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-summary.html new file mode 100644 index 0000000..c745645 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/jdk14/package-summary.html @@ -0,0 +1,87 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.jdk14 + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.jdk14

      + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + CustomConfigAPITestCase +
      + CustomConfigFullTestCase +
      + CustomConfigTestCase +
      + DefaultConfigTestCase +
      + TestHandler +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/StandardTests.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/StandardTests.html new file mode 100644 index 0000000..5b1feac --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/StandardTests.html @@ -0,0 +1,230 @@ + + + + +StandardTests xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j;
      +19  
      +20  
      +21  import java.io.ByteArrayInputStream;
      +22  import java.io.ByteArrayOutputStream;
      +23  import java.io.ObjectInputStream;
      +24  import java.io.ObjectOutputStream;
      +25  import java.util.ArrayList;
      +26  import java.util.List;
      +27  
      +28  import junit.framework.TestCase;
      +29  
      +30  import org.apache.commons.logging.DummyException;
      +31  import org.apache.commons.logging.Log;
      +32  import org.apache.commons.logging.LogFactory;
      +33  
      +34  
      +35  /**
      +36   * Abstract set of tests that can be executed with various classpaths set.
      +37   * <p>
      +38   * The tests verify that when running on a system with Log4J present,
      +39   * Log4J is selected and that the logger basically works.
      +40   */
      +41  
      +42  public abstract class StandardTests extends TestCase {
      +43  
      +44      /**
      +45       * Simple structure to store information about messages that actually get
      +46       * logged by the underlying logging library.
      +47       */
      +48      public static class LogEvent {
      +49          public String msg;
      +50          public String level;
      +51          public Throwable throwable;
      +52      }
      +53  
      +54      // ------------------------------------------------------------------- 
      +55      // JUnit Infrastructure Methods
      +56      // ------------------------------------------------------------------- 
      +57  
      +58      /**
      +59       * Set up instance variables required by this test case.
      +60       */
      +61      public void setUp() throws Exception {
      +62          LogFactory.releaseAll();
      +63      }
      +64  
      +65      /**
      +66       * Tear down instance variables required by this test case.
      +67       */
      +68      public void tearDown() {
      +69          LogFactory.releaseAll();
      +70      }
      +71  
      +72      // ----------------------------------------------------------- 
      +73      // abstract methods
      +74      // ----------------------------------------------------------- 
      +75  
      +76      /**
      +77       * Modify log4j's setup so that all messages actually logged get redirected
      +78       * into the specified list.
      +79       * <p>
      +80       * This method also sets the logging level to INFO so that we
      +81       * can test whether messages are getting properly filtered.
      +82       */
      +83      public abstract void setUpTestAppender(List logEvents) throws Exception;
      +84      
      +85      // ----------------------------------------------------------- Test Methods
      +86  
      +87      /**
      +88       * Test that a LogFactory gets created as expected.
      +89       */
      +90      public void testCreateFactory() {
      +91          LogFactory factory = LogFactory.getFactory();
      +92          assertNotNull("LogFactory exists", factory);
      +93          assertEquals("LogFactory class",
      +94                       "org.apache.commons.logging.impl.LogFactoryImpl",
      +95                       factory.getClass().getName());
      +96  
      +97          String names[] = factory.getAttributeNames();
      +98          assertNotNull("Names exists", names);
      +99          assertEquals("Names empty", 0, names.length);
      +100     }
      +101 
      +102     /**
      +103      * Verify that we can log messages without exceptions.
      +104      */
      +105     public void testPlainMessages() throws Exception {
      +106         List logEvents = new ArrayList();
      +107         setUpTestAppender(logEvents);
      +108         Log log = LogFactory.getLog("test-category");
      +109         logPlainMessages(log);
      +110         checkLoggingEvents(logEvents, false);
      +111     }
      +112 
      +113     /**
      +114      * Verify that we can log exception messages.
      +115      */
      +116     public void testExceptionMessages() throws Exception {
      +117         List logEvents = new ArrayList();
      +118         setUpTestAppender(logEvents);
      +119         Log log = LogFactory.getLog("test-category");
      +120         logExceptionMessages(log);
      +121         checkLoggingEvents(logEvents, true);
      +122     }
      +123 
      +124     /**
      +125      * Test Serializability of Log instance
      +126      */
      +127     public void testSerializable() throws Exception {
      +128         List logEvents = new ArrayList();
      +129         setUpTestAppender(logEvents);
      +130         Log log = LogFactory.getLog("test-category");
      +131 
      +132         ByteArrayOutputStream baos = new ByteArrayOutputStream();
      +133         ObjectOutputStream oos = new ObjectOutputStream(baos);
      +134         oos.writeObject(log);
      +135         oos.close();
      +136         ByteArrayInputStream bais =
      +137             new ByteArrayInputStream(baos.toByteArray());
      +138         ObjectInputStream ois = new ObjectInputStream(bais);
      +139         Log newLog = (Log) ois.readObject();
      +140         ois.close();
      +141 
      +142         // Check the characteristics of the resulting object
      +143         logExceptionMessages(newLog);
      +144         checkLoggingEvents(logEvents, true);
      +145     }
      +146 
      +147     // -------------------------------------------------------- Support Methods
      +148 
      +149     /**
      +150      * Verify that the TestAppender has received the expected
      +151      * number of messages. This assumes that:
      +152      * <ul>
      +153      * <li>setUpTestAppender has been called
      +154      * <li>logPlainMessages or logExceptionMessages has been
      +155      * called to log a known number of messages at known levels.
      +156      * </ul>
      +157      * 
      +158      * @param logEvents is the list of log events received.
      +159      * 
      +160      * @param thrown False if logPlainMessages was called
      +161      * (ie the TestAppender is expected to have received
      +162      * logevents with no associated exception info). True if
      +163      * logExceptionMessages was called.
      +164      */
      +165     private void checkLoggingEvents(List logEvents, boolean thrown) {
      +166         LogEvent ev;
      +167         
      +168         assertEquals("Unexpected number of log events", 4, logEvents.size());
      +169         
      +170         ev = (LogEvent) logEvents.get(0);
      +171         assertEquals("Info message expected", "info", ev.msg);
      +172         assertEquals("Info level expected", "INFO", ev.level);
      +173         assertEquals("Exception data incorrect", (ev.throwable!=null), thrown);
      +174         
      +175         ev = (LogEvent) logEvents.get(1);
      +176         assertEquals("Warn message expected", "warn", ev.msg);
      +177         assertEquals("Warn level expected", "WARN", ev.level);
      +178         assertEquals("Exception data incorrect", (ev.throwable!=null), thrown);
      +179         
      +180         ev = (LogEvent) logEvents.get(2);
      +181         assertEquals("Error message expected", "error", ev.msg);
      +182         assertEquals("Error level expected", "ERROR", ev.level);
      +183         assertEquals("Exception data incorrect", (ev.throwable!=null), thrown);
      +184         
      +185         ev = (LogEvent) logEvents.get(3);
      +186         assertEquals("Fatal message expected", "fatal", ev.msg);
      +187         assertEquals("Fatal level expected", "FATAL", ev.level);
      +188         assertEquals("Exception data incorrect", (ev.throwable!=null), thrown);
      +189     }
      +190 
      +191 
      +192     /**
      +193      * Log plain messages.
      +194      */
      +195     private void logPlainMessages(Log log) {
      +196         log.trace("trace"); // Should not actually get logged
      +197         log.debug("debug"); // Should not actually get logged
      +198         log.info("info");
      +199         log.warn("warn");
      +200         log.error("error");
      +201         log.fatal("fatal");
      +202     }
      +203 
      +204     /**
      +205      * Log messages with exceptions
      +206      */
      +207     private void logExceptionMessages(Log log) {
      +208         Throwable t = new DummyException();
      +209         log.trace("trace", t); // Should not actually get logged
      +210         log.debug("debug", t); // Should not actually get logged
      +211         log.info("info", t);
      +212         log.warn("warn", t);
      +213         log.error("error", t);
      +214         log.fatal("fatal", t);
      +215     }
      +216 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ApiClasspathStandardTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ApiClasspathStandardTestCase.html new file mode 100644 index 0000000..d294296 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ApiClasspathStandardTestCase.html @@ -0,0 +1,65 @@ + + + + +ApiClasspathStandardTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j.log4j12;
      +19  
      +20  import junit.framework.Test;
      +21  
      +22  import org.apache.commons.logging.PathableClassLoader;
      +23  import org.apache.commons.logging.PathableTestSuite;
      +24  
      +25  
      +26  /**
      +27   * Tests for Log4J logging that emulate a webapp running within
      +28   * a container where the commons-logging-api jar file is in
      +29   * the parent classpath and commons-logging.jar is in the child.
      +30   */
      +31  
      +32  public class ApiClasspathStandardTestCase {
      +33  
      +34      /**
      +35       * Return the tests included in this test suite.
      +36       */
      +37      public static Test suite() throws Exception {
      +38          PathableClassLoader parent = new PathableClassLoader(null);
      +39          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +40          parent.addLogicalLib("commons-logging-api");
      +41  
      +42          PathableClassLoader child = new PathableClassLoader(parent);
      +43          child.addLogicalLib("log4j12");
      +44          child.addLogicalLib("commons-logging");
      +45          child.addLogicalLib("testclasses");
      +46  
      +47          Class testClass = child.loadClass(
      +48              "org.apache.commons.logging.log4j.log4j12.Log4j12StandardTests");
      +49          return new PathableTestSuite(testClass, child);
      +50      }
      +51  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/AppClasspathStandardTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/AppClasspathStandardTestCase.html new file mode 100644 index 0000000..aedf5a1 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/AppClasspathStandardTestCase.html @@ -0,0 +1,60 @@ + + + + +AppClasspathStandardTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j.log4j12;
      +19  
      +20  import junit.framework.Test;
      +21  
      +22  import org.apache.commons.logging.PathableClassLoader;
      +23  import org.apache.commons.logging.PathableTestSuite;
      +24  
      +25  /**
      +26   * Tests for Log4J logging when there is only one classloader and everything
      +27   * is in it, as would be the situation for a standalone application.
      +28   */
      +29  
      +30  public class AppClasspathStandardTestCase {
      +31  
      +32      /**
      +33       * Return the tests included in this test suite.
      +34       */
      +35      public static Test suite() throws Exception {
      +36          PathableClassLoader loader = new PathableClassLoader(null);
      +37          loader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +38          loader.addLogicalLib("testclasses");
      +39          loader.addLogicalLib("log4j12");
      +40          loader.addLogicalLib("commons-logging");
      +41          
      +42          Class testClass = loader.loadClass(
      +43              "org.apache.commons.logging.log4j.log4j12.Log4j12StandardTests");
      +44          return new PathableTestSuite(testClass, loader);
      +45      }
      +46  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ChildClasspathStandardTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ChildClasspathStandardTestCase.html new file mode 100644 index 0000000..e6168dd --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ChildClasspathStandardTestCase.html @@ -0,0 +1,63 @@ + + + + +ChildClasspathStandardTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j.log4j12;
      +19  
      +20  import junit.framework.Test;
      +21  
      +22  import org.apache.commons.logging.PathableClassLoader;
      +23  import org.apache.commons.logging.PathableTestSuite;
      +24  
      +25  
      +26  /**
      +27   * Tests for Log4J logging that emulate a webapp running within
      +28   * a container where all the necessary libs are in the child.
      +29   */
      +30  
      +31  public class ChildClasspathStandardTestCase {
      +32  
      +33      /**
      +34       * Return the tests included in this test suite.
      +35       */
      +36      public static Test suite() throws Exception {
      +37          PathableClassLoader parent = new PathableClassLoader(null);
      +38          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +39  
      +40          PathableClassLoader child = new PathableClassLoader(parent);
      +41          child.addLogicalLib("testclasses");
      +42          child.addLogicalLib("log4j12");
      +43          child.addLogicalLib("commons-logging");
      +44          
      +45          Class testClass = child.loadClass(
      +46              "org.apache.commons.logging.log4j.log4j12.Log4j12StandardTests");
      +47          return new PathableTestSuite(testClass, child);
      +48      }
      +49  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/Log4j12StandardTests.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/Log4j12StandardTests.html new file mode 100644 index 0000000..2f0dd18 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/Log4j12StandardTests.html @@ -0,0 +1,56 @@ + + + + +Log4j12StandardTests xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j.log4j12;
      +19  
      +20  import java.util.List;
      +21  
      +22  import org.apache.commons.logging.log4j.StandardTests;
      +23  import org.apache.log4j.Level;
      +24  import org.apache.log4j.Logger;
      +25  
      +26  /**
      +27   * A concrete class that runs the standard tests, and is compiled
      +28   * specifically against log4j12. The parent class can't call any
      +29   * log4j methods at all as that would mean it has to be compiled
      +30   * against a particular version of log4j.
      +31   */
      +32  
      +33  public class Log4j12StandardTests extends StandardTests {
      +34  
      +35      public void setUpTestAppender(List logEvents) {
      +36          TestAppender appender = new TestAppender(logEvents);
      +37          Logger rootLogger = Logger.getRootLogger();
      +38          rootLogger.removeAllAppenders();
      +39          rootLogger.addAppender(appender);
      +40          rootLogger.setLevel(Level.INFO);
      +41      }
      +42  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ParentClasspathStandardTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ParentClasspathStandardTestCase.html new file mode 100644 index 0000000..e8414da --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/ParentClasspathStandardTestCase.html @@ -0,0 +1,62 @@ + + + + +ParentClasspathStandardTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j.log4j12;
      +19  
      +20  import junit.framework.Test;
      +21  
      +22  import org.apache.commons.logging.PathableClassLoader;
      +23  import org.apache.commons.logging.PathableTestSuite;
      +24  
      +25  /**
      +26   * Tests for Log4J logging that emulate a webapp running within
      +27   * a container where all the necessary libs are in the parent.
      +28   */
      +29  
      +30  public class ParentClasspathStandardTestCase {
      +31  
      +32      /**
      +33       * Return the tests included in this test suite.
      +34       */
      +35      public static Test suite() throws Exception {
      +36          PathableClassLoader parent = new PathableClassLoader(null);
      +37          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +38          parent.addLogicalLib("commons-logging");
      +39          parent.addLogicalLib("log4j12");
      +40  
      +41          PathableClassLoader child = new PathableClassLoader(parent);
      +42          child.addLogicalLib("testclasses");
      +43          
      +44          Class testClass = child.loadClass(
      +45              "org.apache.commons.logging.log4j.log4j12.Log4j12StandardTests");
      +46          return new PathableTestSuite(testClass, child);
      +47      }
      +48  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/TestAppender.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/TestAppender.html new file mode 100644 index 0000000..5b3a931 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/TestAppender.html @@ -0,0 +1,94 @@ + + + + +TestAppender xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.log4j.log4j12;
      +19  
      +20  
      +21  import java.util.List;
      +22  
      +23  import org.apache.commons.logging.log4j.StandardTests;
      +24  import org.apache.log4j.AppenderSkeleton;
      +25  import org.apache.log4j.spi.LoggingEvent;
      +26  
      +27  /**
      +28   * A custom implementation of <code>org.apache.log4j.Appender</code> which
      +29   * converts the log4j-specific log event record into a representation that
      +30   * doesn't have a dependency on log4j and stores that new representation into
      +31   * an external list.
      +32   */
      +33  
      +34  public class TestAppender extends AppenderSkeleton {
      +35  
      +36      /**
      +37       * Constructor.
      +38       */
      +39      public TestAppender(List logEvents) {
      +40          events = logEvents;
      +41      }
      +42  
      +43      // ----------------------------------------------------- Instance Variables
      +44  
      +45  
      +46      // The set of logged events for this appender
      +47      private List events;
      +48  
      +49  
      +50      // ------------------------------------------------------- Appender Methods
      +51  
      +52      protected void append(LoggingEvent event) {
      +53          StandardTests.LogEvent lev = new StandardTests.LogEvent();
      +54          
      +55          lev.level = event.getLevel().toString();
      +56  
      +57          if (event.getMessage() == null)
      +58              lev.msg = null;
      +59          else
      +60              lev.msg = event.getMessage().toString();
      +61          
      +62          if (event.getThrowableInformation() == null)
      +63              lev.throwable = null;
      +64          else
      +65              lev.throwable = event.getThrowableInformation().getThrowable();
      +66  
      +67          events.add(lev);
      +68      }
      +69  
      +70  
      +71      public void close() {
      +72      }
      +73  
      +74  
      +75      public boolean requiresLayout() {
      +76          return (false);
      +77      }
      +78  
      +79  
      +80  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-frame.html new file mode 100644 index 0000000..5bcb0b4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-frame.html @@ -0,0 +1,39 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.log4j.log4j12 + + + + +

      + org.apache.commons.logging.log4j.log4j12 +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-summary.html new file mode 100644 index 0000000..1d4568b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/log4j12/package-summary.html @@ -0,0 +1,92 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.log4j.log4j12 + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.log4j.log4j12

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + ApiClasspathStandardTestCase +
      + AppClasspathStandardTestCase +
      + ChildClasspathStandardTestCase +
      + Log4j12StandardTests +
      + ParentClasspathStandardTestCase +
      + TestAppender +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-frame.html new file mode 100644 index 0000000..352d6a7 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-frame.html @@ -0,0 +1,27 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.log4j + + + + +

      + org.apache.commons.logging.log4j +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-summary.html new file mode 100644 index 0000000..bfbc07a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/log4j/package-summary.html @@ -0,0 +1,72 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.log4j + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.log4j

      + + + + + + + + + + + + + + + +
      Class Summary
      + LogEvent +
      + StandardTests +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/StandardTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/StandardTestCase.html new file mode 100644 index 0000000..0373c99 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/StandardTestCase.html @@ -0,0 +1,180 @@ + + + + +StandardTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.logkit;
      +19  
      +20  
      +21  import java.io.ByteArrayInputStream;
      +22  import java.io.ByteArrayOutputStream;
      +23  import java.io.ObjectInputStream;
      +24  import java.io.ObjectOutputStream;
      +25  
      +26  import junit.framework.Test;
      +27  
      +28  import org.apache.commons.logging.AbstractLogTest;
      +29  import org.apache.commons.logging.Log;
      +30  import org.apache.commons.logging.LogFactory;
      +31  import org.apache.commons.logging.PathableClassLoader;
      +32  import org.apache.commons.logging.PathableTestSuite;
      +33  import org.apache.commons.logging.impl.LogKitLogger;
      +34  
      +35  /**
      +36   * Basic tests for Avalon LogKit logger adapter.
      +37   */
      +38  
      +39  public class StandardTestCase extends AbstractLogTest {
      +40  
      +41  
      +42      // ----------------------------------------------------- Instance Variables
      +43  
      +44  
      +45      /**
      +46       * <p>The {@link LogFactory} implementation we have selected.</p>
      +47       */
      +48      protected LogFactory factory = null;
      +49  
      +50  
      +51      /**
      +52       * <p>The {@link Log} implementation we have selected.</p>
      +53       */
      +54      protected Log log = null;
      +55  
      +56  
      +57      // ------------------------------------------- JUnit Infrastructure Methods
      +58  
      +59  
      +60      /**
      +61       * Return the tests included in this test suite.
      +62       */
      +63      public static Test suite() throws Exception {
      +64          Class thisClass = StandardTestCase.class;
      +65  
      +66          PathableClassLoader loader = new PathableClassLoader(null);
      +67          loader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +68          loader.addLogicalLib("testclasses");
      +69          loader.addLogicalLib("commons-logging");
      +70          loader.addLogicalLib("logkit");
      +71  
      +72          Class testClass = loader.loadClass(thisClass.getName());
      +73          return new PathableTestSuite(testClass, loader);
      +74      }
      +75  
      +76      /**
      +77       * Set up instance variables required by this test case.
      +78       */
      +79      public void setUp() throws Exception {
      +80          LogFactory.releaseAll();
      +81  
      +82          System.setProperty(
      +83                  "org.apache.commons.logging.Log",
      +84                  "org.apache.commons.logging.impl.LogKitLogger");
      +85  
      +86          factory = LogFactory.getFactory();
      +87          log = LogFactory.getLog("TestLogger");
      +88      }
      +89  
      +90      /**
      +91       * Tear down instance variables required by this test case.
      +92       */
      +93      public void tearDown() {
      +94          log = null;
      +95          factory = null;
      +96          LogFactory.releaseAll();
      +97      }
      +98  
      +99      // ----------------------------------------------------------- Test Methods
      +100 
      +101     /**
      +102      * Override the abstract method from the parent class so that the
      +103      * inherited tests can access the right Log object type. 
      +104      */
      +105     public Log getLogObject()
      +106     {
      +107         return new LogKitLogger(this.getClass().getName());
      +108     }
      +109 
      +110     // Test pristine LogFactory instance
      +111     public void testPristineFactory() {
      +112 
      +113         assertNotNull("LogFactory exists", factory);
      +114         assertEquals("LogFactory class",
      +115                      "org.apache.commons.logging.impl.LogFactoryImpl",
      +116                      factory.getClass().getName());
      +117 
      +118         String names[] = factory.getAttributeNames();
      +119         assertNotNull("Names exists", names);
      +120         assertEquals("Names empty", 0, names.length);
      +121     }
      +122 
      +123     // Test pristine Log instance
      +124     public void testPristineLog() {
      +125         checkStandard();
      +126     }
      +127 
      +128     // Test Serializability of standard instance
      +129     public void testSerializable() throws Exception {
      +130         checkStandard();
      +131 
      +132         // Serialize and deserialize the instance
      +133         ByteArrayOutputStream baos = new ByteArrayOutputStream();
      +134         ObjectOutputStream oos = new ObjectOutputStream(baos);
      +135         oos.writeObject(log);
      +136         oos.close();
      +137         ByteArrayInputStream bais =
      +138             new ByteArrayInputStream(baos.toByteArray());
      +139         ObjectInputStream ois = new ObjectInputStream(bais);
      +140         log = (Log) ois.readObject();
      +141         ois.close();
      +142 
      +143         checkStandard();
      +144     }
      +145 
      +146 
      +147     // -------------------------------------------------------- Support Methods
      +148 
      +149     // Check the standard log instance
      +150     protected void checkStandard() {
      +151 
      +152         assertNotNull("Log exists", log);
      +153         assertEquals("Log class",
      +154                      "org.apache.commons.logging.impl.LogKitLogger",
      +155                      log.getClass().getName());
      +156 
      +157         // Can we call level checkers with no exceptions?
      +158         // Note that by default *everything* is enabled for LogKit
      +159         assertTrue(log.isTraceEnabled());
      +160         assertTrue(log.isDebugEnabled());
      +161         assertTrue(log.isInfoEnabled());
      +162         assertTrue(log.isWarnEnabled());
      +163         assertTrue(log.isErrorEnabled());
      +164         assertTrue(log.isFatalEnabled());
      +165     }
      +166 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-frame.html new file mode 100644 index 0000000..b02deb0 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-frame.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.logkit + + + + +

      + org.apache.commons.logging.logkit +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-summary.html new file mode 100644 index 0000000..ae0deb5 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/logkit/package-summary.html @@ -0,0 +1,67 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.logkit + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.logkit

      + + + + + + + + + + + + +
      Class Summary
      + StandardTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/NoOpLogTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/NoOpLogTestCase.html new file mode 100644 index 0000000..763dd64 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/NoOpLogTestCase.html @@ -0,0 +1,117 @@ + + + + +NoOpLogTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17   
      +18  package org.apache.commons.logging.noop;
      +19  
      +20  import java.io.ByteArrayInputStream;
      +21  import java.io.ByteArrayOutputStream;
      +22  import java.io.ObjectInputStream;
      +23  import java.io.ObjectOutputStream;
      +24  
      +25  import org.apache.commons.logging.Log;
      +26  import org.apache.commons.logging.LogFactory;
      +27  import org.apache.commons.logging.impl.NoOpLog;
      +28  import org.apache.commons.logging.AbstractLogTest;
      +29  
      +30  /**
      +31   * Tests for NoOpLog logging adapter.
      +32   * <p>
      +33   * This simply applies the tests defined in AbstractLogTest to this class.
      +34   */
      +35  public class NoOpLogTestCase extends AbstractLogTest
      +36  {
      +37      /**
      +38       * Set up instance variables required by this test case.
      +39       */
      +40      public void setUp() throws Exception {
      +41          LogFactory.releaseAll();
      +42  
      +43          System.setProperty(
      +44                  "org.apache.commons.logging.Log",
      +45                  "org.apache.commons.logging.impl.NoOpLog");
      +46      }
      +47  
      +48      /**
      +49       * Tear down instance variables required by this test case.
      +50       */
      +51      public void tearDown() {
      +52          LogFactory.releaseAll();
      +53          System.getProperties().remove("org.apache.commons.logging.Log");
      +54      }
      +55      
      +56      /**
      +57       * Override the abstract method from the parent class so that the
      +58       * inherited tests can access the right Log object type. 
      +59       */
      +60      public Log getLogObject()
      +61      {
      +62          return (Log) new NoOpLog(this.getClass().getName());
      +63      }
      +64  
      +65      // Test Serializability of standard instance
      +66      public void testSerializable() throws Exception {
      +67          Log log = LogFactory.getLog(this.getClass().getName());
      +68          checkLog(log);
      +69  
      +70          // Serialize and deserialize the instance
      +71          ByteArrayOutputStream baos = new ByteArrayOutputStream();
      +72          ObjectOutputStream oos = new ObjectOutputStream(baos);
      +73          oos.writeObject(log);
      +74          oos.close();
      +75          ByteArrayInputStream bais =
      +76              new ByteArrayInputStream(baos.toByteArray());
      +77          ObjectInputStream ois = new ObjectInputStream(bais);
      +78          log = (Log) ois.readObject();
      +79          ois.close();
      +80  
      +81          checkLog(log);
      +82      }
      +83  
      +84  
      +85      // -------------------------------------------------------- Support Methods
      +86  
      +87      private void checkLog(Log log) {
      +88  
      +89          assertNotNull("Log exists", log);
      +90          assertEquals("Log class",
      +91                       "org.apache.commons.logging.impl.NoOpLog",
      +92                       log.getClass().getName());
      +93  
      +94          // Can we call level checkers with no exceptions?
      +95          // Note that *everything* is permanently disabled for NoOpLog
      +96          assertFalse(log.isTraceEnabled());
      +97          assertFalse(log.isDebugEnabled());
      +98          assertFalse(log.isInfoEnabled());
      +99          assertFalse(log.isWarnEnabled());
      +100         assertFalse(log.isErrorEnabled());
      +101         assertFalse(log.isFatalEnabled());
      +102     }
      +103 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-frame.html new file mode 100644 index 0000000..6a54465 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-frame.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.noop + + + + +

      + org.apache.commons.logging.noop +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-summary.html new file mode 100644 index 0000000..75ba7d3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/noop/package-summary.html @@ -0,0 +1,67 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.noop + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.noop

      + + + + + + + + + + + + +
      Class Summary
      + NoOpLogTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-frame.html new file mode 100644 index 0000000..e411407 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-frame.html @@ -0,0 +1,63 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging + + + + +

      + org.apache.commons.logging +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-summary.html new file mode 100644 index 0000000..3cac426 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/package-summary.html @@ -0,0 +1,132 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + AbstractLogTest +
      + AltHashtable +
      + AltHashtableTestCase +
      + AppClassLoader +
      + BadHashtablePropertyTestCase +
      + BasicOperationsTestCase +
      + DummyException +
      + LoadTestCase +
      + LogTestCase +
      + NullClassLoaderTestCase +
      + PathableClassLoader +
      + PathableTestSuite +
      + SimpleLogTestCase +
      + UserClass +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ChildFirstTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ChildFirstTestCase.html new file mode 100644 index 0000000..21b234d --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ChildFirstTestCase.html @@ -0,0 +1,331 @@ + + + + +ChildFirstTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging.pathable;
      +18  
      +19  import java.net.URL;
      +20  import java.util.ArrayList;
      +21  import java.util.Arrays;
      +22  import java.util.Enumeration;
      +23  import java.util.HashSet;
      +24  import java.util.Set;
      +25  
      +26  import junit.framework.Test;
      +27  import junit.framework.TestCase;
      +28  
      +29  import org.apache.commons.logging.PathableClassLoader;
      +30  import org.apache.commons.logging.PathableTestSuite;
      +31  
      +32  /**
      +33   * Tests for the PathableTestSuite and PathableClassLoader functionality,
      +34   * where lookup order for the PathableClassLoader is child-first.
      +35   * <p>
      +36   * These tests assume:
      +37   * <ul>
      +38   * <li>junit is in system classpath
      +39   * <li>nothing else is in system classpath
      +40   * </ul>
      +41   */
      +42  
      +43  public class ChildFirstTestCase extends TestCase {
      +44      
      +45      /**
      +46       * Set up a custom classloader hierarchy for this test case.
      +47       * The hierarchy is:
      +48       * <ul>
      +49       * <li> contextloader: child-first.
      +50       * <li> childloader: child-first, used to load test case.
      +51       * <li> parentloader: child-first, parent is the bootclassloader.
      +52       * </ul>
      +53       */
      +54      public static Test suite() throws Exception {
      +55          Class thisClass = ChildFirstTestCase.class;
      +56          ClassLoader thisClassLoader = thisClass.getClassLoader();
      +57          
      +58          // Make the parent a direct child of the bootloader to hide all
      +59          // other classes in the system classpath
      +60          PathableClassLoader parent = new PathableClassLoader(null);
      +61          parent.setParentFirst(false);
      +62          
      +63          // Make the junit classes visible as a special case, as junit
      +64          // won't be able to call this class at all without this. The
      +65          // junit classes must be visible from the classloader that loaded
      +66          // this class, so use that as the source for future access to classes
      +67          // from the junit package.
      +68          parent.useExplicitLoader("junit.", thisClassLoader);
      +69          
      +70          // Make the commons-logging.jar classes visible via the parent
      +71          parent.addLogicalLib("commons-logging");
      +72          
      +73          // Create a child classloader to load the test case through
      +74          PathableClassLoader child = new PathableClassLoader(parent);
      +75          child.setParentFirst(false);
      +76          
      +77          // Obviously, the child classloader needs to have the test classes
      +78          // in its path!
      +79          child.addLogicalLib("testclasses");
      +80          child.addLogicalLib("commons-logging-adapters");
      +81          
      +82          // Create a third classloader to be the context classloader.
      +83          PathableClassLoader context = new PathableClassLoader(child);
      +84          context.setParentFirst(false);
      +85  
      +86          // reload this class via the child classloader
      +87          Class testClass = child.loadClass(thisClass.getName());
      +88          
      +89          // and return our custom TestSuite class
      +90          return new PathableTestSuite(testClass, context);
      +91      }
      +92  
      +93      /**
      +94       * Utility method to return the set of all classloaders in the
      +95       * parent chain starting from the one that loaded the class for
      +96       * this object instance.
      +97       */
      +98      private Set getAncestorCLs() {
      +99          Set s = new HashSet();
      +100         ClassLoader cl = this.getClass().getClassLoader();
      +101         while (cl != null) {
      +102             s.add(cl);
      +103             cl = cl.getParent();
      +104         }
      +105         return s;
      +106     }
      +107 
      +108     /**
      +109      * Test that the classloader hierarchy is as expected, and that
      +110      * calling loadClass() on various classloaders works as expected.
      +111      * Note that for this test case, parent-first classloading is
      +112      * in effect.
      +113      */
      +114     public void testPaths() throws Exception {
      +115         // the context classloader is not expected to be null
      +116         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +117         assertNotNull("Context classloader is null", contextLoader);
      +118         assertEquals("Context classloader has unexpected type",
      +119                 PathableClassLoader.class.getName(),
      +120                 contextLoader.getClass().getName());
      +121         
      +122         // the classloader that loaded this class is obviously not null
      +123         ClassLoader thisLoader = this.getClass().getClassLoader();
      +124         assertNotNull("thisLoader is null", thisLoader);
      +125         assertEquals("thisLoader has unexpected type",
      +126                 PathableClassLoader.class.getName(),
      +127                 thisLoader.getClass().getName());
      +128         
      +129         // the suite method specified that the context classloader's parent
      +130         // is the loader that loaded this test case.
      +131         assertSame("Context classloader is not child of thisLoader",
      +132                 thisLoader, contextLoader.getParent());
      +133 
      +134         // thisLoader's parent should be available
      +135         ClassLoader parentLoader = thisLoader.getParent();
      +136         assertNotNull("Parent classloader is null", parentLoader);
      +137         assertEquals("Parent classloader has unexpected type",
      +138                 PathableClassLoader.class.getName(),
      +139                 parentLoader.getClass().getName());
      +140         
      +141         // parent should have a parent of null
      +142         assertNull("Parent classloader has non-null parent", parentLoader.getParent());
      +143 
      +144         // getSystemClassloader is not a PathableClassLoader; it's of a
      +145         // built-in type. This also verifies that system classloader is none of
      +146         // (context, child, parent).
      +147         ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
      +148         assertNotNull("System classloader is null", systemLoader);
      +149         assertFalse("System classloader has unexpected type",
      +150                 PathableClassLoader.class.getName().equals(
      +151                         systemLoader.getClass().getName()));
      +152 
      +153         // junit classes should be visible; their classloader is not
      +154         // in the hierarchy of parent classloaders for this class,
      +155         // though it is accessable due to trickery in the PathableClassLoader.
      +156         Class junitTest = contextLoader.loadClass("junit.framework.Test");
      +157         Set ancestorCLs = getAncestorCLs();
      +158         assertFalse("Junit not loaded by ancestor classloader", 
      +159                 ancestorCLs.contains(junitTest.getClassLoader()));
      +160 
      +161         // jcl api classes should be visible only via the parent
      +162         Class logClass = contextLoader.loadClass("org.apache.commons.logging.Log");
      +163         assertSame("Log class not loaded via parent",
      +164                 logClass.getClassLoader(), parentLoader);
      +165 
      +166         // jcl adapter classes should be visible via both parent and child. However
      +167         // as the classloaders are child-first we should see the child one.
      +168         Class log4jClass = contextLoader.loadClass("org.apache.commons.logging.impl.Log4JLogger");
      +169         assertSame("Log4JLogger not loaded via child", 
      +170                 log4jClass.getClassLoader(), thisLoader);
      +171         
      +172         // test classes should be visible via the child only
      +173         Class testClass = contextLoader.loadClass("org.apache.commons.logging.PathableTestSuite");
      +174         assertSame("PathableTestSuite not loaded via child", 
      +175                 testClass.getClassLoader(), thisLoader);
      +176         
      +177         // test loading of class that is not available
      +178         try {
      +179             Class noSuchClass = contextLoader.loadClass("no.such.class");
      +180             fail("Class no.such.class is unexpectedly available");
      +181             assertNotNull(noSuchClass); // silence warning about unused var
      +182         } catch(ClassNotFoundException ex) {
      +183             // ok
      +184         }
      +185 
      +186         // String class classloader is null
      +187         Class stringClass = contextLoader.loadClass("java.lang.String");
      +188         assertNull("String class classloader is not null!",
      +189                 stringClass.getClassLoader());
      +190     }
      +191     
      +192     /**
      +193      * Test that the various flavours of ClassLoader.getResource work as expected.
      +194      */
      +195     public void testResource() {
      +196         URL resource;
      +197         
      +198         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +199         ClassLoader childLoader = contextLoader.getParent();
      +200         
      +201         // getResource where it doesn't exist
      +202         resource = childLoader.getResource("nosuchfile");
      +203         assertNull("Non-null URL returned for invalid resource name", resource);
      +204 
      +205         // getResource where it is accessable only to parent classloader
      +206         resource = childLoader.getResource("org/apache/commons/logging/Log.class");
      +207         assertNotNull("Unable to locate Log.class resource", resource);
      +208         
      +209         // getResource where it is accessable only to child classloader
      +210         resource = childLoader.getResource("org/apache/commons/logging/PathableTestSuite.class");
      +211         assertNotNull("Unable to locate PathableTestSuite.class resource", resource);
      +212 
      +213         // getResource where it is accessable to both classloaders. The one visible
      +214         // to the child should be returned. The URL returned will be of form
      +215         //  jar:file:/x/y.jar!path/to/resource. The filename part should include the jarname
      +216         // of form commons-logging-adapters-nnnn.jar, not commons-logging-nnnn.jar
      +217         resource = childLoader.getResource("org/apache/commons/logging/impl/Log4JLogger.class");
      +218         assertNotNull("Unable to locate Log4JLogger.class resource", resource);
      +219         assertTrue("Incorrect source for Log4JLogger class",
      +220                 resource.toString().indexOf("/commons-logging-adapters-1.") > 0);
      +221     }
      +222     
      +223     /**
      +224      * Test that the various flavours of ClassLoader.getResources work as expected.
      +225      */
      +226     public void testResources() throws Exception {
      +227         Enumeration resources;
      +228         URL[] urls;
      +229         
      +230         // verify the classloader hierarchy
      +231         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +232         ClassLoader childLoader = contextLoader.getParent();
      +233         ClassLoader parentLoader = childLoader.getParent();
      +234         ClassLoader bootLoader = parentLoader.getParent();
      +235         assertNull("Unexpected classloader hierarchy", bootLoader);
      +236         
      +237         // getResources where no instances exist
      +238         resources = childLoader.getResources("nosuchfile");
      +239         urls = toURLArray(resources);
      +240         assertEquals("Non-null URL returned for invalid resource name", 0, urls.length);
      +241         
      +242         // getResources where the resource only exists in the parent
      +243         resources = childLoader.getResources("org/apache/commons/logging/Log.class");
      +244         urls = toURLArray(resources);
      +245         assertEquals("Unexpected number of Log.class resources found", 1, urls.length);
      +246         
      +247         // getResources where the resource only exists in the child
      +248         resources = childLoader.getResources("org/apache/commons/logging/PathableTestSuite.class");
      +249         urls = toURLArray(resources);
      +250         assertEquals("Unexpected number of PathableTestSuite.class resources found", 1, urls.length);
      +251         
      +252         // getResources where the resource exists in both.
      +253         // resources should be returned in order (child-resource, parent-resource).
      +254         //
      +255         // IMPORTANT: due to the fact that in java 1.4 and earlier method
      +256         // ClassLoader.getResources is final it isn't possible for PathableClassLoader
      +257         // to override this. So even when child-first is enabled the resource order
      +258         // is still (parent-resources, child-resources). This test verifies the expected
      +259         // behaviour - even though it's not the desired behaviour.
      +260         
      +261         resources = childLoader.getResources("org/apache/commons/logging/impl/Log4JLogger.class");
      +262         urls = toURLArray(resources);
      +263         assertEquals("Unexpected number of Log4JLogger.class resources found", 2, urls.length);
      +264         
      +265         // There is no gaurantee about the ordering of results returned from getResources
      +266         // To make this test portable across JVMs, sort the string to give them a known order
      +267         String[] urlsToStrings = new String[2];
      +268         urlsToStrings[0] = urls[0].toString();
      +269         urlsToStrings[1] = urls[1].toString();
      +270         Arrays.sort(urlsToStrings);
      +271         assertTrue("Incorrect source for Log4JLogger class",
      +272                 urlsToStrings[0].indexOf("/commons-logging-1.") > 0);
      +273         assertTrue("Incorrect source for Log4JLogger class",
      +274                 urlsToStrings[1].indexOf("/commons-logging-adapters-1.") > 0);
      +275     }
      +276 
      +277     /**
      +278      * Utility method to convert an enumeration-of-URLs into an array of URLs.
      +279      */
      +280     private static URL[] toURLArray(Enumeration e) {
      +281         ArrayList l = new ArrayList();
      +282         while (e.hasMoreElements()) {
      +283             URL u = (URL) e.nextElement();
      +284             l.add(u);
      +285         }
      +286         URL[] tmp = new URL[l.size()];
      +287         return (URL[]) l.toArray(tmp);
      +288     }
      +289 
      +290     /**
      +291      * Test that getResourceAsStream works.
      +292      */
      +293     public void testResourceAsStream() throws Exception {
      +294         java.io.InputStream is;
      +295         
      +296         // verify the classloader hierarchy
      +297         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +298         ClassLoader childLoader = contextLoader.getParent();
      +299         ClassLoader parentLoader = childLoader.getParent();
      +300         ClassLoader bootLoader = parentLoader.getParent();
      +301         assertNull("Unexpected classloader hierarchy", bootLoader);
      +302         
      +303         // getResourceAsStream where no instances exist
      +304         is = childLoader.getResourceAsStream("nosuchfile");
      +305         assertNull("Invalid resource returned non-null stream", is);
      +306         
      +307         // getResourceAsStream where resource does exist
      +308         is = childLoader.getResourceAsStream("org/apache/commons/logging/Log.class");
      +309         assertNotNull("Null returned for valid resource", is);
      +310         is.close();
      +311         
      +312         // It would be nice to test parent-first ordering here, but that would require
      +313         // having a resource with the same name in both the parent and child loaders,
      +314         // but with different contents. That's a little tricky to set up so we'll
      +315         // skip that for now.
      +316     }
      +317 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/GeneralTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/GeneralTestCase.html new file mode 100644 index 0000000..3445939 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/GeneralTestCase.html @@ -0,0 +1,134 @@ + + + + +GeneralTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging.pathable;
      +18  
      +19  import java.net.URL;
      +20  import java.net.URLClassLoader;
      +21  
      +22  import junit.framework.Test;
      +23  import junit.framework.TestCase;
      +24  
      +25  import org.apache.commons.logging.PathableClassLoader;
      +26  import org.apache.commons.logging.PathableTestSuite;
      +27  
      +28  /**
      +29   * Tests for the PathableTestSuite class.
      +30   */
      +31  
      +32  public class GeneralTestCase extends TestCase {
      +33      
      +34      /**
      +35       * Set up a custom classloader hierarchy for this test case.
      +36       */
      +37      public static Test suite() throws Exception {
      +38          Class thisClass = GeneralTestCase.class;
      +39          ClassLoader thisClassLoader = thisClass.getClassLoader();
      +40          
      +41          PathableClassLoader loader = new PathableClassLoader(null);
      +42          loader.useExplicitLoader("junit.", thisClassLoader);
      +43          loader.addLogicalLib("testclasses");
      +44  
      +45          // reload this class via the child classloader
      +46          Class testClass = loader.loadClass(thisClass.getName());
      +47          
      +48          // and return our custom TestSuite class
      +49          return new PathableTestSuite(testClass, loader);
      +50      }
      +51      
      +52      /**
      +53       * Verify that a certain system property is not set, then set it.
      +54       */
      +55      private static void checkAndSetProperties() {
      +56          String prop = System.getProperty("no.such.property");
      +57          assertNull("no.such.property is unexpectedly defined", prop);
      +58          System.setProperty("no.such.property", "dummy value");
      +59          prop = System.getProperty("no.such.property");
      +60          assertNotNull("no.such.property is unexpectedly undefined", prop);
      +61      }
      +62      
      +63      /**
      +64       * Verify that when a test method modifies the system properties they are
      +65       * reset before the next test is run.
      +66       * <p>
      +67       * This method works in conjunction with testResetProps2. There is no
      +68       * way of knowing which test method junit will run first, but it doesn't
      +69       * matter; whichever one of them runs first will modify the system properties.
      +70       * If the PathableTestSuite isn't resetting the system properties then whichever
      +71       * of them runs second will fail. Of course if other methods are run in-between
      +72       * then those methods might also fail...
      +73       */
      +74      public void testResetProps1() {
      +75          checkAndSetProperties();
      +76      }
      +77  
      +78      /**
      +79       * See testResetProps1.
      +80       */
      +81      public void testResetProps2() {
      +82          checkAndSetProperties();
      +83      }
      +84      
      +85      /**
      +86       * Verify that the context classloader is a custom one, then reset it to
      +87       * a non-custom one.
      +88       */
      +89      private static void checkAndSetContext() {
      +90          ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +91          assertEquals("ContextLoader is of unexpected type", 
      +92                  contextLoader.getClass().getName(), 
      +93                  PathableClassLoader.class.getName());
      +94          
      +95          URL[] noUrls = new URL[0];
      +96          Thread.currentThread().setContextClassLoader(new URLClassLoader(noUrls));
      +97      }
      +98      
      +99      /**
      +100      * Verify that when a test method modifies the context classloader it is
      +101      * reset before the next test is run.
      +102      * <p>
      +103      * This method works in conjunction with testResetContext2. There is no
      +104      * way of knowing which test method junit will run first, but it doesn't
      +105      * matter; whichever one of them runs first will modify the contextClassloader.
      +106      * If the PathableTestSuite isn't resetting the contextClassLoader then whichever
      +107      * of them runs second will fail. Of course if other methods are run in-between
      +108      * then those methods might also fail...
      +109      */
      +110     public void testResetContext1() {
      +111         checkAndSetContext();
      +112     }
      +113 
      +114     /**
      +115      * See testResetContext1.
      +116      */
      +117     public void testResetContext2() {
      +118         checkAndSetContext();
      +119     }
      +120 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ParentFirstTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ParentFirstTestCase.html new file mode 100644 index 0000000..ab6d435 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/ParentFirstTestCase.html @@ -0,0 +1,322 @@ + + + + +ParentFirstTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging.pathable;
      +18  
      +19  import java.net.URL;
      +20  import java.util.ArrayList;
      +21  import java.util.Arrays;
      +22  import java.util.Enumeration;
      +23  import java.util.HashSet;
      +24  import java.util.Set;
      +25  
      +26  import junit.framework.Test;
      +27  import junit.framework.TestCase;
      +28  
      +29  import org.apache.commons.logging.PathableClassLoader;
      +30  import org.apache.commons.logging.PathableTestSuite;
      +31  
      +32  /**
      +33   * Tests for the PathableTestSuite and PathableClassLoader functionality,
      +34   * where lookup order for the PathableClassLoader is parent-first.
      +35   * <p>
      +36   * These tests assume:
      +37   * <ul>
      +38   * <li>junit is in system classpath
      +39   * <li>nothing else is in system classpath
      +40   * </ul>
      +41   */
      +42  
      +43  public class ParentFirstTestCase extends TestCase {
      +44      
      +45      /**
      +46       * Set up a custom classloader hierarchy for this test case.
      +47       * The hierarchy is:
      +48       * <ul>
      +49       * <li> contextloader: parent-first.
      +50       * <li> childloader: parent-first, used to load test case.
      +51       * <li> parentloader: parent-first, parent is the bootclassloader.
      +52       * </ul>
      +53       */
      +54      public static Test suite() throws Exception {
      +55          Class thisClass = ParentFirstTestCase.class;
      +56          ClassLoader thisClassLoader = thisClass.getClassLoader();
      +57  
      +58          // Make the parent a direct child of the bootloader to hide all
      +59          // other classes in the system classpath
      +60          PathableClassLoader parent = new PathableClassLoader(null);
      +61          
      +62          // Make the junit classes visible as a special case, as junit
      +63          // won't be able to call this class at all without this. The
      +64          // junit classes must be visible from the classloader that loaded
      +65          // this class, so use that as the source for future access to classes
      +66          // from the junit package.
      +67          parent.useExplicitLoader("junit.", thisClassLoader);
      +68          
      +69          // make the commons-logging.jar classes visible via the parent
      +70          parent.addLogicalLib("commons-logging");
      +71          
      +72          // create a child classloader to load the test case through
      +73          PathableClassLoader child = new PathableClassLoader(parent);
      +74          
      +75          // obviously, the child classloader needs to have the test classes
      +76          // in its path!
      +77          child.addLogicalLib("testclasses");
      +78          child.addLogicalLib("commons-logging-adapters");
      +79          
      +80          // create a third classloader to be the context classloader.
      +81          PathableClassLoader context = new PathableClassLoader(child);
      +82  
      +83          // reload this class via the child classloader
      +84          Class testClass = child.loadClass(thisClass.getName());
      +85          
      +86          // and return our custom TestSuite class
      +87          return new PathableTestSuite(testClass, context);
      +88      }
      +89      
      +90      /**
      +91       * Utility method to return the set of all classloaders in the
      +92       * parent chain starting from the one that loaded the class for
      +93       * this object instance.
      +94       */
      +95      private Set getAncestorCLs() {
      +96          Set s = new HashSet();
      +97          ClassLoader cl = this.getClass().getClassLoader();
      +98          while (cl != null) {
      +99              s.add(cl);
      +100             cl = cl.getParent();
      +101         }
      +102         return s;
      +103     }
      +104 
      +105     /**
      +106      * Test that the classloader hierarchy is as expected, and that
      +107      * calling loadClass() on various classloaders works as expected.
      +108      * Note that for this test case, parent-first classloading is
      +109      * in effect.
      +110      */
      +111     public void testPaths() throws Exception {
      +112         // the context classloader is not expected to be null
      +113         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +114         assertNotNull("Context classloader is null", contextLoader);
      +115         assertEquals("Context classloader has unexpected type",
      +116                 PathableClassLoader.class.getName(),
      +117                 contextLoader.getClass().getName());
      +118         
      +119         // the classloader that loaded this class is obviously not null
      +120         ClassLoader thisLoader = this.getClass().getClassLoader();
      +121         assertNotNull("thisLoader is null", thisLoader);
      +122         assertEquals("thisLoader has unexpected type",
      +123                 PathableClassLoader.class.getName(),
      +124                 thisLoader.getClass().getName());
      +125         
      +126         // the suite method specified that the context classloader's parent
      +127         // is the loader that loaded this test case.
      +128         assertSame("Context classloader is not child of thisLoader",
      +129                 thisLoader, contextLoader.getParent());
      +130 
      +131         // thisLoader's parent should be available
      +132         ClassLoader parentLoader = thisLoader.getParent();
      +133         assertNotNull("Parent classloader is null", parentLoader);
      +134         assertEquals("Parent classloader has unexpected type",
      +135                 PathableClassLoader.class.getName(),
      +136                 parentLoader.getClass().getName());
      +137         
      +138         // parent should have a parent of null
      +139         assertNull("Parent classloader has non-null parent", parentLoader.getParent());
      +140 
      +141         // getSystemClassloader is not a PathableClassLoader; it's of a
      +142         // built-in type. This also verifies that system classloader is none of
      +143         // (context, child, parent).
      +144         ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
      +145         assertNotNull("System classloader is null", systemLoader);
      +146         assertFalse("System classloader has unexpected type",
      +147                 PathableClassLoader.class.getName().equals(
      +148                         systemLoader.getClass().getName()));
      +149 
      +150         // junit classes should be visible; their classloader is not
      +151         // in the hierarchy of parent classloaders for this class,
      +152         // though it is accessable due to trickery in the PathableClassLoader.
      +153         Class junitTest = contextLoader.loadClass("junit.framework.Test");
      +154         Set ancestorCLs = getAncestorCLs();
      +155         assertFalse("Junit not loaded by ancestor classloader", 
      +156                 ancestorCLs.contains(junitTest.getClassLoader()));
      +157 
      +158         // jcl api classes should be visible only via the parent
      +159         Class logClass = contextLoader.loadClass("org.apache.commons.logging.Log");
      +160         assertSame("Log class not loaded via parent",
      +161                 logClass.getClassLoader(), parentLoader);
      +162 
      +163         // jcl adapter classes should be visible via both parent and child. However
      +164         // as the classloaders are parent-first we should see the parent one.
      +165         Class log4jClass = contextLoader.loadClass("org.apache.commons.logging.impl.Log4JLogger");
      +166         assertSame("Log4JLogger not loaded via parent", 
      +167                 log4jClass.getClassLoader(), parentLoader);
      +168         
      +169         // test classes should be visible via the child only
      +170         Class testClass = contextLoader.loadClass("org.apache.commons.logging.PathableTestSuite");
      +171         assertSame("PathableTestSuite not loaded via child", 
      +172                 testClass.getClassLoader(), thisLoader);
      +173         
      +174         // test loading of class that is not available
      +175         try {
      +176             Class noSuchClass = contextLoader.loadClass("no.such.class");
      +177             fail("Class no.such.class is unexpectedly available");
      +178             assertNotNull(noSuchClass); // silence warning about unused var
      +179         } catch(ClassNotFoundException ex) {
      +180             // ok
      +181         }
      +182 
      +183         // String class classloader is null
      +184         Class stringClass = contextLoader.loadClass("java.lang.String");
      +185         assertNull("String class classloader is not null!",
      +186                 stringClass.getClassLoader());
      +187     }
      +188     
      +189     /**
      +190      * Test that the various flavours of ClassLoader.getResource work as expected.
      +191      */
      +192     public void testResource() {
      +193         URL resource;
      +194         
      +195         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +196         ClassLoader childLoader = contextLoader.getParent();
      +197         
      +198         // getResource where it doesn't exist
      +199         resource = childLoader.getResource("nosuchfile");
      +200         assertNull("Non-null URL returned for invalid resource name", resource);
      +201 
      +202         // getResource where it is accessable only to parent classloader
      +203         resource = childLoader.getResource("org/apache/commons/logging/Log.class");
      +204         assertNotNull("Unable to locate Log.class resource", resource);
      +205         
      +206         // getResource where it is accessable only to child classloader
      +207         resource = childLoader.getResource("org/apache/commons/logging/PathableTestSuite.class");
      +208         assertNotNull("Unable to locate PathableTestSuite.class resource", resource);
      +209 
      +210         // getResource where it is accessable to both classloaders. The one visible
      +211         // to the parent should be returned. The URL returned will be of form
      +212         //  jar:file:/x/y.jar!path/to/resource. The filename part should include the jarname
      +213         // of form commons-logging-nnnn.jar, not commons-logging-adapters-nnnn.jar
      +214         resource = childLoader.getResource("org/apache/commons/logging/impl/Log4JLogger.class");
      +215         assertNotNull("Unable to locate Log4JLogger.class resource", resource);
      +216         assertTrue("Incorrect source for Log4JLogger class",
      +217                 resource.toString().indexOf("/commons-logging-1.") > 0);
      +218     }
      +219     
      +220     /**
      +221      * Test that the various flavours of ClassLoader.getResources work as expected.
      +222      */
      +223     public void testResources() throws Exception {
      +224         Enumeration resources;
      +225         URL[] urls;
      +226         
      +227         // verify the classloader hierarchy
      +228         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +229         ClassLoader childLoader = contextLoader.getParent();
      +230         ClassLoader parentLoader = childLoader.getParent();
      +231         ClassLoader bootLoader = parentLoader.getParent();
      +232         assertNull("Unexpected classloader hierarchy", bootLoader);
      +233         
      +234         // getResources where no instances exist
      +235         resources = childLoader.getResources("nosuchfile");
      +236         urls = toURLArray(resources);
      +237         assertEquals("Non-null URL returned for invalid resource name", 0, urls.length);
      +238         
      +239         // getResources where the resource only exists in the parent
      +240         resources = childLoader.getResources("org/apache/commons/logging/Log.class");
      +241         urls = toURLArray(resources);
      +242         assertEquals("Unexpected number of Log.class resources found", 1, urls.length);
      +243         
      +244         // getResources where the resource only exists in the child
      +245         resources = childLoader.getResources("org/apache/commons/logging/PathableTestSuite.class");
      +246         urls = toURLArray(resources);
      +247         assertEquals("Unexpected number of PathableTestSuite.class resources found", 1, urls.length);
      +248         
      +249         // getResources where the resource exists in both.
      +250         // resources should be returned in order (parent-resource, child-resource)
      +251         resources = childLoader.getResources("org/apache/commons/logging/impl/Log4JLogger.class");
      +252         urls = toURLArray(resources);
      +253         assertEquals("Unexpected number of Log4JLogger.class resources found", 2, urls.length);
      +254         
      +255         // There is no gaurantee about the ordering of results returned from getResources
      +256         // To make this test portable across JVMs, sort the string to give them a known order
      +257         String[] urlsToStrings = new String[2];
      +258         urlsToStrings[0] = urls[0].toString();
      +259         urlsToStrings[1] = urls[1].toString();
      +260         Arrays.sort(urlsToStrings);
      +261         assertTrue("Incorrect source for Log4JLogger class",
      +262                 urlsToStrings[0].indexOf("/commons-logging-1.") > 0);
      +263         assertTrue("Incorrect source for Log4JLogger class",
      +264                 urlsToStrings[1].indexOf("/commons-logging-adapters-1.") > 0);
      +265         
      +266     }
      +267 
      +268     /**
      +269      * Utility method to convert an enumeration-of-URLs into an array of URLs.
      +270      */
      +271     private static URL[] toURLArray(Enumeration e) {
      +272         ArrayList l = new ArrayList();
      +273         while (e.hasMoreElements()) {
      +274             URL u = (URL) e.nextElement();
      +275             l.add(u);
      +276         }
      +277         URL[] tmp = new URL[l.size()];
      +278         return (URL[]) l.toArray(tmp);
      +279     }
      +280 
      +281     /**
      +282      * Test that getResourceAsStream works.
      +283      */
      +284     public void testResourceAsStream() throws Exception {
      +285         java.io.InputStream is;
      +286         
      +287         // verify the classloader hierarchy
      +288         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
      +289         ClassLoader childLoader = contextLoader.getParent();
      +290         ClassLoader parentLoader = childLoader.getParent();
      +291         ClassLoader bootLoader = parentLoader.getParent();
      +292         assertNull("Unexpected classloader hierarchy", bootLoader);
      +293         
      +294         // getResourceAsStream where no instances exist
      +295         is = childLoader.getResourceAsStream("nosuchfile");
      +296         assertNull("Invalid resource returned non-null stream", is);
      +297         
      +298         // getResourceAsStream where resource does exist
      +299         is = childLoader.getResourceAsStream("org/apache/commons/logging/Log.class");
      +300         assertNotNull("Null returned for valid resource", is);
      +301         is.close();
      +302         
      +303         // It would be nice to test parent-first ordering here, but that would require
      +304         // having a resource with the same name in both the parent and child loaders,
      +305         // but with different contents. That's a little tricky to set up so we'll
      +306         // skip that for now.
      +307     }
      +308 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-frame.html new file mode 100644 index 0000000..354a382 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-frame.html @@ -0,0 +1,30 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.pathable + + + + +

      + org.apache.commons.logging.pathable +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-summary.html new file mode 100644 index 0000000..c237cd7 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/pathable/package-summary.html @@ -0,0 +1,77 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.pathable + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.pathable

      + + + + + + + + + + + + + + + + + + +
      Class Summary
      + ChildFirstTestCase +
      + GeneralTestCase +
      + ParentFirstTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/MockSecurityManager.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/MockSecurityManager.html new file mode 100644 index 0000000..644f113 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/MockSecurityManager.html @@ -0,0 +1,152 @@ + + + + +MockSecurityManager xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one
      +3    * or more contributor license agreements.  See the NOTICE file
      +4    * distributed with this work for additional information
      +5    * regarding copyright ownership.  The ASF licenses this file
      +6    * to you under the Apache License, Version 2.0 (the
      +7    * "License"); you may not use this file except in compliance
      +8    * with the License.  You may obtain a copy of the License at
      +9    *
      +10   *    http://www.apache.org/licenses/LICENSE-2.0
      +11   *
      +12   * Unless required by applicable law or agreed to in writing,
      +13   * software distributed under the License is distributed on an
      +14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      +15   * KIND, either express or implied.  See the License for the
      +16   * specific language governing permissions and limitations
      +17   * under the License.
      +18   */ 
      +19   
      +20  package org.apache.commons.logging.security;
      +21  
      +22  import java.io.FilePermission;
      +23  import java.security.Permission;
      +24  import java.security.Permissions;
      +25  
      +26  
      +27  /**
      +28   * Custom implementation of a security manager, so we can control the
      +29   * security environment for tests in this package.
      +30   */
      +31  public class MockSecurityManager extends SecurityManager {
      +32  
      +33      private Permissions permissions = new Permissions();
      +34      private static final Permission setSecurityManagerPerm =
      +35          new RuntimePermission("setSecurityManager");
      +36      
      +37      private int untrustedCodeCount = 0;
      +38  
      +39      public MockSecurityManager() {
      +40          permissions.add(setSecurityManagerPerm);
      +41      }
      +42  
      +43      /**
      +44       * Define the set of permissions to be granted to classes in the o.a.c.l package,
      +45       * but NOT to unit-test classes in o.a.c.l.security package.
      +46       */
      +47      public void addPermission(Permission p) {
      +48          permissions.add(p);
      +49      }
      +50  
      +51      /**
      +52       * This returns the number of times that a check of a permission failed
      +53       * due to stack-walking tracing up into untrusted code. Any non-zero
      +54       * value indicates a bug in JCL, ie a situation where code was not
      +55       * correctly wrapped in an AccessController block. The result of such a
      +56       * bug is that signing JCL is not sufficient to allow JCL to perform
      +57       * the operation; the caller would need to be signed too. 
      +58       */
      +59      public int getUntrustedCodeCount() {
      +60          return untrustedCodeCount;
      +61      }
      +62  
      +63      public void checkPermission(Permission p) throws SecurityException {
      +64          if (setSecurityManagerPerm.implies(p)) {
      +65              // ok, allow this; we don't want to block any calls to setSecurityManager
      +66              // otherwise this custom security manager cannot be reset to the original.
      +67              // System.out.println("setSecurityManager: granted");
      +68              return;
      +69          }
      +70  
      +71          // Allow read-only access to files, as this is needed to load classes!
      +72          // Ideally, we would limit this to just .class and .jar files.
      +73          if (p instanceof FilePermission) {
      +74            FilePermission fp = (FilePermission) p;
      +75            if (fp.getActions().equals("read")) {
      +76              // System.out.println("Permit read of files");
      +77              return;
      +78            }
      +79          }
      +80  
      +81          System.out.println("\n\ntesting permission:" + p.getClass() + ":"+ p);
      +82  
      +83          Exception e = new Exception();
      +84          e.fillInStackTrace();
      +85          StackTraceElement[] stack = e.getStackTrace();
      +86          
      +87          // scan the call stack from most recent to oldest.
      +88          // start at 1 to skip the entry in the stack for this method
      +89          for(int i=1; i<stack.length; ++i) {
      +90              String cname = stack[i].getClassName();
      +91              System.out.println("" + i + ":" + stack[i].getClassName() + 
      +92                "." + stack[i].getMethodName());
      +93  
      +94              if (cname.equals("java.security.AccessController")) {
      +95                  // Presumably method name equals "doPrivileged"
      +96                  //
      +97                  // The previous iteration of this loop verified that the
      +98                  // PrivilegedAction.run method associated with this
      +99                  // doPrivileged method call had the right permissions,
      +100                 // so we just return here. Effectively, the method invoking
      +101                 // doPrivileged asserted that it checked the input params
      +102                 // and found them safe, and that code is trusted, so we
      +103                 // don't need to check the trust level of code higher in
      +104                 // the call stack.
      +105                 System.out.println("Access controller found: returning");
      +106                 return;
      +107             } else if (cname.startsWith("java.") 
      +108                 || cname.startsWith("javax.") 
      +109                 || cname.startsWith("junit.") 
      +110                 || cname.startsWith("org.apache.tools.ant.")
      +111                 || cname.startsWith("sun.")) {
      +112                 // Code in these packages is trusted if the caller is trusted.
      +113                 //
      +114                 // TODO: maybe check class is loaded via system loader or similar rather
      +115                 // than checking name? Trusted domains may be different in alternative
      +116                 // jvms..
      +117             } else if (cname.startsWith("org.apache.commons.logging.security")) {
      +118                 // this is the unit test code; treat this like an untrusted client
      +119                 // app that is using JCL
      +120                 ++untrustedCodeCount;
      +121                 System.out.println("Untrusted code [testcase] found");
      +122                 throw new SecurityException("Untrusted code [testcase] found");
      +123             } else if (cname.startsWith("org.apache.commons.logging.")) {
      +124                 if (permissions.implies(p)) {
      +125                     // Code here is trusted if the caller is trusted
      +126                     System.out.println("Permission in allowed set for JCL class");
      +127                 } else {
      +128                     System.out.println("Permission refused:" + p.getClass() + ":" + p);
      +129                     throw new SecurityException("Permission refused:" + p.getClass() + ":" + p);
      +130                 }
      +131             } else {
      +132                 // we found some code that is not trusted to perform this operation.
      +133                 System.out.println("Unexpected code: permission refused:" + p.getClass() + ":" + p);
      +134                 throw new SecurityException("Unexpected code: permission refused:" + p.getClass() + ":" + p);
      +135             }
      +136         }
      +137     }
      +138 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityAllowedTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityAllowedTestCase.html new file mode 100644 index 0000000..154bf17 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityAllowedTestCase.html @@ -0,0 +1,149 @@ + + + + +SecurityAllowedTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one
      +3    * or more contributor license agreements.  See the NOTICE file
      +4    * distributed with this work for additional information
      +5    * regarding copyright ownership.  The ASF licenses this file
      +6    * to you under the Apache License, Version 2.0 (the
      +7    * "License"); you may not use this file except in compliance
      +8    * with the License.  You may obtain a copy of the License at
      +9    *
      +10   *    http://www.apache.org/licenses/LICENSE-2.0
      +11   *
      +12   * Unless required by applicable law or agreed to in writing,
      +13   * software distributed under the License is distributed on an
      +14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      +15   * KIND, either express or implied.  See the License for the
      +16   * specific language governing permissions and limitations
      +17   * under the License.
      +18   */ 
      +19   
      +20  package org.apache.commons.logging.security;
      +21  
      +22  import java.io.PrintWriter;
      +23  import java.io.StringWriter;
      +24  import java.lang.reflect.Field;
      +25  import java.lang.reflect.Method;
      +26  import java.security.AllPermission;
      +27  import java.util.Hashtable;
      +28  
      +29  import junit.framework.Test;
      +30  import junit.framework.TestCase;
      +31  
      +32  import org.apache.commons.logging.Log;
      +33  import org.apache.commons.logging.LogFactory;
      +34  import org.apache.commons.logging.PathableClassLoader;
      +35  import org.apache.commons.logging.PathableTestSuite;
      +36  
      +37  /**
      +38   * Tests for logging with a security policy that allows JCL access to everything.
      +39   * <p>
      +40   * This class has only one unit test, as we are (in part) checking behaviour in
      +41   * the static block of the LogFactory class. As that class cannot be unloaded after
      +42   * being loaded into a classloader, the only workaround is to use the 
      +43   * PathableClassLoader approach to ensure each test is run in its own
      +44   * classloader, and use a separate testcase class for each test.
      +45   */
      +46  public class SecurityAllowedTestCase extends TestCase
      +47  {
      +48      private SecurityManager oldSecMgr;
      +49  
      +50      // Dummy special hashtable, so we can tell JCL to use this instead of
      +51      // the standard one.
      +52      public static class CustomHashtable extends Hashtable {
      +53      }
      +54  
      +55      /**
      +56       * Return the tests included in this test suite.
      +57       */
      +58      public static Test suite() throws Exception {
      +59          PathableClassLoader parent = new PathableClassLoader(null);
      +60          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +61          parent.addLogicalLib("commons-logging");
      +62          parent.addLogicalLib("testclasses");
      +63  
      +64          Class testClass = parent.loadClass(
      +65              "org.apache.commons.logging.security.SecurityAllowedTestCase");
      +66          return new PathableTestSuite(testClass, parent);
      +67      }
      +68  
      +69      public void setUp() {
      +70          // save security manager so it can be restored in tearDown
      +71          oldSecMgr = System.getSecurityManager();
      +72      }
      +73      
      +74      public void tearDown() {
      +75          // Restore, so other tests don't get stuffed up if a test
      +76          // sets a custom security manager.
      +77          System.setSecurityManager(oldSecMgr);
      +78      }
      +79  
      +80      /**
      +81       * Test what happens when JCL is run with all permissions enabled. Custom
      +82       * overrides should take effect.
      +83       */
      +84      public void testAllAllowed() {
      +85          System.setProperty(
      +86                  LogFactory.HASHTABLE_IMPLEMENTATION_PROPERTY,
      +87                  CustomHashtable.class.getName());
      +88          MockSecurityManager mySecurityManager = new MockSecurityManager();
      +89          mySecurityManager.addPermission(new AllPermission());
      +90          System.setSecurityManager(mySecurityManager);
      +91  
      +92          try {
      +93              // Use reflection so that we can control exactly when the static
      +94              // initialiser for the LogFactory class is executed.
      +95              Class c = this.getClass().getClassLoader().loadClass(
      +96                      "org.apache.commons.logging.LogFactory");
      +97              Method m = c.getMethod("getLog", new Class[] {Class.class});
      +98              Log log = (Log) m.invoke(null, new Object[] {this.getClass()});
      +99  
      +100             // Check whether we had any security exceptions so far (which were
      +101             // caught by the code). We should not, as every secure operation
      +102             // should be wrapped in an AccessController. Any security exceptions
      +103             // indicate a path that is missing an appropriate AccessController.
      +104             //
      +105             // We don't wait until after the log.info call to get this count
      +106             // because java.util.logging tries to load a resource bundle, which
      +107             // requires permission accessClassInPackage. JCL explicitly does not
      +108             // wrap calls to log methods in AccessControllers because writes to
      +109             // a log file *should* only be permitted if the original caller is
      +110             // trusted to access that file. 
      +111             int untrustedCodeCount = mySecurityManager.getUntrustedCodeCount();
      +112             log.info("testing");
      +113             
      +114             // check that the default map implementation was loaded, as JCL was
      +115             // forbidden from reading the HASHTABLE_IMPLEMENTATION_PROPERTY property.
      +116             System.setSecurityManager(null);
      +117             Field factoryField = c.getDeclaredField("factories");
      +118             factoryField.setAccessible(true);
      +119             Object factoryTable = factoryField.get(null); 
      +120             assertNotNull(factoryTable);
      +121             assertEquals(CustomHashtable.class.getName(), factoryTable.getClass().getName());
      +122             
      +123             assertEquals(0, untrustedCodeCount);
      +124         } catch(Throwable t) {
      +125             // Restore original security manager so output can be generated; the
      +126             // PrintWriter constructor tries to read the line.separator
      +127             // system property.
      +128             System.setSecurityManager(oldSecMgr);
      +129             StringWriter sw = new StringWriter();
      +130             PrintWriter pw = new PrintWriter(sw);
      +131             t.printStackTrace(pw);
      +132             fail("Unexpected exception:" + t.getMessage() + ":" + sw.toString());
      +133         }
      +134     }
      +135 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityForbiddenTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityForbiddenTestCase.html new file mode 100644 index 0000000..5b11cb3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/SecurityForbiddenTestCase.html @@ -0,0 +1,144 @@ + + + + +SecurityForbiddenTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one
      +3    * or more contributor license agreements.  See the NOTICE file
      +4    * distributed with this work for additional information
      +5    * regarding copyright ownership.  The ASF licenses this file
      +6    * to you under the Apache License, Version 2.0 (the
      +7    * "License"); you may not use this file except in compliance
      +8    * with the License.  You may obtain a copy of the License at
      +9    *
      +10   *    http://www.apache.org/licenses/LICENSE-2.0
      +11   *
      +12   * Unless required by applicable law or agreed to in writing,
      +13   * software distributed under the License is distributed on an
      +14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      +15   * KIND, either express or implied.  See the License for the
      +16   * specific language governing permissions and limitations
      +17   * under the License.
      +18   */ 
      +19   
      +20  package org.apache.commons.logging.security;
      +21  
      +22  import java.io.PrintWriter;
      +23  import java.io.StringWriter;
      +24  import java.lang.reflect.Field;
      +25  import java.lang.reflect.Method;
      +26  import java.util.Hashtable;
      +27  
      +28  import junit.framework.Test;
      +29  import junit.framework.TestCase;
      +30  
      +31  import org.apache.commons.logging.Log;
      +32  import org.apache.commons.logging.LogFactory;
      +33  import org.apache.commons.logging.PathableClassLoader;
      +34  import org.apache.commons.logging.PathableTestSuite;
      +35  
      +36  /**
      +37   * Tests for logging with a security policy that forbids JCL access to anything.
      +38   * <p>
      +39   * Performing tests with security permissions disabled is tricky, as building error
      +40   * messages on failure requires certain security permissions. If the security manager
      +41   * blocks these, then the test can fail without the error messages being output.
      +42   * <p>
      +43   * This class has only one unit test, as we are (in part) checking behaviour in
      +44   * the static block of the LogFactory class. As that class cannot be unloaded after
      +45   * being loaded into a classloader, the only workaround is to use the 
      +46   * PathableClassLoader approach to ensure each test is run in its own
      +47   * classloader, and use a separate testcase class for each test.
      +48   */
      +49  public class SecurityForbiddenTestCase extends TestCase
      +50  {
      +51      private SecurityManager oldSecMgr;
      +52  
      +53      // Dummy special hashtable, so we can tell JCL to use this instead of
      +54      // the standard one.
      +55      public static class CustomHashtable extends Hashtable {
      +56      }
      +57  
      +58      /**
      +59       * Return the tests included in this test suite.
      +60       */
      +61      public static Test suite() throws Exception {
      +62          PathableClassLoader parent = new PathableClassLoader(null);
      +63          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +64          parent.addLogicalLib("commons-logging");
      +65          parent.addLogicalLib("testclasses");
      +66  
      +67          Class testClass = parent.loadClass(
      +68              "org.apache.commons.logging.security.SecurityForbiddenTestCase");
      +69          return new PathableTestSuite(testClass, parent);
      +70      }
      +71  
      +72      public void setUp() {
      +73          // save security manager so it can be restored in tearDown
      +74          oldSecMgr = System.getSecurityManager();
      +75      }
      +76      
      +77      public void tearDown() {
      +78          // Restore, so other tests don't get stuffed up if a test
      +79          // sets a custom security manager.
      +80          System.setSecurityManager(oldSecMgr);
      +81      }
      +82  
      +83      /**
      +84       * Test what happens when JCL is run with absolutely no security
      +85       * priveleges at all, including reading system properties. Everything
      +86       * should fall back to the built-in defaults.
      +87       */
      +88      public void testAllForbidden() {
      +89          System.setProperty(
      +90                  LogFactory.HASHTABLE_IMPLEMENTATION_PROPERTY,
      +91                  CustomHashtable.class.getName());
      +92          MockSecurityManager mySecurityManager = new MockSecurityManager();
      +93          System.setSecurityManager(mySecurityManager);
      +94  
      +95          try {
      +96              // Use reflection so that we can control exactly when the static
      +97              // initialiser for the LogFactory class is executed.
      +98              Class c = this.getClass().getClassLoader().loadClass(
      +99                      "org.apache.commons.logging.LogFactory");
      +100             Method m = c.getMethod("getLog", new Class[] {Class.class});
      +101             Log log = (Log) m.invoke(null, new Object[] {this.getClass()});
      +102             log.info("testing");
      +103             
      +104             // check that the default map implementation was loaded, as JCL was
      +105             // forbidden from reading the HASHTABLE_IMPLEMENTATION_PROPERTY property.
      +106             //
      +107             // The default is either the java Hashtable class (java < 1.2) or the
      +108             // JCL WeakHashtable (java >= 1.3).
      +109             System.setSecurityManager(oldSecMgr);
      +110             Field factoryField = c.getDeclaredField("factories");
      +111             factoryField.setAccessible(true);
      +112             Object factoryTable = factoryField.get(null); 
      +113             assertNotNull(factoryTable);
      +114             String ftClassName = factoryTable.getClass().getName();
      +115             assertTrue("Custom hashtable unexpectedly used", 
      +116                     !CustomHashtable.class.getName().equals(ftClassName));
      +117 
      +118             assertEquals(0, mySecurityManager.getUntrustedCodeCount());
      +119         } catch(Throwable t) {
      +120             // Restore original security manager so output can be generated; the
      +121             // PrintWriter constructor tries to read the line.separator
      +122             // system property.
      +123             System.setSecurityManager(oldSecMgr);
      +124             StringWriter sw = new StringWriter();
      +125             PrintWriter pw = new PrintWriter(sw);
      +126             t.printStackTrace(pw);
      +127             fail("Unexpected exception:" + t.getMessage() + ":" + sw.toString());
      +128         }
      +129     }
      +130 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-frame.html new file mode 100644 index 0000000..bccfe77 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-frame.html @@ -0,0 +1,33 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.security + + + + +

      + org.apache.commons.logging.security +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-summary.html new file mode 100644 index 0000000..c515ca3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/security/package-summary.html @@ -0,0 +1,82 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.security + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.security

      + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + CustomHashtable +
      + MockSecurityManager +
      + SecurityAllowedTestCase +
      + SecurityForbiddenTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/BasicServletTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/BasicServletTestCase.html new file mode 100644 index 0000000..69b4773 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/BasicServletTestCase.html @@ -0,0 +1,86 @@ + + + + +BasicServletTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.servlet;
      +19  
      +20  import junit.framework.Test;
      +21  import junit.framework.TestCase;
      +22  
      +23  import org.apache.commons.logging.PathableClassLoader;
      +24  import org.apache.commons.logging.PathableTestSuite;
      +25  import org.apache.commons.logging.impl.ServletContextCleaner;
      +26  
      +27  
      +28  /**
      +29   * Tests for ServletContextCleaner utility class.
      +30   */
      +31  
      +32  public class BasicServletTestCase extends TestCase {
      +33  
      +34      /**
      +35       * Return the tests included in this test suite.
      +36       */
      +37      public static Test suite() throws Exception {
      +38          // LogFactory in parent
      +39          // LogFactory in child (loads test)
      +40          // LogFactory in tccl
      +41          //
      +42          // Having the test loaded via a loader above the tccl emulates the situation
      +43          // where a web.xml file specifies ServletContextCleaner as a listener, and
      +44          // that class is deployed via a shared classloader.
      +45  
      +46          PathableClassLoader parent = new PathableClassLoader(null);
      +47          parent.useExplicitLoader("junit.", Test.class.getClassLoader());
      +48          parent.addLogicalLib("commons-logging");
      +49          parent.addLogicalLib("servlet-api");
      +50  
      +51          PathableClassLoader child = new PathableClassLoader(parent);
      +52          child.setParentFirst(false);
      +53          child.addLogicalLib("commons-logging");
      +54          child.addLogicalLib("testclasses");
      +55  
      +56          PathableClassLoader tccl = new PathableClassLoader(child);
      +57          tccl.setParentFirst(false);
      +58          tccl.addLogicalLib("commons-logging");
      +59  
      +60          Class testClass = child.loadClass(BasicServletTestCase.class.getName());
      +61          return new PathableTestSuite(testClass, tccl);
      +62      }
      +63      
      +64      /**
      +65       * Test that calling ServletContextCleaner.contextDestroyed doesn't crash.
      +66       * Testing anything else is rather difficult...
      +67       */
      +68      public void testBasics() {
      +69          ServletContextCleaner scc = new ServletContextCleaner();
      +70          scc.contextDestroyed(null);
      +71      }
      +72  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-frame.html new file mode 100644 index 0000000..ab68633 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-frame.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.servlet + + + + +

      + org.apache.commons.logging.servlet +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-summary.html new file mode 100644 index 0000000..a1ab0a6 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/servlet/package-summary.html @@ -0,0 +1,67 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.servlet + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.servlet

      + + + + + + + + + + + + +
      Class Summary
      + BasicServletTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/CustomConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/CustomConfigTestCase.html new file mode 100644 index 0000000..d43df60 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/CustomConfigTestCase.html @@ -0,0 +1,291 @@ + + + + +CustomConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.simple;
      +19  
      +20  
      +21  import java.util.ArrayList;
      +22  import java.util.Iterator;
      +23  import java.util.List;
      +24  
      +25  import junit.framework.Test;
      +26  
      +27  import org.apache.commons.logging.DummyException;
      +28  import org.apache.commons.logging.LogFactory;
      +29  import org.apache.commons.logging.PathableClassLoader;
      +30  import org.apache.commons.logging.PathableTestSuite;
      +31  import org.apache.commons.logging.impl.SimpleLog;
      +32  
      +33  
      +34  /**
      +35   * <p>TestCase for simple logging when running with custom configuration
      +36   * properties.</p>
      +37   *
      +38   * @author Craig R. McClanahan
      +39   * @version $Revision: 563165 $ $Date: 2007-08-06 17:08:05 +0200 $
      +40   */
      +41  public class CustomConfigTestCase extends DefaultConfigTestCase {
      +42  
      +43  
      +44      // ----------------------------------------------------- Instance Variables
      +45  
      +46  
      +47      /**
      +48       * <p>The expected log records.</p>
      +49       */
      +50      protected List expected;
      +51  
      +52  
      +53      /**
      +54       * <p>The message levels that should have been logged.</p>
      +55       */
      +56      /*
      +57      protected Level testLevels[] =
      +58      { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE };
      +59      */
      +60  
      +61  
      +62      /**
      +63       * <p>The message strings that should have been logged.</p>
      +64       */
      +65      protected String testMessages[] =
      +66      { "debug", "info", "warn", "error", "fatal" };
      +67  
      +68  
      +69      // ------------------------------------------- JUnit Infrastructure Methods
      +70  
      +71      /**
      +72       * Set system properties that will control the LogFactory/Log objects
      +73       * when they are created. Subclasses can override this method to
      +74       * define properties that suit them.
      +75       */
      +76      public void setProperties() {
      +77          System.setProperty(
      +78              "org.apache.commons.logging.Log",
      +79              "org.apache.commons.logging.simple.DecoratedSimpleLog");
      +80          System.setProperty(
      +81              "org.apache.commons.logging.simplelog.defaultlog",
      +82              "debug");
      +83      }
      +84  
      +85      /**
      +86       * Set up instance variables required by this test case.
      +87       */
      +88      public void setUp() throws Exception {
      +89          LogFactory.releaseAll();
      +90          setProperties();
      +91          expected = new ArrayList();
      +92          setUpFactory();
      +93          setUpLog("DecoratedLogger");
      +94      }
      +95  
      +96  
      +97      /**
      +98       * Return the tests included in this test suite.
      +99       * <p>
      +100      * We need to use a PathableClassLoader here because the SimpleLog class
      +101      * is a pile of junk and chock-full of static variables. Any other test
      +102      * (like simple.CustomConfigTestCase) that has used the SimpleLog class
      +103      * will already have caused it to do once-only initialisation that we
      +104      * can't reset, even by calling LogFactory.releaseAll, because of those
      +105      * ugly statics. The only clean solution is to load a clean copy of
      +106      * commons-logging including SimpleLog via a nice clean classloader.
      +107      * Or we could fix SimpleLog to be sane...
      +108      */
      +109     public static Test suite() throws Exception {
      +110         Class thisClass = CustomConfigTestCase.class;
      +111 
      +112         PathableClassLoader loader = new PathableClassLoader(null);
      +113         loader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +114         loader.addLogicalLib("testclasses");
      +115         loader.addLogicalLib("commons-logging");
      +116         
      +117         Class testClass = loader.loadClass(thisClass.getName());
      +118         return new PathableTestSuite(testClass, loader);
      +119     }
      +120 
      +121     /**
      +122      * Tear down instance variables required by this test case.
      +123      */
      +124     public void tearDown() {
      +125         super.tearDown();
      +126         expected = null;
      +127     }
      +128 
      +129 
      +130     // ----------------------------------------------------------- Test Methods
      +131 
      +132 
      +133     // Test logging message strings with exceptions
      +134     public void testExceptionMessages() throws Exception {
      +135 
      +136         ((DecoratedSimpleLog) log).clearCache();
      +137         logExceptionMessages();
      +138         checkExpected();
      +139 
      +140     }
      +141 
      +142 
      +143     // Test logging plain message strings
      +144     public void testPlainMessages() throws Exception {
      +145 
      +146         ((DecoratedSimpleLog) log).clearCache();
      +147         logPlainMessages();
      +148         checkExpected();
      +149 
      +150     }
      +151 
      +152 
      +153     // Test Serializability of standard instance
      +154     public void testSerializable() throws Exception {
      +155 
      +156         ((DecoratedSimpleLog) log).clearCache();
      +157         logPlainMessages();
      +158         super.testSerializable();
      +159         logExceptionMessages();
      +160         checkExpected();
      +161 
      +162     }
      +163 
      +164 
      +165     // -------------------------------------------------------- Support Methods
      +166 
      +167 
      +168     // Check the decorated log instance
      +169     protected void checkDecorated() {
      +170 
      +171         assertNotNull("Log exists", log);
      +172         assertEquals("Log class",
      +173                      "org.apache.commons.logging.simple.DecoratedSimpleLog",
      +174                      log.getClass().getName());
      +175 
      +176         // Can we call level checkers with no exceptions?
      +177         assertTrue(log.isDebugEnabled());
      +178         assertTrue(log.isErrorEnabled());
      +179         assertTrue(log.isFatalEnabled());
      +180         assertTrue(log.isInfoEnabled());
      +181         assertTrue(!log.isTraceEnabled());
      +182         assertTrue(log.isWarnEnabled());
      +183 
      +184         // Can we retrieve the current log level?
      +185         assertEquals(SimpleLog.LOG_LEVEL_DEBUG, ((SimpleLog) log).getLevel());
      +186 
      +187         // Can we validate the extra exposed properties?
      +188         checkDecoratedDateTime();
      +189         assertEquals("DecoratedLogger",
      +190                      ((DecoratedSimpleLog) log).getLogName());
      +191         checkShowDateTime();
      +192         assertTrue(((DecoratedSimpleLog) log).getShowShortName());
      +193 
      +194     }
      +195     
      +196     /** Hook for subclassses */
      +197     protected void checkShowDateTime() {
      +198         assertTrue(!((DecoratedSimpleLog) log).getShowDateTime());
      +199     }
      +200     
      +201     /** Hook for subclasses */
      +202     protected void checkDecoratedDateTime() {
      +203             assertEquals("yyyy/MM/dd HH:mm:ss:SSS zzz",
      +204                      ((DecoratedSimpleLog) log).getDateTimeFormat());
      +205     }
      +206     
      +207 
      +208 
      +209     // Check the actual log records against the expected ones
      +210     protected void checkExpected() {
      +211 
      +212         List acts = ((DecoratedSimpleLog) log).getCache();
      +213         Iterator exps = expected.iterator();
      +214         int n = 0;
      +215         while (exps.hasNext()) {
      +216             LogRecord exp = (LogRecord) exps.next();
      +217             LogRecord act = (LogRecord) acts.get(n++);
      +218             assertEquals("Row " + n + " type", exp.type, act.type);
      +219             assertEquals("Row " + n + " message", exp.message, act.message);
      +220             assertEquals("Row " + n + " throwable", exp.t, act.t);
      +221         }
      +222 
      +223     }
      +224 
      +225 
      +226     // Check the standard log instance
      +227     protected void checkStandard() {
      +228 
      +229         checkDecorated();
      +230 
      +231     }
      +232 
      +233 
      +234     // Log the messages with exceptions
      +235     protected void logExceptionMessages() {
      +236 
      +237         // Generate log records
      +238         Throwable t = new DummyException();
      +239         log.trace("trace", t); // Should not actually get logged
      +240         log.debug("debug", t);
      +241         log.info("info", t);
      +242         log.warn("warn", t);
      +243         log.error("error", t);
      +244         log.fatal("fatal", t);
      +245 
      +246         // Record the log records we expect
      +247         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_DEBUG, "debug", t));
      +248         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_INFO, "info", t));
      +249         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_WARN, "warn", t));
      +250         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_ERROR, "error", t));
      +251         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_FATAL, "fatal", t));
      +252 
      +253     }
      +254 
      +255 
      +256     // Log the plain messages
      +257     protected void logPlainMessages() {
      +258 
      +259         // Generate log records
      +260         log.trace("trace"); // Should not actually get logged
      +261         log.debug("debug");
      +262         log.info("info");
      +263         log.warn("warn");
      +264         log.error("error");
      +265         log.fatal("fatal");
      +266 
      +267         // Record the log records we expect
      +268         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_DEBUG, "debug", null));
      +269         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_INFO, "info", null));
      +270         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_WARN, "warn", null));
      +271         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_ERROR, "error", null));
      +272         expected.add(new LogRecord(SimpleLog.LOG_LEVEL_FATAL, "fatal", null));
      +273 
      +274     }
      +275 
      +276 
      +277 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DateTimeCustomConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DateTimeCustomConfigTestCase.html new file mode 100644 index 0000000..de1e3e4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DateTimeCustomConfigTestCase.html @@ -0,0 +1,119 @@ + + + + +DateTimeCustomConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.simple;
      +19  
      +20  import java.text.DateFormat;
      +21  import java.text.SimpleDateFormat;
      +22  import java.util.Date;
      +23  
      +24  import junit.framework.Test;
      +25  
      +26  import org.apache.commons.logging.PathableClassLoader;
      +27  import org.apache.commons.logging.PathableTestSuite;
      +28  
      +29  
      +30  /**
      +31   * Tests custom date time format configuration
      +32   */
      +33  public class DateTimeCustomConfigTestCase extends CustomConfigTestCase {
      +34      
      +35      // ----------------------------------------------------------- Constructors
      +36  
      +37      /**
      +38       * Return the tests included in this test suite.
      +39       * <p>
      +40       * We need to use a PathableClassLoader here because the SimpleLog class
      +41       * is a pile of junk and chock-full of static variables. Any other test
      +42       * (like simple.CustomConfigTestCase) that has used the SimpleLog class
      +43       * will already have caused it to do once-only initialisation that we
      +44       * can't reset, even by calling LogFactory.releaseAll, because of those
      +45       * ugly statics. The only clean solution is to load a clean copy of
      +46       * commons-logging including SimpleLog via a nice clean classloader.
      +47       * Or we could fix SimpleLog to be sane...
      +48       */
      +49      public static Test suite() throws Exception {
      +50          Class thisClass = DateTimeCustomConfigTestCase.class;
      +51  
      +52          PathableClassLoader loader = new PathableClassLoader(null);
      +53          loader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +54          loader.addLogicalLib("testclasses");
      +55          loader.addLogicalLib("commons-logging");
      +56          
      +57          Class testClass = loader.loadClass(thisClass.getName());
      +58          return new PathableTestSuite(testClass, loader);
      +59      }
      +60  
      +61  
      +62      /**
      +63       * Set up system properties required by this unit test. Here, we
      +64       * set up the props defined in the parent class setProperties method, 
      +65       * and add a few to configure the SimpleLog class date/time output.
      +66       */
      +67      public void setProperties() {
      +68          super.setProperties();
      +69          
      +70          System.setProperty(
      +71              "org.apache.commons.logging.simplelog.dateTimeFormat",
      +72              "dd.mm.yyyy");
      +73          System.setProperty(
      +74              "org.apache.commons.logging.simplelog.showdatetime",
      +75              "true");
      +76      }
      +77  
      +78      /**
      +79       * Set up instance variables required by this test case.
      +80       */
      +81      public void setUp() throws Exception {
      +82          super.setUp();
      +83      }
      +84  
      +85  
      +86      // ----------------------------------------------------------- Methods
      +87  
      +88      /** Checks that the date time format has been successfully set */
      +89      protected void checkDecoratedDateTime() {
      +90          assertEquals("Expected date format to be set", "dd.mm.yyyy",
      +91                       ((DecoratedSimpleLog) log).getDateTimeFormat());
      +92          
      +93          // try the formatter
      +94          Date now = new Date();
      +95          DateFormat formatter = ((DecoratedSimpleLog) log).getDateTimeFormatter(); 
      +96          SimpleDateFormat sampleFormatter = new SimpleDateFormat("dd.mm.yyyy");
      +97          assertEquals("Date should be formatters to pattern dd.mm.yyyy", sampleFormatter.format(now), formatter.format(now));
      +98      }
      +99      
      +100     /** Hook for subclassses */
      +101     protected void checkShowDateTime() {
      +102         assertTrue(((DecoratedSimpleLog) log).getShowDateTime());
      +103     }
      +104     
      +105 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DecoratedSimpleLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DecoratedSimpleLog.html new file mode 100644 index 0000000..d586d90 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DecoratedSimpleLog.html @@ -0,0 +1,115 @@ + + + + +DecoratedSimpleLog xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.simple;
      +19  
      +20  
      +21  import java.util.ArrayList;
      +22  import java.util.List;
      +23  import java.text.DateFormat;
      +24  import org.apache.commons.logging.impl.SimpleLog;
      +25  
      +26  
      +27  /**
      +28   * <p>Decorated instance of SimpleLog to expose internal state and
      +29   * support buffered output.</p>
      +30   */
      +31  
      +32  public class DecoratedSimpleLog extends SimpleLog {
      +33  
      +34  
      +35      // ------------------------------------------------------------ Constructor
      +36  
      +37  
      +38      public DecoratedSimpleLog(String name) {
      +39          super(name);
      +40      }
      +41  
      +42  
      +43      // ------------------------------------------------------------- Properties
      +44  
      +45      public DateFormat getDateTimeFormatter() {
      +46          return (dateFormatter);
      +47      }
      +48  
      +49  
      +50      public String getDateTimeFormat() {
      +51          return (dateTimeFormat);
      +52      }
      +53  
      +54  
      +55      public String getLogName() {
      +56          return (logName);
      +57      }
      +58  
      +59  
      +60      public boolean getShowDateTime() {
      +61          return (showDateTime);
      +62      }
      +63  
      +64  
      +65      public boolean getShowShortName() {
      +66          return (showShortName);
      +67      }
      +68  
      +69  
      +70      // ------------------------------------------------------- Protected Methods
      +71  
      +72  
      +73      // Cache logged messages
      +74      protected void log(int type, Object message, Throwable t) {
      +75  
      +76          super.log(type, message, t);
      +77          cache.add(new LogRecord(type, message, t));
      +78  
      +79      }
      +80  
      +81  
      +82      // ---------------------------------------------------------- Public Methods
      +83  
      +84  
      +85      // Cache of logged records
      +86      protected ArrayList cache = new ArrayList();
      +87  
      +88  
      +89      // Clear cache
      +90      public void clearCache() {
      +91          cache.clear();
      +92      }
      +93  
      +94  
      +95      // Return cache
      +96      public List getCache() {
      +97          return (this.cache);
      +98      }
      +99  
      +100 
      +101 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DefaultConfigTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DefaultConfigTestCase.html new file mode 100644 index 0000000..60dd209 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/DefaultConfigTestCase.html @@ -0,0 +1,263 @@ + + + + +DefaultConfigTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.simple;
      +19  
      +20  
      +21  import java.io.ByteArrayInputStream;
      +22  import java.io.ByteArrayOutputStream;
      +23  import java.io.ObjectInputStream;
      +24  import java.io.ObjectOutputStream;
      +25  
      +26  import junit.framework.Test;
      +27  import junit.framework.TestCase;
      +28  
      +29  import org.apache.commons.logging.Log;
      +30  import org.apache.commons.logging.LogFactory;
      +31  import org.apache.commons.logging.PathableClassLoader;
      +32  import org.apache.commons.logging.PathableTestSuite;
      +33  import org.apache.commons.logging.impl.SimpleLog;
      +34  
      +35  
      +36  /**
      +37   * <p>TestCase for simple logging when running with zero configuration
      +38   * other than selecting the SimpleLog implementation.</p>
      +39   *
      +40   * @author Craig R. McClanahan
      +41   * @version $Revision: 425249 $ $Date: 2006-07-25 03:30:16 +0200 (ti, 25 jul 2006) $
      +42   */
      +43  
      +44  public class DefaultConfigTestCase extends TestCase {
      +45  
      +46  
      +47      // ----------------------------------------------------- Instance Variables
      +48  
      +49  
      +50      /**
      +51       * <p>The {@link LogFactory} implementation we have selected.</p>
      +52       */
      +53      protected LogFactory factory = null;
      +54  
      +55  
      +56      /**
      +57       * <p>The {@link Log} implementation we have selected.</p>
      +58       */
      +59      protected Log log = null;
      +60  
      +61  
      +62      // ------------------------------------------- JUnit Infrastructure Methods
      +63  
      +64  
      +65      /**
      +66       * Return the tests included in this test suite.
      +67       * <p>
      +68       * We need to use a PathableClassLoader here because the SimpleLog class
      +69       * is a pile of junk and chock-full of static variables. Any other test
      +70       * (like simple.CustomConfigTestCase) that has used the SimpleLog class
      +71       * will already have caused it to do once-only initialisation that we
      +72       * can't reset, even by calling LogFactory.releaseAll, because of those
      +73       * ugly statics. The only clean solution is to load a clean copy of
      +74       * commons-logging including SimpleLog via a nice clean classloader.
      +75       * Or we could fix SimpleLog to be sane...
      +76       */
      +77      public static Test suite() throws Exception {
      +78          Class thisClass = DefaultConfigTestCase.class;
      +79  
      +80          PathableClassLoader loader = new PathableClassLoader(null);
      +81          loader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +82          loader.addLogicalLib("testclasses");
      +83          loader.addLogicalLib("commons-logging");
      +84          
      +85          Class testClass = loader.loadClass(thisClass.getName());
      +86          return new PathableTestSuite(testClass, loader);
      +87      }
      +88  
      +89      /**
      +90       * Set system properties that will control the LogFactory/Log objects
      +91       * when they are created. Subclasses can override this method to
      +92       * define properties that suit them.
      +93       */
      +94      public void setProperties() {
      +95          System.setProperty(
      +96              "org.apache.commons.logging.Log",
      +97              "org.apache.commons.logging.impl.SimpleLog");
      +98      }
      +99  
      +100     /**
      +101      * Set up instance variables required by this test case.
      +102      */
      +103     public void setUp() throws Exception {
      +104         LogFactory.releaseAll();
      +105         setProperties();
      +106         setUpFactory();
      +107         setUpLog("TestLogger");
      +108     }
      +109 
      +110     /**
      +111      * Tear down instance variables required by this test case.
      +112      */
      +113     public void tearDown() {
      +114         log = null;
      +115         factory = null;
      +116         LogFactory.releaseAll();
      +117     }
      +118 
      +119 
      +120     // ----------------------------------------------------------- Test Methods
      +121 
      +122 
      +123     // Test pristine DecoratedSimpleLog instance
      +124     public void testPristineDecorated() {
      +125 
      +126         setUpDecorated("DecoratedLogger");
      +127         checkDecorated();
      +128 
      +129     }
      +130 
      +131 
      +132     // Test pristine Log instance
      +133     public void testPristineLog() {
      +134 
      +135         checkStandard();
      +136 
      +137     }
      +138 
      +139 
      +140     // Test pristine LogFactory instance
      +141     public void testPristineFactory() {
      +142 
      +143         assertNotNull("LogFactory exists", factory);
      +144         assertEquals("LogFactory class",
      +145                      "org.apache.commons.logging.impl.LogFactoryImpl",
      +146                      factory.getClass().getName());
      +147 
      +148         String names[] = factory.getAttributeNames();
      +149         assertNotNull("Names exists", names);
      +150         assertEquals("Names empty", 0, names.length);
      +151 
      +152     }
      +153 
      +154 
      +155     // Test Serializability of standard instance
      +156     public void testSerializable() throws Exception {
      +157 
      +158         // Serialize and deserialize the instance
      +159         ByteArrayOutputStream baos = new ByteArrayOutputStream();
      +160         ObjectOutputStream oos = new ObjectOutputStream(baos);
      +161         oos.writeObject(log);
      +162         oos.close();
      +163         ByteArrayInputStream bais =
      +164             new ByteArrayInputStream(baos.toByteArray());
      +165         ObjectInputStream ois = new ObjectInputStream(bais);
      +166         log = (Log) ois.readObject();
      +167         ois.close();
      +168 
      +169         // Check the characteristics of the resulting object
      +170         checkStandard();
      +171 
      +172     }
      +173 
      +174 
      +175     // -------------------------------------------------------- Support Methods
      +176 
      +177 
      +178 
      +179     // Check the decorated log instance
      +180     protected void checkDecorated() {
      +181 
      +182         assertNotNull("Log exists", log);
      +183         assertEquals("Log class",
      +184                      "org.apache.commons.logging.simple.DecoratedSimpleLog",
      +185                      log.getClass().getName());
      +186 
      +187         // Can we call level checkers with no exceptions?
      +188         assertTrue(!log.isDebugEnabled());
      +189         assertTrue(log.isErrorEnabled());
      +190         assertTrue(log.isFatalEnabled());
      +191         assertTrue(log.isInfoEnabled());
      +192         assertTrue(!log.isTraceEnabled());
      +193         assertTrue(log.isWarnEnabled());
      +194 
      +195         // Can we retrieve the current log level?
      +196         assertEquals(SimpleLog.LOG_LEVEL_INFO, ((SimpleLog) log).getLevel());
      +197 
      +198         // Can we validate the extra exposed properties?
      +199         assertEquals("yyyy/MM/dd HH:mm:ss:SSS zzz",
      +200                      ((DecoratedSimpleLog) log).getDateTimeFormat());
      +201         assertEquals("DecoratedLogger",
      +202                      ((DecoratedSimpleLog) log).getLogName());
      +203         assertTrue(!((DecoratedSimpleLog) log).getShowDateTime());
      +204         assertTrue(((DecoratedSimpleLog) log).getShowShortName());
      +205 
      +206     }
      +207 
      +208 
      +209     // Check the standard log instance
      +210     protected void checkStandard() {
      +211 
      +212         assertNotNull("Log exists", log);
      +213         assertEquals("Log class",
      +214                      "org.apache.commons.logging.impl.SimpleLog",
      +215                      log.getClass().getName());
      +216 
      +217         // Can we call level checkers with no exceptions?
      +218         assertTrue(!log.isDebugEnabled());
      +219         assertTrue(log.isErrorEnabled());
      +220         assertTrue(log.isFatalEnabled());
      +221         assertTrue(log.isInfoEnabled());
      +222         assertTrue(!log.isTraceEnabled());
      +223         assertTrue(log.isWarnEnabled());
      +224 
      +225         // Can we retrieve the current log level?
      +226         assertEquals(SimpleLog.LOG_LEVEL_INFO, ((SimpleLog) log).getLevel());
      +227 
      +228     }
      +229 
      +230 
      +231     // Set up decorated log instance
      +232     protected void setUpDecorated(String name) {
      +233         log = new DecoratedSimpleLog(name);
      +234     }
      +235 
      +236 
      +237     // Set up factory instance
      +238     protected void setUpFactory() throws Exception {
      +239         factory = LogFactory.getFactory();
      +240     }
      +241 
      +242 
      +243     // Set up log instance
      +244     protected void setUpLog(String name) throws Exception {
      +245         log = LogFactory.getLog(name);
      +246     }
      +247 
      +248 
      +249 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/LogRecord.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/LogRecord.html new file mode 100644 index 0000000..7dd41ba --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/LogRecord.html @@ -0,0 +1,52 @@ + + + + +LogRecord xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.simple;
      +20  
      +21  
      +22  import java.io.Serializable;
      +23  
      +24  
      +25  public class LogRecord implements Serializable {
      +26  
      +27  
      +28      public LogRecord(int type, Object message, Throwable t) {
      +29          this.type = type;
      +30          this.message = message;
      +31          this.t = t;
      +32      }
      +33  
      +34      public int type;
      +35      public Object message;
      +36      public Throwable t;
      +37  
      +38  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-frame.html new file mode 100644 index 0000000..36cf72c --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-frame.html @@ -0,0 +1,36 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.simple + + + + +

      + org.apache.commons.logging.simple +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-summary.html new file mode 100644 index 0000000..c18aff9 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/simple/package-summary.html @@ -0,0 +1,87 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.simple + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.simple

      + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + CustomConfigTestCase +
      + DateTimeCustomConfigTestCase +
      + DecoratedSimpleLog +
      + DefaultConfigTestCase +
      + LogRecord +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/BadTCCLTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/BadTCCLTestCase.html new file mode 100644 index 0000000..b1d5092 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/BadTCCLTestCase.html @@ -0,0 +1,63 @@ + + + + +BadTCCLTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */
      +17  package org.apache.commons.logging.tccl;
      +18  
      +19  import org.apache.commons.logging.Log;
      +20  import org.apache.commons.logging.LogFactory;
      +21  import org.apache.commons.logging.PathableClassLoader;
      +22  import org.apache.commons.logging.PathableTestSuite;
      +23  
      +24  import junit.framework.Test;
      +25  import junit.framework.TestCase;
      +26  
      +27  /**
      +28   * Simulates the case when TCCL is badly set and cannot load JCL.
      +29   */
      +30  public class BadTCCLTestCase extends TestCase {
      +31  
      +32      public static Test suite() throws Exception {
      +33          PathableClassLoader contextClassLoader = new PathableClassLoader(null);
      +34          contextClassLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +35          PathableTestSuite suite = new PathableTestSuite(BadTCCLTestCase.class, contextClassLoader);
      +36          return suite;
      +37      }
      +38  
      +39      // test methods
      +40      
      +41      /**
      +42       * This test just tests that a log implementation can be found
      +43       * by the LogFactory.
      +44       */
      +45      public void testGetLog() {
      +46           Log log = LogFactory.getLog(BadTCCLTestCase.class);
      +47           log.debug("Hello, Mum");
      +48      }
      +49  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/NullTCCLTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/NullTCCLTestCase.html new file mode 100644 index 0000000..bfb9d13 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/NullTCCLTestCase.html @@ -0,0 +1,60 @@ + + + + +NullTCCLTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */
      +17  package org.apache.commons.logging.tccl;
      +18  
      +19  import org.apache.commons.logging.Log;
      +20  import org.apache.commons.logging.LogFactory;
      +21  import org.apache.commons.logging.PathableTestSuite;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  /**
      +27   * Simulates the case when TCCL is set to NULL.
      +28   */
      +29  public class NullTCCLTestCase extends TestCase {
      +30  
      +31      public static Test suite() throws Exception {;
      +32          PathableTestSuite suite = new PathableTestSuite(NullTCCLTestCase.class, null);
      +33          return suite;
      +34      }
      +35  
      +36      // test methods
      +37      
      +38      /**
      +39       * This test just tests that a log implementation can be found
      +40       * by the LogFactory.
      +41       */
      +42      public void testGetLog() {
      +43           Log log = LogFactory.getLog(NullTCCLTestCase.class);
      +44           log.debug("Hello, Mum");
      +45      }
      +46  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLog.html new file mode 100644 index 0000000..f9d497b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLog.html @@ -0,0 +1,58 @@ + + + + +MyLog xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  package org.apache.commons.logging.tccl.custom;
      +18  
      +19  import org.apache.commons.logging.Log;
      +20  
      +21  public class MyLog implements Log {
      +22  
      +23      public MyLog(String category) {}
      +24  
      +25      public boolean isDebugEnabled() { return false; }
      +26      public boolean isErrorEnabled() { return false; }
      +27      public boolean isFatalEnabled() { return false; }
      +28      public boolean isInfoEnabled()  { return false; }
      +29      public boolean isTraceEnabled() { return false; }
      +30      public boolean isWarnEnabled()  { return false; }
      +31  
      +32      public void trace(Object message) {}
      +33      public void trace(Object message, Throwable t) {}
      +34      public void debug(Object message) {}
      +35      public void debug(Object message, Throwable t) {}
      +36      public void info(Object message) {}
      +37      public void info(Object message, Throwable t) {}
      +38      public void warn(Object message) {}
      +39      public void warn(Object message, Throwable t) {}
      +40      public void error(Object message) {}
      +41      public void error(Object message, Throwable t) {}
      +42      public void fatal(Object message) {}
      +43      public void fatal(Object message, Throwable t) {}
      +44  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLogFactoryImpl.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLogFactoryImpl.html new file mode 100644 index 0000000..0cf587a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/MyLogFactoryImpl.html @@ -0,0 +1,46 @@ + + + + +MyLogFactoryImpl xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.tccl.custom;
      +19  
      +20  
      +21  import org.apache.commons.logging.Log;
      +22  import org.apache.commons.logging.LogFactory;
      +23  
      +24  public class MyLogFactoryImpl extends LogFactory {
      +25      public Object getAttribute(String name) { return null; }
      +26      public String[] getAttributeNames() { return null; }
      +27      public Log getInstance(Class clazz) { return null; }
      +28      public Log getInstance(String name) { return null; }
      +29      public void release() {}
      +30      public void removeAttribute(String name) {}
      +31      public void setAttribute(String name, Object value) {}
      +32  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-frame.html new file mode 100644 index 0000000..3b1a4d0 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-frame.html @@ -0,0 +1,27 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl.custom + + + + +

      + org.apache.commons.logging.tccl.custom +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-summary.html new file mode 100644 index 0000000..edd2775 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/custom/package-summary.html @@ -0,0 +1,72 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl.custom + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.tccl.custom

      + + + + + + + + + + + + + + + +
      Class Summary
      + MyLog +
      + MyLogFactoryImpl +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclDisabledTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclDisabledTestCase.html new file mode 100644 index 0000000..b633f86 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclDisabledTestCase.html @@ -0,0 +1,174 @@ + + + + +TcclDisabledTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.tccl.log;
      +19  
      +20  
      +21  import java.net.URL;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  import org.apache.commons.logging.Log;
      +27  import org.apache.commons.logging.LogConfigurationException;
      +28  import org.apache.commons.logging.LogFactory;
      +29  import org.apache.commons.logging.PathableClassLoader;
      +30  import org.apache.commons.logging.PathableTestSuite;
      +31  
      +32  
      +33  /**
      +34   * Verify that by default LogFactoryImpl is loaded from the tccl classloader.
      +35   */
      +36  
      +37  public class TcclDisabledTestCase extends TestCase {
      +38  
      +39      public static final String MY_LOG_PKG = 
      +40          "org.apache.commons.logging.tccl.custom";
      +41  
      +42      public static final String MY_LOG_IMPL =
      +43          MY_LOG_PKG + ".MyLog";
      +44  
      +45      // ------------------------------------------- JUnit Infrastructure Methods
      +46  
      +47      /**
      +48       * Return the tests included in this test suite.
      +49       */
      +50      public static Test suite() throws Exception {
      +51          Class thisClass = TcclDisabledTestCase.class;
      +52  
      +53          // Determine the URL to this .class file, so that we can then
      +54          // append the priority dirs to it. For tidiness, load this
      +55          // class through a dummy loader though this is not absolutely
      +56          // necessary...
      +57          PathableClassLoader dummy = new PathableClassLoader(null);
      +58          dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
      +59          dummy.addLogicalLib("testclasses");
      +60          dummy.addLogicalLib("commons-logging");
      +61          
      +62          String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
      +63          URL baseUrl = dummy.findResource(thisClassPath);
      +64  
      +65          // Now set up the desired classloader hierarchy. Everything goes into
      +66          // the parent classpath, but we exclude the custom Log class.
      +67          //
      +68          // We then create a tccl classloader that can see the custom
      +69          // Log class. Therefore if that class can be found, then the
      +70          // TCCL must have been used to load it.
      +71          PathableClassLoader emptyLoader = new PathableClassLoader(null);
      +72          
      +73          PathableClassLoader parentLoader = new PathableClassLoader(null);
      +74          parentLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +75          parentLoader.addLogicalLib("commons-logging");
      +76          parentLoader.addLogicalLib("testclasses");
      +77          // hack to ensure that the testcase classloader can't see
      +78          // the custom MyLog
      +79          parentLoader.useExplicitLoader(MY_LOG_PKG + ".", emptyLoader);
      +80          
      +81          URL propsEnableUrl = new URL(baseUrl, "props_disable_tccl/");
      +82          parentLoader.addURL(propsEnableUrl);
      +83  
      +84          PathableClassLoader tcclLoader = new PathableClassLoader(parentLoader);
      +85          tcclLoader.addLogicalLib("testclasses");
      +86  
      +87          Class testClass = parentLoader.loadClass(thisClass.getName());
      +88          return new PathableTestSuite(testClass, tcclLoader);
      +89      }
      +90  
      +91      /**
      +92       * Set up instance variables required by this test case.
      +93       */
      +94      public void setUp() throws Exception {
      +95          LogFactory.releaseAll();
      +96      }
      +97  
      +98      /**
      +99       * Tear down instance variables required by this test case.
      +100      */
      +101     public void tearDown() {
      +102         LogFactory.releaseAll();
      +103     }
      +104 
      +105     // ----------------------------------------------------------- Test Methods
      +106 
      +107     /**
      +108      * Verify that MyLog is only loadable via the tccl.
      +109      */
      +110     public void testLoader() throws Exception {
      +111         
      +112         ClassLoader thisClassLoader = this.getClass().getClassLoader();
      +113         ClassLoader tcclLoader = Thread.currentThread().getContextClassLoader();
      +114 
      +115         // the tccl loader should NOT be the same as the loader that loaded this test class.
      +116         assertNotSame("tccl not same as test classloader", thisClassLoader, tcclLoader);
      +117 
      +118         // MyLog should not be loadable via parent loader
      +119         try {
      +120             Class clazz = thisClassLoader.loadClass(MY_LOG_IMPL);
      +121             fail("Unexpectedly able to load MyLog via test class classloader");
      +122             assertNotNull(clazz); // silence warnings about unused var
      +123         } catch(ClassNotFoundException ex) {
      +124             // ok, expected
      +125         }
      +126         
      +127         // MyLog should be loadable via tccl loader
      +128         try {
      +129             Class clazz = tcclLoader.loadClass(MY_LOG_IMPL);
      +130             assertNotNull(clazz);
      +131         } catch(ClassNotFoundException ex) {
      +132             fail("Unexpectedly unable to load MyLog via tccl classloader");
      +133         }
      +134     }
      +135 
      +136     /**
      +137      * Verify that the custom Log implementation which is only accessable
      +138      * via the TCCL has NOT been loaded. Because this is only accessable via the
      +139      * TCCL, and we've use a commons-logging.properties that disables TCCL loading,
      +140      * we should see the default Log rather than the custom one.
      +141      */
      +142     public void testTcclLoading() throws Exception {
      +143         LogFactory instance = LogFactory.getFactory();
      +144         assertEquals(
      +145                 "Correct LogFactory loaded", 
      +146                 "org.apache.commons.logging.impl.LogFactoryImpl",
      +147                 instance.getClass().getName());
      +148 
      +149         try {
      +150             Log log = instance.getInstance("test");
      +151             fail("Unexpectedly succeeded in loading a custom Log class"
      +152                 + " that is only accessable via the tccl.");
      +153             assertNotNull(log); // silence compiler warning about unused var
      +154         } catch(LogConfigurationException ex) {
      +155             // ok, expected
      +156             int index = ex.getMessage().indexOf(MY_LOG_IMPL);
      +157             assertTrue("MyLog not found", index >= 0);
      +158         }
      +159     }
      +160 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclEnabledTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclEnabledTestCase.html new file mode 100644 index 0000000..a31d88c --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/TcclEnabledTestCase.html @@ -0,0 +1,169 @@ + + + + +TcclEnabledTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.tccl.log;
      +19  
      +20  
      +21  import java.net.URL;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  import org.apache.commons.logging.Log;
      +27  import org.apache.commons.logging.LogFactory;
      +28  import org.apache.commons.logging.PathableClassLoader;
      +29  import org.apache.commons.logging.PathableTestSuite;
      +30  
      +31  
      +32  /**
      +33   * Verify that by default the standard LogFactoryImpl class loads a
      +34   * custom Log implementation via the TCCL. 
      +35   */
      +36  
      +37  public class TcclEnabledTestCase extends TestCase {
      +38  
      +39      public static final String MY_LOG_PKG = 
      +40          "org.apache.commons.logging.tccl.custom";
      +41  
      +42      public static final String MY_LOG_IMPL =
      +43          MY_LOG_PKG + ".MyLog";
      +44  
      +45      // ------------------------------------------- JUnit Infrastructure Methods
      +46  
      +47      /**
      +48       * Return the tests included in this test suite.
      +49       */
      +50      public static Test suite() throws Exception {
      +51          Class thisClass = TcclEnabledTestCase.class;
      +52  
      +53          // Determine the URL to this .class file, so that we can then
      +54          // append the priority dirs to it. For tidiness, load this
      +55          // class through a dummy loader though this is not absolutely
      +56          // necessary...
      +57          PathableClassLoader dummy = new PathableClassLoader(null);
      +58          dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
      +59          dummy.addLogicalLib("testclasses");
      +60          dummy.addLogicalLib("commons-logging");
      +61          
      +62          String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
      +63          URL baseUrl = dummy.findResource(thisClassPath);
      +64  
      +65          // Now set up the desired classloader hierarchy. Everything goes into
      +66          // the parent classpath, but we exclude the custom Log class.
      +67          //
      +68          // We then create a tccl classloader that can see the custom
      +69          // Log class. Therefore if that class can be found, then the
      +70          // TCCL must have been used to load it.
      +71          PathableClassLoader emptyLoader = new PathableClassLoader(null);
      +72          
      +73          PathableClassLoader parentLoader = new PathableClassLoader(null);
      +74          parentLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +75          parentLoader.addLogicalLib("commons-logging");
      +76          parentLoader.addLogicalLib("testclasses");
      +77          // hack to ensure that the testcase classloader can't see
      +78          // the custom MyLogFactoryImpl
      +79          parentLoader.useExplicitLoader(MY_LOG_PKG + ".", emptyLoader);
      +80          
      +81          URL propsEnableUrl = new URL(baseUrl, "props_enable_tccl/");
      +82          parentLoader.addURL(propsEnableUrl);
      +83  
      +84          PathableClassLoader tcclLoader = new PathableClassLoader(parentLoader);
      +85          tcclLoader.addLogicalLib("testclasses");
      +86  
      +87          Class testClass = parentLoader.loadClass(thisClass.getName());
      +88          return new PathableTestSuite(testClass, tcclLoader);
      +89      }
      +90  
      +91      /**
      +92       * Set up instance variables required by this test case.
      +93       */
      +94      public void setUp() throws Exception {
      +95          LogFactory.releaseAll();
      +96      }
      +97  
      +98      /**
      +99       * Tear down instance variables required by this test case.
      +100      */
      +101     public void tearDown() {
      +102         LogFactory.releaseAll();
      +103     }
      +104 
      +105     // ----------------------------------------------------------- Test Methods
      +106 
      +107     /**
      +108      * Verify that MyLogFactoryImpl is only loadable via the tccl.
      +109      */
      +110     public void testLoader() throws Exception {
      +111         
      +112         ClassLoader thisClassLoader = this.getClass().getClassLoader();
      +113         ClassLoader tcclLoader = Thread.currentThread().getContextClassLoader();
      +114         
      +115         // the tccl loader should NOT be the same as the loader that loaded this test class.
      +116         assertNotSame("tccl not same as test classloader", thisClassLoader, tcclLoader);
      +117 
      +118         // MyLog should not be loadable via parent loader
      +119         try {
      +120             Class clazz = thisClassLoader.loadClass(MY_LOG_IMPL);
      +121             fail("Unexpectedly able to load MyLog via test class classloader");
      +122             assertNotNull(clazz); // silence warnings about unused var
      +123         } catch(ClassNotFoundException ex) {
      +124             // ok, expected
      +125         }
      +126         
      +127         // MyLog should be loadable via tccl loader
      +128         try {
      +129             Class clazz = tcclLoader.loadClass(MY_LOG_IMPL);
      +130             assertNotNull(clazz);
      +131         } catch(ClassNotFoundException ex) {
      +132             fail("Unexpectedly unable to load MyLog via tccl classloader");
      +133         }
      +134     }
      +135 
      +136     /**
      +137      * Verify that the custom Log implementation which is only accessable
      +138      * via the TCCL has successfully been loaded as specified in the config file.
      +139      * This proves that the TCCL was used to load that class.
      +140      */
      +141     public void testTcclLoading() throws Exception {
      +142         LogFactory instance = LogFactory.getFactory();
      +143         
      +144         assertEquals(
      +145             "Correct LogFactory loaded", 
      +146             "org.apache.commons.logging.impl.LogFactoryImpl",
      +147             instance.getClass().getName());
      +148 
      +149         Log log = instance.getInstance("test");
      +150         assertEquals(
      +151             "Correct Log loaded",
      +152             MY_LOG_IMPL,
      +153             log.getClass().getName());
      +154     }
      +155 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-frame.html new file mode 100644 index 0000000..4fa2ecd --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-frame.html @@ -0,0 +1,27 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl.log + + + + +

      + org.apache.commons.logging.tccl.log +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-summary.html new file mode 100644 index 0000000..93c4bc7 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/log/package-summary.html @@ -0,0 +1,72 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl.log + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.tccl.log

      + + + + + + + + + + + + + + + +
      Class Summary
      + TcclDisabledTestCase +
      + TcclEnabledTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclDisabledTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclDisabledTestCase.html new file mode 100644 index 0000000..28ac1a2 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclDisabledTestCase.html @@ -0,0 +1,170 @@ + + + + +TcclDisabledTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.tccl.logfactory;
      +19  
      +20  
      +21  import java.net.URL;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  import org.apache.commons.logging.LogFactory;
      +27  import org.apache.commons.logging.PathableClassLoader;
      +28  import org.apache.commons.logging.PathableTestSuite;
      +29  
      +30  
      +31  /**
      +32   * Verify that a commons-logging.properties file can prevent a custom
      +33   * LogFactoryImpl being loaded from the tccl classloader.
      +34   */
      +35  
      +36  public class TcclDisabledTestCase extends TestCase {
      +37  
      +38      public static final String MY_LOG_FACTORY_PKG = 
      +39          "org.apache.commons.logging.tccl.custom";
      +40  
      +41      public static final String MY_LOG_FACTORY_IMPL =
      +42          MY_LOG_FACTORY_PKG + ".MyLogFactoryImpl";
      +43  
      +44      // ------------------------------------------- JUnit Infrastructure Methods
      +45  
      +46  
      +47      /**
      +48       * Return the tests included in this test suite.
      +49       */
      +50      public static Test suite() throws Exception {
      +51          Class thisClass = TcclDisabledTestCase.class;
      +52  
      +53          // Determine the URL to this .class file, so that we can then
      +54          // append the priority dirs to it. For tidiness, load this
      +55          // class through a dummy loader though this is not absolutely
      +56          // necessary...
      +57          PathableClassLoader dummy = new PathableClassLoader(null);
      +58          dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
      +59          dummy.addLogicalLib("testclasses");
      +60          dummy.addLogicalLib("commons-logging");
      +61          
      +62          String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
      +63          URL baseUrl = dummy.findResource(thisClassPath);
      +64  
      +65          // Now set up the desired classloader hierarchy. Everything goes into
      +66          // the parent classpath, but we exclude the custom LogFactoryImpl
      +67          // class.
      +68          //
      +69          // We then create a tccl classloader that can see the custom
      +70          // LogFactory class. Therefore if that class can be found, then the
      +71          // TCCL must have been used to load it.
      +72          PathableClassLoader emptyLoader = new PathableClassLoader(null);
      +73          
      +74          PathableClassLoader parentLoader = new PathableClassLoader(null);
      +75          parentLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +76          parentLoader.addLogicalLib("commons-logging");
      +77          parentLoader.addLogicalLib("testclasses");
      +78          // hack to ensure that the testcase classloader can't see
      +79          // the custom MyLogFactoryImpl
      +80          parentLoader.useExplicitLoader(
      +81              MY_LOG_FACTORY_PKG + ".", emptyLoader);
      +82          
      +83          URL propsEnableUrl = new URL(baseUrl, "props_disable_tccl/");
      +84          parentLoader.addURL(propsEnableUrl);
      +85  
      +86          PathableClassLoader tcclLoader = new PathableClassLoader(parentLoader);
      +87          tcclLoader.addLogicalLib("testclasses");
      +88  
      +89          Class testClass = parentLoader.loadClass(thisClass.getName());
      +90          return new PathableTestSuite(testClass, tcclLoader);
      +91      }
      +92  
      +93      /**
      +94       * Set up instance variables required by this test case.
      +95       */
      +96      public void setUp() throws Exception {
      +97          LogFactory.releaseAll();
      +98      }
      +99  
      +100     /**
      +101      * Tear down instance variables required by this test case.
      +102      */
      +103     public void tearDown() {
      +104         LogFactory.releaseAll();
      +105     }
      +106 
      +107     // ----------------------------------------------------------- Test Methods
      +108 
      +109     /**
      +110      * Verify that MyLogFactoryImpl is only loadable via the tccl.
      +111      */
      +112     public void testLoader() throws Exception {
      +113         
      +114         ClassLoader thisClassLoader = this.getClass().getClassLoader();
      +115         ClassLoader tcclLoader = Thread.currentThread().getContextClassLoader();
      +116 
      +117         // the tccl loader should NOT be the same as the loader that loaded this test class.
      +118         assertNotSame("tccl not same as test classloader", thisClassLoader, tcclLoader);
      +119 
      +120         // MyLogFactoryImpl should not be loadable via parent loader
      +121         try {
      +122             Class clazz = thisClassLoader.loadClass(MY_LOG_FACTORY_IMPL);
      +123             fail("Unexpectedly able to load MyLogFactoryImpl via test class classloader");
      +124             assertNotNull(clazz); // silence warning about unused var
      +125         } catch(ClassNotFoundException ex) {
      +126             // ok, expected
      +127         }
      +128         
      +129         // MyLogFactoryImpl should be loadable via tccl loader
      +130         try {
      +131             Class clazz = tcclLoader.loadClass(MY_LOG_FACTORY_IMPL);
      +132             assertNotNull(clazz);
      +133         } catch(ClassNotFoundException ex) {
      +134             fail("Unexpectedly unable to load MyLogFactoryImpl via tccl classloader");
      +135         }
      +136     }
      +137 
      +138     /**
      +139      * Verify that the custom LogFactory implementation which is only accessable
      +140      * via the TCCL has NOT been loaded. Because this is only accessable via the
      +141      * TCCL, and we've use a commons-logging.properties that disables TCCL loading,
      +142      * we should see the default LogFactoryImpl rather than the custom one.
      +143      */
      +144     public void testTcclLoading() throws Exception {
      +145         try {
      +146             LogFactory instance = LogFactory.getFactory();
      +147             fail("Unexpectedly succeeded in loading custom factory, though TCCL disabled.");
      +148             assertNotNull(instance); // silence warning about unused var
      +149         } catch(org.apache.commons.logging.LogConfigurationException ex) {
      +150             // ok, custom MyLogFactoryImpl as specified in props_disable_tccl
      +151             // could not be found.
      +152             int index = ex.getMessage().indexOf(MY_LOG_FACTORY_IMPL);
      +153             assertTrue("MylogFactoryImpl not found", index >= 0);
      +154         }
      +155     }
      +156 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclEnabledTestCase.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclEnabledTestCase.html new file mode 100644 index 0000000..d6d991b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/TcclEnabledTestCase.html @@ -0,0 +1,161 @@ + + + + +TcclEnabledTestCase xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.tccl.logfactory;
      +19  
      +20  
      +21  import java.net.URL;
      +22  
      +23  import junit.framework.Test;
      +24  import junit.framework.TestCase;
      +25  
      +26  import org.apache.commons.logging.LogFactory;
      +27  import org.apache.commons.logging.PathableClassLoader;
      +28  import org.apache.commons.logging.PathableTestSuite;
      +29  
      +30  
      +31  /**
      +32   * Verify that by default a custom LogFactoryImpl is loaded from the
      +33   * tccl classloader.
      +34   */
      +35  
      +36  public class TcclEnabledTestCase extends TestCase {
      +37  
      +38      // ------------------------------------------- JUnit Infrastructure Methods
      +39  
      +40  
      +41      /**
      +42       * Return the tests included in this test suite.
      +43       */
      +44      public static Test suite() throws Exception {
      +45          Class thisClass = TcclEnabledTestCase.class;
      +46  
      +47          // Determine the URL to this .class file, so that we can then
      +48          // append the priority dirs to it. For tidiness, load this
      +49          // class through a dummy loader though this is not absolutely
      +50          // necessary...
      +51          PathableClassLoader dummy = new PathableClassLoader(null);
      +52          dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
      +53          dummy.addLogicalLib("testclasses");
      +54          dummy.addLogicalLib("commons-logging");
      +55          
      +56          String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
      +57          URL baseUrl = dummy.findResource(thisClassPath);
      +58  
      +59          // Now set up the desired classloader hierarchy. Everything goes into
      +60          // the parent classpath, but we exclude the custom LogFactoryImpl
      +61          // class.
      +62          //
      +63          // We then create a tccl classloader that can see the custom
      +64          // LogFactory class. Therefore if that class can be found, then the
      +65          // TCCL must have been used to load it.
      +66          PathableClassLoader emptyLoader = new PathableClassLoader(null);
      +67          
      +68          PathableClassLoader parentLoader = new PathableClassLoader(null);
      +69          parentLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
      +70          parentLoader.addLogicalLib("commons-logging");
      +71          parentLoader.addLogicalLib("testclasses");
      +72          // hack to ensure that the testcase classloader can't see
      +73          // the cust MyLogFactoryImpl
      +74          parentLoader.useExplicitLoader(
      +75              "org.apache.commons.logging.tccl.custom.", emptyLoader);
      +76          
      +77          URL propsEnableUrl = new URL(baseUrl, "props_enable_tccl/");
      +78          parentLoader.addURL(propsEnableUrl);
      +79  
      +80          PathableClassLoader tcclLoader = new PathableClassLoader(parentLoader);
      +81          tcclLoader.addLogicalLib("testclasses");
      +82  
      +83          Class testClass = parentLoader.loadClass(thisClass.getName());
      +84          return new PathableTestSuite(testClass, tcclLoader);
      +85      }
      +86  
      +87      /**
      +88       * Set up instance variables required by this test case.
      +89       */
      +90      public void setUp() throws Exception {
      +91          LogFactory.releaseAll();
      +92      }
      +93  
      +94      /**
      +95       * Tear down instance variables required by this test case.
      +96       */
      +97      public void tearDown() {
      +98          LogFactory.releaseAll();
      +99      }
      +100 
      +101     // ----------------------------------------------------------- Test Methods
      +102 
      +103     /**
      +104      * Verify that MyLogFactoryImpl is only loadable via the tccl.
      +105      */
      +106     public void testLoader() throws Exception {
      +107         
      +108         ClassLoader thisClassLoader = this.getClass().getClassLoader();
      +109         ClassLoader tcclLoader = Thread.currentThread().getContextClassLoader();
      +110 
      +111         // the tccl loader should NOT be the same as the loader that loaded this test class.
      +112         assertNotSame("tccl not same as test classloader", thisClassLoader, tcclLoader);
      +113 
      +114         // MyLogFactoryImpl should not be loadable via parent loader
      +115         try {
      +116             Class clazz = thisClassLoader.loadClass(
      +117                 "org.apache.commons.logging.tccl.custom.MyLogFactoryImpl");
      +118             fail("Unexpectedly able to load MyLogFactoryImpl via test class classloader");
      +119             assertNotNull(clazz); // silence warning about unused var
      +120         } catch(ClassNotFoundException ex) {
      +121             // ok, expected
      +122         }
      +123         
      +124         // MyLogFactoryImpl should be loadable via tccl loader
      +125         try {
      +126             Class clazz = tcclLoader.loadClass(
      +127                 "org.apache.commons.logging.tccl.custom.MyLogFactoryImpl");
      +128             assertNotNull(clazz);
      +129         } catch(ClassNotFoundException ex) {
      +130             fail("Unexpectedly unable to load MyLogFactoryImpl via tccl classloader");
      +131         }
      +132     }
      +133 
      +134     /**
      +135      * Verify that the custom LogFactory implementation which is only accessable
      +136      * via the TCCL has successfully been loaded as specified in the config file.
      +137      * This proves that the TCCL was used to load that class.
      +138      */
      +139     public void testTcclLoading() throws Exception {
      +140         LogFactory instance = LogFactory.getFactory();
      +141         
      +142         assertEquals(
      +143             "Correct LogFactory loaded", 
      +144             "org.apache.commons.logging.tccl.custom.MyLogFactoryImpl",
      +145             instance.getClass().getName());
      +146     }
      +147 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-frame.html new file mode 100644 index 0000000..e1ed6a5 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-frame.html @@ -0,0 +1,27 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl.logfactory + + + + +

      + org.apache.commons.logging.tccl.logfactory +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-summary.html new file mode 100644 index 0000000..f3ab575 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/logfactory/package-summary.html @@ -0,0 +1,72 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl.logfactory + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.tccl.logfactory

      + + + + + + + + + + + + + + + +
      Class Summary
      + TcclDisabledTestCase +
      + TcclEnabledTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-frame.html new file mode 100644 index 0000000..41b10fe --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-frame.html @@ -0,0 +1,27 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl + + + + +

      + org.apache.commons.logging.tccl +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-summary.html new file mode 100644 index 0000000..f2a3a87 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/org/apache/commons/logging/tccl/package-summary.html @@ -0,0 +1,72 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.tccl + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.tccl

      + + + + + + + + + + + + + + + +
      Class Summary
      + BadTCCLTestCase +
      + NullTCCLTestCase +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-frame.html new file mode 100644 index 0000000..70b0a97 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-frame.html @@ -0,0 +1,73 @@ + + + + + + Commons Logging 1.1.1 Reference + + + + +

      + All Classes +

      + +

      Packages

      + + + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-summary.html new file mode 100644 index 0000000..7ae443f --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/overview-summary.html @@ -0,0 +1,144 @@ + + + + + + Commons Logging 1.1.1 Reference + + + +
      +
        +
      • Overview
      • +
      • Package
      • +
      +
      +
      + +
      + +

      Commons Logging 1.1.1 Reference

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Packages
      + org.apache.commons.logging +
      + org.apache.commons.logging.avalon +
      + org.apache.commons.logging.config +
      + org.apache.commons.logging.impl +
      + org.apache.commons.logging.jdk14 +
      + org.apache.commons.logging.log4j +
      + org.apache.commons.logging.log4j.log4j12 +
      + org.apache.commons.logging.logkit +
      + org.apache.commons.logging.noop +
      + org.apache.commons.logging.pathable +
      + org.apache.commons.logging.security +
      + org.apache.commons.logging.servlet +
      + org.apache.commons.logging.simple +
      + org.apache.commons.logging.tccl +
      + org.apache.commons.logging.tccl.custom +
      + org.apache.commons.logging.tccl.log +
      + org.apache.commons.logging.tccl.logfactory +
      + +
      +
        +
      • Overview
      • +
      • Package
      • +
      +
      +
      + +
      + +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/stylesheet.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/stylesheet.css new file mode 100644 index 0000000..00e6114 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref-test/stylesheet.css @@ -0,0 +1,116 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +body { + background-color: #fff; + font-family: Arial, Helvetica, sans-serif; +} + +a:link { + color: #00f; +} +a:visited { + color: #00a; +} + +a:active, a:hover { + color: #f30 !important; +} + +ul, li { + list-style-type:none; + margin:0; + padding:0; +} + +table td { + padding: 3px; + border: 1px solid #000; +} +table { + width:100%; + border: 1px solid #000; + border-collapse: collapse; +} + +div.overview { + background-color:#ddd; + padding: 4px 4px 4px 0; +} +div.overview li, div.framenoframe li { + display: inline; +} +div.framenoframe { + text-align: center; + font-size: x-small; +} +div.framenoframe li { + margin: 0 3px 0 3px; +} +div.overview li { + margin:3px 3px 0 3px; + padding: 4px; +} +li.selected { + background-color:#888; + color: #fff; + font-weight: bold; +} + +table.summary { + margin-bottom: 20px; +} +table.summary td, table.summary th { + font-weight: bold; + text-align: left; + padding: 3px; +} +table.summary th { + background-color:#036; + color: #fff; +} +table.summary td { + background-color:#eee; + border: 1px solid black; +} + +em { + color: #A00; +} +em.comment { + color: #390; +} +.string { + color: #009; +} +div#footer { + text-align:center; +} +#overview { + padding:2px; +} + +hr { + height: 1px; + color: #000; +} + +/* JXR style sheet */ +.jxr_comment +{ + color: #390; +} + +.jxr_javadoccomment +{ + color: #A00; +} + +.jxr_string +{ + color: #009; +} + +.jxr_keyword +{ + color: #000; +} diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/allclasses-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/allclasses-frame.html new file mode 100644 index 0000000..180407b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/allclasses-frame.html @@ -0,0 +1,68 @@ + + + + + + All Classes + + + + +

      All Classes

      + + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/index.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/index.html new file mode 100644 index 0000000..460f417 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/index.html @@ -0,0 +1,24 @@ + + + + + + Commons Logging 1.1.1 Reference + + + + + + + + + <body> + <h1>Frame Alert</h1> + <p> + You don't have frames. Go <a href="overview-summary.html">here</a> + </p> + </body> + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/Log.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/Log.html new file mode 100644 index 0000000..0e96b83 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/Log.html @@ -0,0 +1,260 @@ + + + + +Log xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging;
      +20  
      +21  /**
      +22   * <p>A simple logging interface abstracting logging APIs.  In order to be
      +23   * instantiated successfully by {@link LogFactory}, classes that implement
      +24   * this interface must have a constructor that takes a single String
      +25   * parameter representing the "name" of this Log.</p>
      +26   *
      +27   * <p> The six logging levels used by <code>Log</code> are (in order):
      +28   * <ol>
      +29   * <li>trace (the least serious)</li>
      +30   * <li>debug</li>
      +31   * <li>info</li>
      +32   * <li>warn</li>
      +33   * <li>error</li>
      +34   * <li>fatal (the most serious)</li>
      +35   * </ol>
      +36   * The mapping of these log levels to the concepts used by the underlying
      +37   * logging system is implementation dependent.
      +38   * The implemention should ensure, though, that this ordering behaves
      +39   * as expected.</p>
      +40   *
      +41   * <p>Performance is often a logging concern.
      +42   * By examining the appropriate property,
      +43   * a component can avoid expensive operations (producing information
      +44   * to be logged).</p>
      +45   *
      +46   * <p> For example,
      +47   * <code><pre>
      +48   *    if (log.isDebugEnabled()) {
      +49   *        ... do something expensive ...
      +50   *        log.debug(theResult);
      +51   *    }
      +52   * </pre></code>
      +53   * </p>
      +54   *
      +55   * <p>Configuration of the underlying logging system will generally be done
      +56   * external to the Logging APIs, through whatever mechanism is supported by
      +57   * that system.</p>
      +58   *
      +59   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +60   * @author Rod Waldhoff
      +61   * @version $Id: Log.java 424107 2006-07-20 23:15:42Z skitching $
      +62   */
      +63  public interface Log {
      +64  
      +65  
      +66      // ----------------------------------------------------- Logging Properties
      +67  
      +68  
      +69      /**
      +70       * <p> Is debug logging currently enabled? </p>
      +71       *
      +72       * <p> Call this method to prevent having to perform expensive operations
      +73       * (for example, <code>String</code> concatenation)
      +74       * when the log level is more than debug. </p>
      +75       *
      +76       * @return true if debug is enabled in the underlying logger.
      +77       */
      +78      public boolean isDebugEnabled();
      +79  
      +80  
      +81      /**
      +82       * <p> Is error logging currently enabled? </p>
      +83       *
      +84       * <p> Call this method to prevent having to perform expensive operations
      +85       * (for example, <code>String</code> concatenation)
      +86       * when the log level is more than error. </p>
      +87       *
      +88       * @return true if error is enabled in the underlying logger.
      +89       */
      +90      public boolean isErrorEnabled();
      +91  
      +92  
      +93      /**
      +94       * <p> Is fatal logging currently enabled? </p>
      +95       *
      +96       * <p> Call this method to prevent having to perform expensive operations
      +97       * (for example, <code>String</code> concatenation)
      +98       * when the log level is more than fatal. </p>
      +99       *
      +100      * @return true if fatal is enabled in the underlying logger.
      +101      */
      +102     public boolean isFatalEnabled();
      +103 
      +104 
      +105     /**
      +106      * <p> Is info logging currently enabled? </p>
      +107      *
      +108      * <p> Call this method to prevent having to perform expensive operations
      +109      * (for example, <code>String</code> concatenation)
      +110      * when the log level is more than info. </p>
      +111      *
      +112      * @return true if info is enabled in the underlying logger.
      +113      */
      +114     public boolean isInfoEnabled();
      +115 
      +116 
      +117     /**
      +118      * <p> Is trace logging currently enabled? </p>
      +119      *
      +120      * <p> Call this method to prevent having to perform expensive operations
      +121      * (for example, <code>String</code> concatenation)
      +122      * when the log level is more than trace. </p>
      +123      *
      +124      * @return true if trace is enabled in the underlying logger.
      +125      */
      +126     public boolean isTraceEnabled();
      +127 
      +128 
      +129     /**
      +130      * <p> Is warn logging currently enabled? </p>
      +131      *
      +132      * <p> Call this method to prevent having to perform expensive operations
      +133      * (for example, <code>String</code> concatenation)
      +134      * when the log level is more than warn. </p>
      +135      *
      +136      * @return true if warn is enabled in the underlying logger.
      +137      */
      +138     public boolean isWarnEnabled();
      +139 
      +140 
      +141     // -------------------------------------------------------- Logging Methods
      +142 
      +143 
      +144     /**
      +145      * <p> Log a message with trace log level. </p>
      +146      *
      +147      * @param message log this message
      +148      */
      +149     public void trace(Object message);
      +150 
      +151 
      +152     /**
      +153      * <p> Log an error with trace log level. </p>
      +154      *
      +155      * @param message log this message
      +156      * @param t log this cause
      +157      */
      +158     public void trace(Object message, Throwable t);
      +159 
      +160 
      +161     /**
      +162      * <p> Log a message with debug log level. </p>
      +163      *
      +164      * @param message log this message
      +165      */
      +166     public void debug(Object message);
      +167 
      +168 
      +169     /**
      +170      * <p> Log an error with debug log level. </p>
      +171      *
      +172      * @param message log this message
      +173      * @param t log this cause
      +174      */
      +175     public void debug(Object message, Throwable t);
      +176 
      +177 
      +178     /**
      +179      * <p> Log a message with info log level. </p>
      +180      *
      +181      * @param message log this message
      +182      */
      +183     public void info(Object message);
      +184 
      +185 
      +186     /**
      +187      * <p> Log an error with info log level. </p>
      +188      *
      +189      * @param message log this message
      +190      * @param t log this cause
      +191      */
      +192     public void info(Object message, Throwable t);
      +193 
      +194 
      +195     /**
      +196      * <p> Log a message with warn log level. </p>
      +197      *
      +198      * @param message log this message
      +199      */
      +200     public void warn(Object message);
      +201 
      +202 
      +203     /**
      +204      * <p> Log an error with warn log level. </p>
      +205      *
      +206      * @param message log this message
      +207      * @param t log this cause
      +208      */
      +209     public void warn(Object message, Throwable t);
      +210 
      +211 
      +212     /**
      +213      * <p> Log a message with error log level. </p>
      +214      *
      +215      * @param message log this message
      +216      */
      +217     public void error(Object message);
      +218 
      +219 
      +220     /**
      +221      * <p> Log an error with error log level. </p>
      +222      *
      +223      * @param message log this message
      +224      * @param t log this cause
      +225      */
      +226     public void error(Object message, Throwable t);
      +227 
      +228 
      +229     /**
      +230      * <p> Log a message with fatal log level. </p>
      +231      *
      +232      * @param message log this message
      +233      */
      +234     public void fatal(Object message);
      +235 
      +236 
      +237     /**
      +238      * <p> Log an error with fatal log level. </p>
      +239      *
      +240      * @param message log this message
      +241      * @param t log this cause
      +242      */
      +243     public void fatal(Object message, Throwable t);
      +244 
      +245 
      +246 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogConfigurationException.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogConfigurationException.html new file mode 100644 index 0000000..9985cf1 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogConfigurationException.html @@ -0,0 +1,112 @@ + + + + +LogConfigurationException xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  
      +21  /**
      +22   * <p>An exception that is thrown only if a suitable <code>LogFactory</code>
      +23   * or <code>Log</code> instance cannot be created by the corresponding
      +24   * factory methods.</p>
      +25   *
      +26   * @author Craig R. McClanahan
      +27   * @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +28   */
      +29  
      +30  public class LogConfigurationException extends RuntimeException {
      +31  
      +32  
      +33      /**
      +34       * Construct a new exception with <code>null</code> as its detail message.
      +35       */
      +36      public LogConfigurationException() {
      +37  
      +38          super();
      +39  
      +40      }
      +41  
      +42  
      +43      /**
      +44       * Construct a new exception with the specified detail message.
      +45       *
      +46       * @param message The detail message
      +47       */
      +48      public LogConfigurationException(String message) {
      +49  
      +50          super(message);
      +51  
      +52      }
      +53  
      +54  
      +55      /**
      +56       * Construct a new exception with the specified cause and a derived
      +57       * detail message.
      +58       *
      +59       * @param cause The underlying cause
      +60       */
      +61      public LogConfigurationException(Throwable cause) {
      +62  
      +63          this((cause == null) ? null : cause.toString(), cause);
      +64  
      +65      }
      +66  
      +67  
      +68      /**
      +69       * Construct a new exception with the specified detail message and cause.
      +70       *
      +71       * @param message The detail message
      +72       * @param cause The underlying cause
      +73       */
      +74      public LogConfigurationException(String message, Throwable cause) {
      +75  
      +76          super(message + " (Caused by " + cause + ")");
      +77          this.cause = cause; // Two-argument version requires JDK 1.4 or later
      +78  
      +79      }
      +80  
      +81  
      +82      /**
      +83       * The underlying cause of this exception.
      +84       */
      +85      protected Throwable cause = null;
      +86  
      +87  
      +88      /**
      +89       * Return the underlying cause of this exception (if any).
      +90       */
      +91      public Throwable getCause() {
      +92  
      +93          return (this.cause);
      +94  
      +95      }
      +96  
      +97  
      +98  }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogFactory.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogFactory.html new file mode 100644 index 0000000..6b2541a --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogFactory.html @@ -0,0 +1,1838 @@ + + + + +LogFactory xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  
      +21  import java.io.BufferedReader;
      +22  import java.io.FileOutputStream;
      +23  import java.io.IOException;
      +24  import java.io.InputStream;
      +25  import java.io.InputStreamReader;
      +26  import java.io.PrintStream;
      +27  import java.lang.reflect.InvocationTargetException;
      +28  import java.lang.reflect.Method;
      +29  import java.net.URL;
      +30  import java.security.AccessController;
      +31  import java.security.PrivilegedAction;
      +32  import java.util.Enumeration;
      +33  import java.util.Hashtable;
      +34  import java.util.Properties;
      +35  
      +36  
      +37  /**
      +38   * <p>Factory for creating {@link Log} instances, with discovery and
      +39   * configuration features similar to that employed by standard Java APIs
      +40   * such as JAXP.</p>
      +41   * 
      +42   * <p><strong>IMPLEMENTATION NOTE</strong> - This implementation is heavily
      +43   * based on the SAXParserFactory and DocumentBuilderFactory implementations
      +44   * (corresponding to the JAXP pluggability APIs) found in Apache Xerces.</p>
      +45   *
      +46   * @author Craig R. McClanahan
      +47   * @author Costin Manolache
      +48   * @author Richard A. Sitze
      +49   * @version $Revision: 593798 $ $Date: 2007-11-10 18:40:43 +0100 $
      +50   */
      +51  
      +52  public abstract class LogFactory {
      +53      // Implementation note re AccessController usage
      +54      //
      +55      // It is important to keep code invoked via an AccessController to small
      +56      // auditable blocks. Such code must carefully evaluate all user input
      +57      // (parameters, system properties, config file contents, etc). As an 
      +58      // example, a Log implementation should not write to its logfile
      +59      // with an AccessController anywhere in the call stack, otherwise an
      +60      // insecure application could configure the log implementation to write
      +61      // to a protected file using the privileges granted to JCL rather than
      +62      // to the calling application.
      +63      //
      +64      // Under no circumstance should a non-private method return data that is
      +65      // retrieved via an AccessController. That would allow an insecure app
      +66      // to invoke that method and obtain data that it is not permitted to have.
      +67      //
      +68      // Invoking user-supplied code with an AccessController set is not a major
      +69      // issue (eg invoking the constructor of the class specified by 
      +70      // HASHTABLE_IMPLEMENTATION_PROPERTY). That class will be in a different
      +71      // trust domain, and therefore must have permissions to do whatever it
      +72      // is trying to do regardless of the permissions granted to JCL. There is
      +73      // a slight issue in that untrusted code may point that environment var
      +74      // to another trusted library, in which case the code runs if both that
      +75      // lib and JCL have the necessary permissions even when the untrusted
      +76      // caller does not. That's a pretty hard route to exploit though.
      +77  
      +78  
      +79      // ----------------------------------------------------- Manifest Constants
      +80  
      +81      /**
      +82       * The name (<code>priority</code>) of the key in the config file used to 
      +83       * specify the priority of that particular config file. The associated value 
      +84       * is a floating-point number; higher values take priority over lower values.
      +85       */
      +86      public static final String PRIORITY_KEY = "priority";
      +87  
      +88      /**
      +89       * The name (<code>use_tccl</code>) of the key in the config file used 
      +90       * to specify whether logging classes should be loaded via the thread 
      +91       * context class loader (TCCL), or not. By default, the TCCL is used.
      +92       */
      +93      public static final String TCCL_KEY = "use_tccl";
      +94  
      +95      /**
      +96       * The name (<code>org.apache.commons.logging.LogFactory</code>) of the property 
      +97       * used to identify the LogFactory implementation
      +98       * class name. This can be used as a system property, or as an entry in a
      +99       * configuration properties file.
      +100      */
      +101     public static final String FACTORY_PROPERTY =
      +102         "org.apache.commons.logging.LogFactory";
      +103 
      +104     /**
      +105      * The fully qualified class name of the fallback <code>LogFactory</code>
      +106      * implementation class to use, if no other can be found.
      +107      */
      +108     public static final String FACTORY_DEFAULT =
      +109         "org.apache.commons.logging.impl.LogFactoryImpl";
      +110 
      +111     /**
      +112      * The name (<code>commons-logging.properties</code>) of the properties file to search for.
      +113      */
      +114     public static final String FACTORY_PROPERTIES =
      +115         "commons-logging.properties";
      +116 
      +117     /**
      +118      * JDK1.3+ <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider">
      +119      * 'Service Provider' specification</a>.
      +120      * 
      +121      */
      +122     protected static final String SERVICE_ID =
      +123         "META-INF/services/org.apache.commons.logging.LogFactory";
      +124 
      +125     /**
      +126      * The name (<code>org.apache.commons.logging.diagnostics.dest</code>) 
      +127      * of the property used to enable internal commons-logging
      +128      * diagnostic output, in order to get information on what logging
      +129      * implementations are being discovered, what classloaders they 
      +130      * are loaded through, etc.
      +131      * <p>
      +132      * If a system property of this name is set then the value is
      +133      * assumed to be the name of a file. The special strings
      +134      * STDOUT or STDERR (case-sensitive) indicate output to
      +135      * System.out and System.err respectively.
      +136      * <p>
      +137      * Diagnostic logging should be used only to debug problematic
      +138      * configurations and should not be set in normal production use.
      +139      */
      +140     public static final String DIAGNOSTICS_DEST_PROPERTY =
      +141         "org.apache.commons.logging.diagnostics.dest";
      +142 
      +143     /**
      +144      * When null (the usual case), no diagnostic output will be
      +145      * generated by LogFactory or LogFactoryImpl. When non-null,
      +146      * interesting events will be written to the specified object.
      +147      */
      +148     private static PrintStream diagnosticsStream = null;
      +149     
      +150     /**
      +151      * A string that gets prefixed to every message output by the
      +152      * logDiagnostic method, so that users can clearly see which
      +153      * LogFactory class is generating the output.
      +154      */
      +155     private static String diagnosticPrefix;
      +156     
      +157     /**
      +158      * <p>Setting this system property 
      +159      * (<code>org.apache.commons.logging.LogFactory.HashtableImpl</code>) 
      +160      * value allows the <code>Hashtable</code> used to store
      +161      * classloaders to be substituted by an alternative implementation.
      +162      * </p>
      +163      * <p>
      +164      * <strong>Note:</strong> <code>LogFactory</code> will print:
      +165      * <code><pre>
      +166      * [ERROR] LogFactory: Load of custom hashtable failed</em>
      +167      * </pre></code>
      +168      * to system error and then continue using a standard Hashtable.
      +169      * </p>
      +170      * <p>
      +171      * <strong>Usage:</strong> Set this property when Java is invoked
      +172      * and <code>LogFactory</code> will attempt to load a new instance 
      +173      * of the given implementation class.
      +174      * For example, running the following ant scriplet:
      +175      * <code><pre>
      +176      *  &lt;java classname="${test.runner}" fork="yes" failonerror="${test.failonerror}"&gt;
      +177      *     ...
      +178      *     &lt;sysproperty 
      +179      *        key="org.apache.commons.logging.LogFactory.HashtableImpl"
      +180      *        value="org.apache.commons.logging.AltHashtable"/&gt;
      +181      *  &lt;/java&gt;
      +182      * </pre></code>
      +183      * will mean that <code>LogFactory</code> will load an instance of
      +184      * <code>org.apache.commons.logging.AltHashtable</code>.
      +185      * </p>
      +186      * <p>
      +187      * A typical use case is to allow a custom
      +188      * Hashtable implementation using weak references to be substituted.
      +189      * This will allow classloaders to be garbage collected without
      +190      * the need to release them (on 1.3+ JVMs only, of course ;)
      +191      * </p>
      +192      */
      +193     public static final String HASHTABLE_IMPLEMENTATION_PROPERTY =
      +194         "org.apache.commons.logging.LogFactory.HashtableImpl";
      +195     /** Name used to load the weak hashtable implementation by names */
      +196     private static final String WEAK_HASHTABLE_CLASSNAME = 
      +197         "org.apache.commons.logging.impl.WeakHashtable";
      +198 
      +199     /**
      +200      * A reference to the classloader that loaded this class. This is the
      +201      * same as LogFactory.class.getClassLoader(). However computing this
      +202      * value isn't quite as simple as that, as we potentially need to use
      +203      * AccessControllers etc. It's more efficient to compute it once and
      +204      * cache it here.
      +205      */
      +206     private static ClassLoader thisClassLoader;
      +207     
      +208     // ----------------------------------------------------------- Constructors
      +209 
      +210 
      +211     /**
      +212      * Protected constructor that is not available for public use.
      +213      */
      +214     protected LogFactory() {
      +215     }
      +216     
      +217     // --------------------------------------------------------- Public Methods
      +218 
      +219 
      +220     /**
      +221      * Return the configuration attribute with the specified name (if any),
      +222      * or <code>null</code> if there is no such attribute.
      +223      *
      +224      * @param name Name of the attribute to return
      +225      */
      +226     public abstract Object getAttribute(String name);
      +227 
      +228 
      +229     /**
      +230      * Return an array containing the names of all currently defined
      +231      * configuration attributes.  If there are no such attributes, a zero
      +232      * length array is returned.
      +233      */
      +234     public abstract String[] getAttributeNames();
      +235 
      +236 
      +237     /**
      +238      * Convenience method to derive a name from the specified class and
      +239      * call <code>getInstance(String)</code> with it.
      +240      *
      +241      * @param clazz Class for which a suitable Log name will be derived
      +242      *
      +243      * @exception LogConfigurationException if a suitable <code>Log</code>
      +244      *  instance cannot be returned
      +245      */
      +246     public abstract Log getInstance(Class clazz)
      +247         throws LogConfigurationException;
      +248 
      +249 
      +250     /**
      +251      * <p>Construct (if necessary) and return a <code>Log</code> instance,
      +252      * using the factory's current set of configuration attributes.</p>
      +253      *
      +254      * <p><strong>NOTE</strong> - Depending upon the implementation of
      +255      * the <code>LogFactory</code> you are using, the <code>Log</code>
      +256      * instance you are returned may or may not be local to the current
      +257      * application, and may or may not be returned again on a subsequent
      +258      * call with the same name argument.</p>
      +259      *
      +260      * @param name Logical name of the <code>Log</code> instance to be
      +261      *  returned (the meaning of this name is only known to the underlying
      +262      *  logging implementation that is being wrapped)
      +263      *
      +264      * @exception LogConfigurationException if a suitable <code>Log</code>
      +265      *  instance cannot be returned
      +266      */
      +267     public abstract Log getInstance(String name)
      +268         throws LogConfigurationException;
      +269 
      +270 
      +271     /**
      +272      * Release any internal references to previously created {@link Log}
      +273      * instances returned by this factory.  This is useful in environments
      +274      * like servlet containers, which implement application reloading by
      +275      * throwing away a ClassLoader.  Dangling references to objects in that
      +276      * class loader would prevent garbage collection.
      +277      */
      +278     public abstract void release();
      +279 
      +280 
      +281     /**
      +282      * Remove any configuration attribute associated with the specified name.
      +283      * If there is no such attribute, no action is taken.
      +284      *
      +285      * @param name Name of the attribute to remove
      +286      */
      +287     public abstract void removeAttribute(String name);
      +288 
      +289 
      +290     /**
      +291      * Set the configuration attribute with the specified name.  Calling
      +292      * this with a <code>null</code> value is equivalent to calling
      +293      * <code>removeAttribute(name)</code>.
      +294      *
      +295      * @param name Name of the attribute to set
      +296      * @param value Value of the attribute to set, or <code>null</code>
      +297      *  to remove any setting for this attribute
      +298      */
      +299     public abstract void setAttribute(String name, Object value);
      +300 
      +301 
      +302     // ------------------------------------------------------- Static Variables
      +303 
      +304 
      +305     /**
      +306      * The previously constructed <code>LogFactory</code> instances, keyed by
      +307      * the <code>ClassLoader</code> with which it was created.
      +308      */
      +309     protected static Hashtable factories = null;
      +310     
      +311     /**
      +312      * Prevously constructed <code>LogFactory</code> instance as in the
      +313      * <code>factories</code> map, but for the case where
      +314      * <code>getClassLoader</code> returns <code>null</code>.
      +315      * This can happen when:
      +316      * <ul>
      +317      * <li>using JDK1.1 and the calling code is loaded via the system
      +318      *  classloader (very common)</li>
      +319      * <li>using JDK1.2+ and the calling code is loaded via the boot
      +320      *  classloader (only likely for embedded systems work).</li>
      +321      * </ul>
      +322      * Note that <code>factories</code> is a <i>Hashtable</i> (not a HashMap),
      +323      * and hashtables don't allow null as a key.
      +324      */
      +325     protected static LogFactory nullClassLoaderFactory = null;
      +326 
      +327     /**
      +328      * Create the hashtable which will be used to store a map of
      +329      * (context-classloader -> logfactory-object). Version 1.2+ of Java
      +330      * supports "weak references", allowing a custom Hashtable class
      +331      * to be used which uses only weak references to its keys. Using weak
      +332      * references can fix memory leaks on webapp unload in some cases (though
      +333      * not all). Version 1.1 of Java does not support weak references, so we
      +334      * must dynamically determine which we are using. And just for fun, this
      +335      * code also supports the ability for a system property to specify an
      +336      * arbitrary Hashtable implementation name.
      +337      * <p>
      +338      * Note that the correct way to ensure no memory leaks occur is to ensure
      +339      * that LogFactory.release(contextClassLoader) is called whenever a 
      +340      * webapp is undeployed.
      +341      */
      +342     private static final Hashtable createFactoryStore() {
      +343         Hashtable result = null;
      +344         String storeImplementationClass;
      +345         try {
      +346             storeImplementationClass = getSystemProperty(HASHTABLE_IMPLEMENTATION_PROPERTY, null);
      +347         } catch(SecurityException ex) {
      +348             // Permissions don't allow this to be accessed. Default to the "modern"
      +349             // weak hashtable implementation if it is available.
      +350             storeImplementationClass = null;
      +351         }
      +352 
      +353         if (storeImplementationClass == null) {
      +354             storeImplementationClass = WEAK_HASHTABLE_CLASSNAME;
      +355         }
      +356         try {
      +357             Class implementationClass = Class.forName(storeImplementationClass);
      +358             result = (Hashtable) implementationClass.newInstance();
      +359             
      +360         } catch (Throwable t) {
      +361             // ignore
      +362             if (!WEAK_HASHTABLE_CLASSNAME.equals(storeImplementationClass)) {
      +363                 // if the user's trying to set up a custom implementation, give a clue
      +364                 if (isDiagnosticsEnabled()) {
      +365                     // use internal logging to issue the warning
      +366                     logDiagnostic("[ERROR] LogFactory: Load of custom hashtable failed");
      +367                 } else {
      +368                     // we *really* want this output, even if diagnostics weren't
      +369                     // explicitly enabled by the user.
      +370                     System.err.println("[ERROR] LogFactory: Load of custom hashtable failed");
      +371                 }
      +372             }
      +373         }
      +374         if (result == null) {
      +375             result = new Hashtable();
      +376         }
      +377         return result;
      +378     }
      +379 
      +380 
      +381     // --------------------------------------------------------- Static Methods
      +382 
      +383     /** Utility method to safely trim a string. */
      +384     private static String trim(String src) {
      +385     	if (src == null) {
      +386     		return null;
      +387     	}
      +388     	return src.trim();
      +389     }
      +390 
      +391     /**
      +392      * <p>Construct (if necessary) and return a <code>LogFactory</code>
      +393      * instance, using the following ordered lookup procedure to determine
      +394      * the name of the implementation class to be loaded.</p>
      +395      * <ul>
      +396      * <li>The <code>org.apache.commons.logging.LogFactory</code> system
      +397      *     property.</li>
      +398      * <li>The JDK 1.3 Service Discovery mechanism</li>
      +399      * <li>Use the properties file <code>commons-logging.properties</code>
      +400      *     file, if found in the class path of this class.  The configuration
      +401      *     file is in standard <code>java.util.Properties</code> format and
      +402      *     contains the fully qualified name of the implementation class
      +403      *     with the key being the system property defined above.</li>
      +404      * <li>Fall back to a default implementation class
      +405      *     (<code>org.apache.commons.logging.impl.LogFactoryImpl</code>).</li>
      +406      * </ul>
      +407      *
      +408      * <p><em>NOTE</em> - If the properties file method of identifying the
      +409      * <code>LogFactory</code> implementation class is utilized, all of the
      +410      * properties defined in this file will be set as configuration attributes
      +411      * on the corresponding <code>LogFactory</code> instance.</p>
      +412      * 
      +413      * <p><em>NOTE</em> - In a multithreaded environment it is possible 
      +414      * that two different instances will be returned for the same 
      +415      * classloader environment. 
      +416      * </p>
      +417      *
      +418      * @exception LogConfigurationException if the implementation class is not
      +419      *  available or cannot be instantiated.
      +420      */
      +421     public static LogFactory getFactory() throws LogConfigurationException {
      +422         // Identify the class loader we will be using
      +423         ClassLoader contextClassLoader = getContextClassLoaderInternal();
      +424 
      +425         if (contextClassLoader == null) {
      +426             // This is an odd enough situation to report about. This
      +427             // output will be a nuisance on JDK1.1, as the system
      +428             // classloader is null in that environment.
      +429             if (isDiagnosticsEnabled()) {
      +430                 logDiagnostic("Context classloader is null.");
      +431             }
      +432         }
      +433 
      +434         // Return any previously registered factory for this class loader
      +435         LogFactory factory = getCachedFactory(contextClassLoader);
      +436         if (factory != null) {
      +437             return factory;
      +438         }
      +439 
      +440         if (isDiagnosticsEnabled()) {
      +441             logDiagnostic(
      +442                     "[LOOKUP] LogFactory implementation requested for the first time for context classloader "
      +443                     + objectId(contextClassLoader));
      +444             logHierarchy("[LOOKUP] ", contextClassLoader);
      +445         }
      +446 
      +447         // Load properties file.
      +448         //
      +449         // If the properties file exists, then its contents are used as
      +450         // "attributes" on the LogFactory implementation class. One particular
      +451         // property may also control which LogFactory concrete subclass is
      +452         // used, but only if other discovery mechanisms fail..
      +453         //
      +454         // As the properties file (if it exists) will be used one way or 
      +455         // another in the end we may as well look for it first.
      +456 
      +457         Properties props = getConfigurationFile(contextClassLoader, FACTORY_PROPERTIES);
      +458 
      +459         // Determine whether we will be using the thread context class loader to
      +460         // load logging classes or not by checking the loaded properties file (if any).
      +461         ClassLoader baseClassLoader = contextClassLoader;
      +462         if (props != null) {
      +463             String useTCCLStr = props.getProperty(TCCL_KEY);
      +464             if (useTCCLStr != null) {
      +465                 // The Boolean.valueOf(useTCCLStr).booleanValue() formulation
      +466                 // is required for Java 1.2 compatability.
      +467                 if (Boolean.valueOf(useTCCLStr).booleanValue() == false) {
      +468                     // Don't use current context classloader when locating any
      +469                     // LogFactory or Log classes, just use the class that loaded
      +470                     // this abstract class. When this class is deployed in a shared
      +471                     // classpath of a container, it means webapps cannot deploy their
      +472                     // own logging implementations. It also means that it is up to the
      +473                     // implementation whether to load library-specific config files
      +474                     // from the TCCL or not.
      +475                     baseClassLoader = thisClassLoader; 
      +476                 }
      +477             }
      +478         }
      +479 
      +480         // Determine which concrete LogFactory subclass to use.
      +481         // First, try a global system property
      +482         if (isDiagnosticsEnabled()) {
      +483             logDiagnostic(
      +484                     "[LOOKUP] Looking for system property [" + FACTORY_PROPERTY 
      +485                     + "] to define the LogFactory subclass to use...");
      +486         }
      +487         
      +488         try {
      +489             String factoryClass = getSystemProperty(FACTORY_PROPERTY, null);
      +490             if (factoryClass != null) {
      +491                 if (isDiagnosticsEnabled()) {
      +492                     logDiagnostic(
      +493                             "[LOOKUP] Creating an instance of LogFactory class '" + factoryClass
      +494                             + "' as specified by system property " + FACTORY_PROPERTY);
      +495                 }
      +496                 
      +497                 factory = newFactory(factoryClass, baseClassLoader, contextClassLoader);
      +498             } else {
      +499                 if (isDiagnosticsEnabled()) {
      +500                     logDiagnostic(
      +501                             "[LOOKUP] No system property [" + FACTORY_PROPERTY 
      +502                             + "] defined.");
      +503                 }
      +504             }
      +505         } catch (SecurityException e) {
      +506             if (isDiagnosticsEnabled()) {
      +507                 logDiagnostic(
      +508                         "[LOOKUP] A security exception occurred while trying to create an"
      +509                         + " instance of the custom factory class"
      +510                         + ": [" + trim(e.getMessage())
      +511                         + "]. Trying alternative implementations...");
      +512             }
      +513             ;  // ignore
      +514         } catch(RuntimeException e) {
      +515             // This is not consistent with the behaviour when a bad LogFactory class is
      +516             // specified in a services file.
      +517             //
      +518             // One possible exception that can occur here is a ClassCastException when
      +519             // the specified class wasn't castable to this LogFactory type.
      +520             if (isDiagnosticsEnabled()) {
      +521                 logDiagnostic(
      +522                         "[LOOKUP] An exception occurred while trying to create an"
      +523                         + " instance of the custom factory class"
      +524                         + ": [" + trim(e.getMessage())
      +525                         + "] as specified by a system property.");
      +526             }
      +527             throw e;
      +528         }
      +529 
      +530 
      +531         // Second, try to find a service by using the JDK1.3 class
      +532         // discovery mechanism, which involves putting a file with the name
      +533         // of an interface class in the META-INF/services directory, where the
      +534         // contents of the file is a single line specifying a concrete class 
      +535         // that implements the desired interface.
      +536 
      +537         if (factory == null) {
      +538             if (isDiagnosticsEnabled()) {
      +539                 logDiagnostic(
      +540                         "[LOOKUP] Looking for a resource file of name [" + SERVICE_ID
      +541                         + "] to define the LogFactory subclass to use...");
      +542             }
      +543             try {
      +544                 InputStream is = getResourceAsStream(contextClassLoader,
      +545                                                      SERVICE_ID);
      +546 
      +547                 if( is != null ) {
      +548                     // This code is needed by EBCDIC and other strange systems.
      +549                     // It's a fix for bugs reported in xerces
      +550                     BufferedReader rd;
      +551                     try {
      +552                         rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
      +553                     } catch (java.io.UnsupportedEncodingException e) {
      +554                         rd = new BufferedReader(new InputStreamReader(is));
      +555                     }
      +556 
      +557                     String factoryClassName = rd.readLine();
      +558                     rd.close();
      +559 
      +560                     if (factoryClassName != null &&
      +561                         ! "".equals(factoryClassName)) {
      +562                         if (isDiagnosticsEnabled()) {
      +563                             logDiagnostic(
      +564                                     "[LOOKUP]  Creating an instance of LogFactory class " + factoryClassName
      +565                                     + " as specified by file '" + SERVICE_ID 
      +566                                     + "' which was present in the path of the context"
      +567                                     + " classloader.");
      +568                         }
      +569                         factory = newFactory(factoryClassName, baseClassLoader, contextClassLoader );
      +570                     }
      +571                 } else {
      +572                     // is == null
      +573                     if (isDiagnosticsEnabled()) {
      +574                         logDiagnostic(
      +575                             "[LOOKUP] No resource file with name '" + SERVICE_ID
      +576                             + "' found.");
      +577                     }
      +578                 }
      +579             } catch( Exception ex ) {
      +580                 // note: if the specified LogFactory class wasn't compatible with LogFactory
      +581                 // for some reason, a ClassCastException will be caught here, and attempts will
      +582                 // continue to find a compatible class.
      +583                 if (isDiagnosticsEnabled()) {
      +584                     logDiagnostic(
      +585                         "[LOOKUP] A security exception occurred while trying to create an"
      +586                         + " instance of the custom factory class"
      +587                         + ": [" + trim(ex.getMessage())
      +588                         + "]. Trying alternative implementations...");
      +589                 }
      +590                 ; // ignore
      +591             }
      +592         }
      +593 
      +594 
      +595         // Third try looking into the properties file read earlier (if found)
      +596 
      +597         if (factory == null) {
      +598             if (props != null) {
      +599                 if (isDiagnosticsEnabled()) {
      +600                     logDiagnostic(
      +601                         "[LOOKUP] Looking in properties file for entry with key '" 
      +602                         + FACTORY_PROPERTY
      +603                         + "' to define the LogFactory subclass to use...");
      +604                 }
      +605                 String factoryClass = props.getProperty(FACTORY_PROPERTY);
      +606                 if (factoryClass != null) {
      +607                     if (isDiagnosticsEnabled()) {
      +608                         logDiagnostic(
      +609                             "[LOOKUP] Properties file specifies LogFactory subclass '" 
      +610                             + factoryClass + "'");
      +611                     }
      +612                     factory = newFactory(factoryClass, baseClassLoader, contextClassLoader);
      +613                     
      +614                     // TODO: think about whether we need to handle exceptions from newFactory
      +615                 } else {
      +616                     if (isDiagnosticsEnabled()) {
      +617                         logDiagnostic(
      +618                             "[LOOKUP] Properties file has no entry specifying LogFactory subclass.");
      +619                     }
      +620                 }
      +621             } else {
      +622                 if (isDiagnosticsEnabled()) {
      +623                     logDiagnostic(
      +624                         "[LOOKUP] No properties file available to determine"
      +625                         + " LogFactory subclass from..");
      +626                 }
      +627             }
      +628         }
      +629 
      +630 
      +631         // Fourth, try the fallback implementation class
      +632 
      +633         if (factory == null) {
      +634             if (isDiagnosticsEnabled()) {
      +635                 logDiagnostic(
      +636                 "[LOOKUP] Loading the default LogFactory implementation '" + FACTORY_DEFAULT
      +637                 + "' via the same classloader that loaded this LogFactory"
      +638                 + " class (ie not looking in the context classloader).");
      +639             }
      +640             
      +641             // Note: unlike the above code which can try to load custom LogFactory
      +642             // implementations via the TCCL, we don't try to load the default LogFactory
      +643             // implementation via the context classloader because:
      +644             // * that can cause problems (see comments in newFactory method)
      +645             // * no-one should be customising the code of the default class
      +646             // Yes, we do give up the ability for the child to ship a newer
      +647             // version of the LogFactoryImpl class and have it used dynamically
      +648             // by an old LogFactory class in the parent, but that isn't 
      +649             // necessarily a good idea anyway.
      +650             factory = newFactory(FACTORY_DEFAULT, thisClassLoader, contextClassLoader);
      +651         }
      +652 
      +653         if (factory != null) {
      +654             /**
      +655              * Always cache using context class loader.
      +656              */
      +657             cacheFactory(contextClassLoader, factory);
      +658 
      +659             if( props!=null ) {
      +660                 Enumeration names = props.propertyNames();
      +661                 while (names.hasMoreElements()) {
      +662                     String name = (String) names.nextElement();
      +663                     String value = props.getProperty(name);
      +664                     factory.setAttribute(name, value);
      +665                 }
      +666             }
      +667         }
      +668 
      +669         return factory;
      +670     }
      +671 
      +672 
      +673     /**
      +674      * Convenience method to return a named logger, without the application
      +675      * having to care about factories.
      +676      *
      +677      * @param clazz Class from which a log name will be derived
      +678      *
      +679      * @exception LogConfigurationException if a suitable <code>Log</code>
      +680      *  instance cannot be returned
      +681      */
      +682     public static Log getLog(Class clazz)
      +683         throws LogConfigurationException {
      +684 
      +685         return (getFactory().getInstance(clazz));
      +686 
      +687     }
      +688 
      +689 
      +690     /**
      +691      * Convenience method to return a named logger, without the application
      +692      * having to care about factories.
      +693      *
      +694      * @param name Logical name of the <code>Log</code> instance to be
      +695      *  returned (the meaning of this name is only known to the underlying
      +696      *  logging implementation that is being wrapped)
      +697      *
      +698      * @exception LogConfigurationException if a suitable <code>Log</code>
      +699      *  instance cannot be returned
      +700      */
      +701     public static Log getLog(String name)
      +702         throws LogConfigurationException {
      +703 
      +704         return (getFactory().getInstance(name));
      +705 
      +706     }
      +707 
      +708 
      +709     /**
      +710      * Release any internal references to previously created {@link LogFactory}
      +711      * instances that have been associated with the specified class loader
      +712      * (if any), after calling the instance method <code>release()</code> on
      +713      * each of them.
      +714      *
      +715      * @param classLoader ClassLoader for which to release the LogFactory
      +716      */
      +717     public static void release(ClassLoader classLoader) {
      +718 
      +719         if (isDiagnosticsEnabled()) {
      +720             logDiagnostic("Releasing factory for classloader " + objectId(classLoader));
      +721         }
      +722         synchronized (factories) {
      +723             if (classLoader == null) {
      +724                 if (nullClassLoaderFactory != null) {
      +725                     nullClassLoaderFactory.release();
      +726                     nullClassLoaderFactory = null;
      +727                 }
      +728             } else {
      +729                 LogFactory factory = (LogFactory) factories.get(classLoader);
      +730                 if (factory != null) {
      +731                     factory.release();
      +732                     factories.remove(classLoader);
      +733                 }
      +734             }
      +735         }
      +736 
      +737     }
      +738 
      +739 
      +740     /**
      +741      * Release any internal references to previously created {@link LogFactory}
      +742      * instances, after calling the instance method <code>release()</code> on
      +743      * each of them.  This is useful in environments like servlet containers,
      +744      * which implement application reloading by throwing away a ClassLoader.
      +745      * Dangling references to objects in that class loader would prevent
      +746      * garbage collection.
      +747      */
      +748     public static void releaseAll() {
      +749 
      +750         if (isDiagnosticsEnabled()) {
      +751             logDiagnostic("Releasing factory for all classloaders.");
      +752         }
      +753         synchronized (factories) {
      +754             Enumeration elements = factories.elements();
      +755             while (elements.hasMoreElements()) {
      +756                 LogFactory element = (LogFactory) elements.nextElement();
      +757                 element.release();
      +758             }
      +759             factories.clear();
      +760 
      +761             if (nullClassLoaderFactory != null) {
      +762                 nullClassLoaderFactory.release();
      +763                 nullClassLoaderFactory = null;
      +764             }
      +765         }
      +766 
      +767     }
      +768 
      +769 
      +770     // ------------------------------------------------------ Protected Methods
      +771 
      +772     /**
      +773      * Safely get access to the classloader for the specified class.
      +774      * <p>
      +775      * Theoretically, calling getClassLoader can throw a security exception,
      +776      * and so should be done under an AccessController in order to provide
      +777      * maximum flexibility. However in practice people don't appear to use
      +778      * security policies that forbid getClassLoader calls. So for the moment
      +779      * all code is written to call this method rather than Class.getClassLoader,
      +780      * so that we could put AccessController stuff in this method without any
      +781      * disruption later if we need to.
      +782      * <p>
      +783      * Even when using an AccessController, however, this method can still
      +784      * throw SecurityException. Commons-logging basically relies on the
      +785      * ability to access classloaders, ie a policy that forbids all
      +786      * classloader access will also prevent commons-logging from working: 
      +787      * currently this method will throw an exception preventing the entire app
      +788      * from starting up. Maybe it would be good to detect this situation and
      +789      * just disable all commons-logging? Not high priority though - as stated
      +790      * above, security policies that prevent classloader access aren't common.
      +791      * <p>
      +792      * Note that returning an object fetched via an AccessController would
      +793      * technically be a security flaw anyway; untrusted code that has access
      +794      * to a trusted JCL library could use it to fetch the classloader for
      +795      * a class even when forbidden to do so directly.
      +796      * 
      +797      * @since 1.1
      +798      */
      +799     protected static ClassLoader getClassLoader(Class clazz) {
      +800         try {
      +801             return clazz.getClassLoader();
      +802         } catch(SecurityException ex) {
      +803             if (isDiagnosticsEnabled()) {
      +804                 logDiagnostic(
      +805                         "Unable to get classloader for class '" + clazz
      +806                         + "' due to security restrictions - " + ex.getMessage());
      +807             }
      +808             throw ex;
      +809         }
      +810     }
      +811 
      +812     /**
      +813      * Returns the current context classloader.
      +814      * <p>
      +815      * In versions prior to 1.1, this method did not use an AccessController.
      +816      * In version 1.1, an AccessController wrapper was incorrectly added to
      +817      * this method, causing a minor security flaw.
      +818      * <p>
      +819      * In version 1.1.1 this change was reverted; this method no longer uses
      +820      * an AccessController. User code wishing to obtain the context classloader
      +821      * must invoke this method via AccessController.doPrivileged if it needs
      +822      * support for that.
      +823      *  
      +824      * @return the context classloader associated with the current thread,
      +825      * or null if security doesn't allow it.
      +826      * 
      +827      * @throws LogConfigurationException if there was some weird error while
      +828      * attempting to get the context classloader.
      +829      * 
      +830      * @throws SecurityException if the current java security policy doesn't
      +831      * allow this class to access the context classloader.
      +832      */
      +833     protected static ClassLoader getContextClassLoader()
      +834         throws LogConfigurationException {
      +835 
      +836         return directGetContextClassLoader();
      +837     }
      +838 
      +839     /**
      +840      * Calls LogFactory.directGetContextClassLoader under the control of an
      +841      * AccessController class. This means that java code running under a
      +842      * security manager that forbids access to ClassLoaders will still work
      +843      * if this class is given appropriate privileges, even when the caller
      +844      * doesn't have such privileges. Without using an AccessController, the
      +845      * the entire call stack must have the privilege before the call is
      +846      * allowed.
      +847      *  
      +848      * @return the context classloader associated with the current thread,
      +849      * or null if security doesn't allow it.
      +850      * 
      +851      * @throws LogConfigurationException if there was some weird error while
      +852      * attempting to get the context classloader.
      +853      * 
      +854      * @throws SecurityException if the current java security policy doesn't
      +855      * allow this class to access the context classloader.
      +856      */
      +857     private static ClassLoader getContextClassLoaderInternal()
      +858     throws LogConfigurationException {
      +859         return (ClassLoader)AccessController.doPrivileged(
      +860             new PrivilegedAction() {
      +861                 public Object run() {
      +862                     return directGetContextClassLoader();
      +863                 }
      +864             });
      +865     }
      +866 
      +867     /**
      +868      * Return the thread context class loader if available; otherwise return 
      +869      * null. 
      +870      * <p>
      +871      * Most/all code should call getContextClassLoaderInternal rather than
      +872      * calling this method directly.
      +873      * <p>
      +874      * The thread context class loader is available for JDK 1.2
      +875      * or later, if certain security conditions are met.
      +876      * <p>
      +877      * Note that no internal logging is done within this method because
      +878      * this method is called every time LogFactory.getLogger() is called,
      +879      * and we don't want too much output generated here.
      +880      * 
      +881      * @exception LogConfigurationException if a suitable class loader
      +882      * cannot be identified.
      +883      * 
      +884      * @exception SecurityException if the java security policy forbids
      +885      * access to the context classloader from one of the classes in the
      +886      * current call stack. 
      +887      * @since 1.1
      +888      */
      +889     protected static ClassLoader directGetContextClassLoader()
      +890         throws LogConfigurationException
      +891     {
      +892         ClassLoader classLoader = null;
      +893 
      +894         try {
      +895             // Are we running on a JDK 1.2 or later system?
      +896             Method method = Thread.class.getMethod("getContextClassLoader", 
      +897                     (Class[]) null);
      +898 
      +899             // Get the thread context class loader (if there is one)
      +900             try {
      +901                 classLoader = (ClassLoader)method.invoke(Thread.currentThread(), 
      +902                         (Object[]) null);
      +903             } catch (IllegalAccessException e) {
      +904                 throw new LogConfigurationException
      +905                     ("Unexpected IllegalAccessException", e);
      +906             } catch (InvocationTargetException e) {
      +907                 /**
      +908                  * InvocationTargetException is thrown by 'invoke' when
      +909                  * the method being invoked (getContextClassLoader) throws
      +910                  * an exception.
      +911                  *
      +912                  * getContextClassLoader() throws SecurityException when
      +913                  * the context class loader isn't an ancestor of the
      +914                  * calling class's class loader, or if security
      +915                  * permissions are restricted.
      +916                  *
      +917                  * In the first case (not related), we want to ignore and
      +918                  * keep going.  We cannot help but also ignore the second
      +919                  * with the logic below, but other calls elsewhere (to
      +920                  * obtain a class loader) will trigger this exception where
      +921                  * we can make a distinction.
      +922                  */
      +923                 if (e.getTargetException() instanceof SecurityException) {
      +924                     ;  // ignore
      +925                 } else {
      +926                     // Capture 'e.getTargetException()' exception for details
      +927                     // alternate: log 'e.getTargetException()', and pass back 'e'.
      +928                     throw new LogConfigurationException
      +929                         ("Unexpected InvocationTargetException", e.getTargetException());
      +930                 }
      +931             }
      +932         } catch (NoSuchMethodException e) {
      +933             // Assume we are running on JDK 1.1
      +934             classLoader = getClassLoader(LogFactory.class);
      +935 
      +936             // We deliberately don't log a message here to outputStream;
      +937             // this message would be output for every call to LogFactory.getLog()
      +938             // when running on JDK1.1
      +939             //
      +940             // if (outputStream != null) {
      +941             //    outputStream.println(
      +942             //        "Method Thread.getContextClassLoader does not exist;"
      +943             //         + " assuming this is JDK 1.1, and that the context"
      +944             //         + " classloader is the same as the class that loaded"
      +945             //         + " the concrete LogFactory class.");
      +946             // }
      +947             
      +948         }
      +949 
      +950         // Return the selected class loader
      +951         return classLoader;
      +952     }
      +953 
      +954     /**
      +955      * Check cached factories (keyed by contextClassLoader)
      +956      *
      +957      * @param contextClassLoader is the context classloader associated
      +958      * with the current thread. This allows separate LogFactory objects
      +959      * per component within a container, provided each component has
      +960      * a distinct context classloader set. This parameter may be null
      +961      * in JDK1.1, and in embedded systems where jcl-using code is
      +962      * placed in the bootclasspath.
      +963      * 
      +964      * @return the factory associated with the specified classloader if
      +965      * one has previously been created, or null if this is the first time
      +966      * we have seen this particular classloader.
      +967      */
      +968     private static LogFactory getCachedFactory(ClassLoader contextClassLoader)
      +969     {
      +970         LogFactory factory = null;
      +971 
      +972         if (contextClassLoader == null) {
      +973             // We have to handle this specially, as factories is a Hashtable
      +974             // and those don't accept null as a key value.
      +975             //
      +976             // nb: nullClassLoaderFactory might be null. That's ok.
      +977             factory = nullClassLoaderFactory;
      +978         } else {
      +979             factory = (LogFactory) factories.get(contextClassLoader);
      +980         }
      +981 
      +982         return factory;
      +983     }
      +984 
      +985     /**
      +986      * Remember this factory, so later calls to LogFactory.getCachedFactory
      +987      * can return the previously created object (together with all its
      +988      * cached Log objects).
      +989      *
      +990      * @param classLoader should be the current context classloader. Note that
      +991      * this can be null under some circumstances; this is ok.
      +992      *
      +993      * @param factory should be the factory to cache. This should never be null.
      +994      */
      +995     private static void cacheFactory(ClassLoader classLoader, LogFactory factory)
      +996     {
      +997         // Ideally we would assert(factory != null) here. However reporting
      +998         // errors from within a logging implementation is a little tricky!
      +999 
      +1000         if (factory != null) {
      +1001             if (classLoader == null) {
      +1002                 nullClassLoaderFactory = factory;
      +1003             } else {
      +1004                 factories.put(classLoader, factory);
      +1005             }
      +1006         }
      +1007     }
      +1008 
      +1009     /**
      +1010      * Return a new instance of the specified <code>LogFactory</code>
      +1011      * implementation class, loaded by the specified class loader.
      +1012      * If that fails, try the class loader used to load this
      +1013      * (abstract) LogFactory.
      +1014      * <p>
      +1015      * <h2>ClassLoader conflicts</h2>
      +1016      * Note that there can be problems if the specified ClassLoader is not the 
      +1017      * same as the classloader that loaded this class, ie when loading a
      +1018      * concrete LogFactory subclass via a context classloader.
      +1019      * <p>
      +1020      * The problem is the same one that can occur when loading a concrete Log
      +1021      * subclass via a context classloader.
      +1022      * <p>
      +1023      * The problem occurs when code running in the context classloader calls
      +1024      * class X which was loaded via a parent classloader, and class X then calls
      +1025      * LogFactory.getFactory (either directly or via LogFactory.getLog). Because
      +1026      * class X was loaded via the parent, it binds to LogFactory loaded via
      +1027      * the parent. When the code in this method finds some LogFactoryYYYY
      +1028      * class in the child (context) classloader, and there also happens to be a
      +1029      * LogFactory class defined in the child classloader, then LogFactoryYYYY
      +1030      * will be bound to LogFactory@childloader. It cannot be cast to
      +1031      * LogFactory@parentloader, ie this method cannot return the object as
      +1032      * the desired type. Note that it doesn't matter if the LogFactory class
      +1033      * in the child classloader is identical to the LogFactory class in the
      +1034      * parent classloader, they are not compatible.
      +1035      * <p>
      +1036      * The solution taken here is to simply print out an error message when
      +1037      * this occurs then throw an exception. The deployer of the application
      +1038      * must ensure they remove all occurrences of the LogFactory class from
      +1039      * the child classloader in order to resolve the issue. Note that they
      +1040      * do not have to move the custom LogFactory subclass; that is ok as
      +1041      * long as the only LogFactory class it can find to bind to is in the
      +1042      * parent classloader.
      +1043      * <p>
      +1044      * @param factoryClass Fully qualified name of the <code>LogFactory</code>
      +1045      *  implementation class
      +1046      * @param classLoader ClassLoader from which to load this class
      +1047      * @param contextClassLoader is the context that this new factory will
      +1048      * manage logging for.
      +1049      *
      +1050      * @exception LogConfigurationException if a suitable instance
      +1051      *  cannot be created
      +1052      * @since 1.1
      +1053      */
      +1054     protected static LogFactory newFactory(final String factoryClass,
      +1055                                            final ClassLoader classLoader,
      +1056                                            final ClassLoader contextClassLoader)
      +1057         throws LogConfigurationException
      +1058     {
      +1059         // Note that any unchecked exceptions thrown by the createFactory
      +1060         // method will propagate out of this method; in particular a
      +1061         // ClassCastException can be thrown.
      +1062         Object result = AccessController.doPrivileged(
      +1063             new PrivilegedAction() {
      +1064                 public Object run() {
      +1065                     return createFactory(factoryClass, classLoader);
      +1066                 }
      +1067             });
      +1068 
      +1069         if (result instanceof LogConfigurationException) {
      +1070             LogConfigurationException ex = (LogConfigurationException) result;
      +1071             if (isDiagnosticsEnabled()) {
      +1072                 logDiagnostic(
      +1073                         "An error occurred while loading the factory class:"
      +1074                         + ex.getMessage());
      +1075             }
      +1076             throw ex;
      +1077         }
      +1078         if (isDiagnosticsEnabled()) {
      +1079             logDiagnostic(
      +1080                     "Created object " + objectId(result)
      +1081                     + " to manage classloader " + objectId(contextClassLoader));
      +1082         }
      +1083         return (LogFactory)result;
      +1084     }
      +1085 
      +1086     /**
      +1087      * Method provided for backwards compatibility; see newFactory version that
      +1088      * takes 3 parameters.
      +1089      * <p>
      +1090      * This method would only ever be called in some rather odd situation.
      +1091      * Note that this method is static, so overriding in a subclass doesn't
      +1092      * have any effect unless this method is called from a method in that
      +1093      * subclass. However this method only makes sense to use from the
      +1094      * getFactory method, and as that is almost always invoked via
      +1095      * LogFactory.getFactory, any custom definition in a subclass would be
      +1096      * pointless. Only a class with a custom getFactory method, then invoked
      +1097      * directly via CustomFactoryImpl.getFactory or similar would ever call
      +1098      * this. Anyway, it's here just in case, though the "managed class loader"
      +1099      * value output to the diagnostics will not report the correct value.
      +1100      */
      +1101     protected static LogFactory newFactory(final String factoryClass,
      +1102                                            final ClassLoader classLoader) {
      +1103         return newFactory(factoryClass, classLoader, null);
      +1104     }
      +1105 
      +1106     /**
      +1107      * Implements the operations described in the javadoc for newFactory.
      +1108      * 
      +1109      * @param factoryClass
      +1110      * 
      +1111      * @param classLoader used to load the specified factory class. This is
      +1112      * expected to be either the TCCL or the classloader which loaded this
      +1113      * class. Note that the classloader which loaded this class might be
      +1114      * "null" (ie the bootloader) for embedded systems.
      +1115      * 
      +1116      * @return either a LogFactory object or a LogConfigurationException object.
      +1117      * @since 1.1
      +1118      */
      +1119     protected static Object createFactory(String factoryClass, ClassLoader classLoader) {
      +1120 
      +1121         // This will be used to diagnose bad configurations
      +1122         // and allow a useful message to be sent to the user
      +1123         Class logFactoryClass = null;
      +1124         try {
      +1125             if (classLoader != null) {
      +1126                 try {
      +1127                     // First the given class loader param (thread class loader)
      +1128 
      +1129                     // Warning: must typecast here & allow exception
      +1130                     // to be generated/caught & recast properly.
      +1131                     logFactoryClass = classLoader.loadClass(factoryClass);
      +1132                     if (LogFactory.class.isAssignableFrom(logFactoryClass)) {
      +1133                         if (isDiagnosticsEnabled()) {
      +1134                             logDiagnostic(
      +1135                                     "Loaded class " + logFactoryClass.getName()
      +1136                                     + " from classloader " + objectId(classLoader));
      +1137                         }
      +1138                     } else {
      +1139                         //
      +1140                         // This indicates a problem with the ClassLoader tree.
      +1141                         // An incompatible ClassLoader was used to load the 
      +1142                         // implementation. 
      +1143                         // As the same classes
      +1144                         // must be available in multiple class loaders,
      +1145                         // it is very likely that multiple JCL jars are present.
      +1146                         // The most likely fix for this
      +1147                         // problem is to remove the extra JCL jars from the 
      +1148                         // ClassLoader hierarchy. 
      +1149                         //
      +1150                         if (isDiagnosticsEnabled()) {
      +1151                             logDiagnostic(
      +1152                                     "Factory class " + logFactoryClass.getName()
      +1153                                 + " loaded from classloader " + objectId(logFactoryClass.getClassLoader())
      +1154                                 + " does not extend '" + LogFactory.class.getName()
      +1155                                 + "' as loaded by this classloader.");
      +1156                             logHierarchy("[BAD CL TREE] ", classLoader);
      +1157                         }
      +1158                     }
      +1159                     
      +1160                     return (LogFactory) logFactoryClass.newInstance();
      +1161 
      +1162                 } catch (ClassNotFoundException ex) {
      +1163                     if (classLoader == thisClassLoader) {
      +1164                         // Nothing more to try, onwards.
      +1165                         if (isDiagnosticsEnabled()) {
      +1166                             logDiagnostic(
      +1167                                     "Unable to locate any class called '" + factoryClass
      +1168                                     + "' via classloader " + objectId(classLoader));
      +1169                         }
      +1170                         throw ex;
      +1171                     }
      +1172                     // ignore exception, continue
      +1173                 } catch (NoClassDefFoundError e) {
      +1174                     if (classLoader == thisClassLoader) {
      +1175                         // Nothing more to try, onwards.
      +1176                         if (isDiagnosticsEnabled()) {
      +1177                             logDiagnostic(
      +1178                                     "Class '" + factoryClass + "' cannot be loaded"
      +1179                                     + " via classloader " + objectId(classLoader)
      +1180                                     + " - it depends on some other class that cannot"
      +1181                                     + " be found.");
      +1182                         }
      +1183                         throw e;
      +1184                     }
      +1185                     // ignore exception, continue
      +1186                 } catch(ClassCastException e) {
      +1187                     if (classLoader == thisClassLoader) {
      +1188                         // There's no point in falling through to the code below that
      +1189                         // tries again with thisClassLoader, because we've just tried
      +1190                         // loading with that loader (not the TCCL). Just throw an
      +1191                         // appropriate exception here.
      +1192 
      +1193                         final boolean implementsLogFactory = implementsLogFactory(logFactoryClass);
      +1194                         
      +1195                         //
      +1196                         // Construct a good message: users may not actual expect that a custom implementation 
      +1197                         // has been specified. Several well known containers use this mechanism to adapt JCL 
      +1198                         // to their native logging system. 
      +1199                         // 
      +1200                         String msg = 
      +1201                             "The application has specified that a custom LogFactory implementation should be used but " +
      +1202                             "Class '" + factoryClass + "' cannot be converted to '"
      +1203                             + LogFactory.class.getName() + "'. ";
      +1204                         if (implementsLogFactory) {
      +1205                             msg = msg + "The conflict is caused by the presence of multiple LogFactory classes in incompatible classloaders. " +
      +1206                                 "Background can be found in http://commons.apache.org/logging/tech.html. " +
      +1207                                 "If you have not explicitly specified a custom LogFactory then it is likely that " +
      +1208                                 "the container has set one without your knowledge. " +
      +1209                                 "In this case, consider using the commons-logging-adapters.jar file or " +
      +1210                                 "specifying the standard LogFactory from the command line. ";
      +1211                         } else {
      +1212                             msg = msg + "Please check the custom implementation. ";
      +1213                         }
      +1214                         msg = msg + "Help can be found @http://commons.apache.org/logging/troubleshooting.html.";
      +1215                         
      +1216                         if (isDiagnosticsEnabled()) {
      +1217                             logDiagnostic(msg);
      +1218                         }
      +1219                         
      +1220                         ClassCastException ex = new ClassCastException(msg);
      +1221                         throw ex;
      +1222                     }
      +1223                     
      +1224                     // Ignore exception, continue. Presumably the classloader was the
      +1225                     // TCCL; the code below will try to load the class via thisClassLoader.
      +1226                     // This will handle the case where the original calling class is in
      +1227                     // a shared classpath but the TCCL has a copy of LogFactory and the
      +1228                     // specified LogFactory implementation; we will fall back to using the
      +1229                     // LogFactory implementation from the same classloader as this class.
      +1230                     //
      +1231                     // Issue: this doesn't handle the reverse case, where this LogFactory
      +1232                     // is in the webapp, and the specified LogFactory implementation is
      +1233                     // in a shared classpath. In that case:
      +1234                     // (a) the class really does implement LogFactory (bad log msg above)
      +1235                     // (b) the fallback code will result in exactly the same problem.
      +1236                 }
      +1237             }
      +1238 
      +1239             /* At this point, either classLoader == null, OR
      +1240              * classLoader was unable to load factoryClass.
      +1241              *
      +1242              * In either case, we call Class.forName, which is equivalent
      +1243              * to LogFactory.class.getClassLoader().load(name), ie we ignore
      +1244              * the classloader parameter the caller passed, and fall back
      +1245              * to trying the classloader associated with this class. See the
      +1246              * javadoc for the newFactory method for more info on the 
      +1247              * consequences of this.
      +1248              *
      +1249              * Notes:
      +1250              * * LogFactory.class.getClassLoader() may return 'null'
      +1251              *   if LogFactory is loaded by the bootstrap classloader.
      +1252              */
      +1253             // Warning: must typecast here & allow exception
      +1254             // to be generated/caught & recast properly.
      +1255             if (isDiagnosticsEnabled()) {
      +1256                 logDiagnostic(
      +1257                     "Unable to load factory class via classloader " 
      +1258                     + objectId(classLoader)
      +1259                     + " - trying the classloader associated with this LogFactory.");
      +1260             }
      +1261             logFactoryClass = Class.forName(factoryClass);
      +1262             return (LogFactory) logFactoryClass.newInstance();
      +1263         } catch (Exception e) {
      +1264             // Check to see if we've got a bad configuration
      +1265             if (isDiagnosticsEnabled()) {
      +1266                 logDiagnostic("Unable to create LogFactory instance.");
      +1267             }
      +1268             if (logFactoryClass != null
      +1269                 && !LogFactory.class.isAssignableFrom(logFactoryClass)) {
      +1270                 
      +1271                 return new LogConfigurationException(
      +1272                     "The chosen LogFactory implementation does not extend LogFactory."
      +1273                     + " Please check your configuration.",
      +1274                     e);
      +1275             }
      +1276             return new LogConfigurationException(e);
      +1277         }
      +1278     }
      +1279 
      +1280     /**
      +1281      * Determines whether the given class actually implements <code>LogFactory</code>.
      +1282      * Diagnostic information is also logged.
      +1283      * <p>
      +1284      * <strong>Usage:</strong> to diagnose whether a classloader conflict is the cause
      +1285      * of incompatibility. The test used is whether the class is assignable from
      +1286      * the <code>LogFactory</code> class loaded by the class's classloader.
      +1287      * @param logFactoryClass <code>Class</code> which may implement <code>LogFactory</code>
      +1288      * @return true if the <code>logFactoryClass</code> does extend
      +1289      * <code>LogFactory</code> when that class is loaded via the same
      +1290      * classloader that loaded the <code>logFactoryClass</code>.
      +1291      */
      +1292     private static boolean implementsLogFactory(Class logFactoryClass) {
      +1293         boolean implementsLogFactory = false;
      +1294         if (logFactoryClass != null) {
      +1295             try {
      +1296                 ClassLoader logFactoryClassLoader = logFactoryClass.getClassLoader();
      +1297                 if (logFactoryClassLoader == null) {
      +1298                     logDiagnostic("[CUSTOM LOG FACTORY] was loaded by the boot classloader");
      +1299                 } else {
      +1300                     logHierarchy("[CUSTOM LOG FACTORY] ", logFactoryClassLoader);
      +1301                     Class factoryFromCustomLoader
      +1302                         = Class.forName("org.apache.commons.logging.LogFactory", false, logFactoryClassLoader);
      +1303                     implementsLogFactory = factoryFromCustomLoader.isAssignableFrom(logFactoryClass);
      +1304                     if (implementsLogFactory) {
      +1305                         logDiagnostic("[CUSTOM LOG FACTORY] " + logFactoryClass.getName()
      +1306                                 + " implements LogFactory but was loaded by an incompatible classloader.");
      +1307                     } else {
      +1308                         logDiagnostic("[CUSTOM LOG FACTORY] " + logFactoryClass.getName()
      +1309                                 + " does not implement LogFactory.");
      +1310                     }
      +1311                 }
      +1312             } catch (SecurityException e) {
      +1313                 //
      +1314                 // The application is running within a hostile security environment.
      +1315                 // This will make it very hard to diagnose issues with JCL.
      +1316                 // Consider running less securely whilst debugging this issue.
      +1317                 //
      +1318                 logDiagnostic("[CUSTOM LOG FACTORY] SecurityException thrown whilst trying to determine whether " +
      +1319                         "the compatibility was caused by a classloader conflict: "
      +1320                         + e.getMessage());
      +1321             } catch (LinkageError e) {
      +1322                 //
      +1323                 // This should be an unusual circumstance.
      +1324                 // LinkageError's usually indicate that a dependent class has incompatibly changed.
      +1325                 // Another possibility may be an exception thrown by an initializer.
      +1326                 // Time for a clean rebuild?
      +1327                 //
      +1328                 logDiagnostic("[CUSTOM LOG FACTORY] LinkageError thrown whilst trying to determine whether " +
      +1329                         "the compatibility was caused by a classloader conflict: "
      +1330                         + e.getMessage());
      +1331             } catch (ClassNotFoundException e) {
      +1332                 //
      +1333                 // LogFactory cannot be loaded by the classloader which loaded the custom factory implementation.
      +1334                 // The custom implementation is not viable until this is corrected.
      +1335                 // Ensure that the JCL jar and the custom class are available from the same classloader.
      +1336                 // Running with diagnostics on should give information about the classloaders used
      +1337                 // to load the custom factory.
      +1338                 //
      +1339                 logDiagnostic("[CUSTOM LOG FACTORY] LogFactory class cannot be loaded by classloader which loaded the " +
      +1340                         "custom LogFactory implementation. Is the custom factory in the right classloader?");
      +1341             }
      +1342         }
      +1343         return implementsLogFactory;
      +1344     }
      +1345 
      +1346     /**
      +1347      * Applets may run in an environment where accessing resources of a loader is
      +1348      * a secure operation, but where the commons-logging library has explicitly
      +1349      * been granted permission for that operation. In this case, we need to 
      +1350      * run the operation using an AccessController.
      +1351      */
      +1352     private static InputStream getResourceAsStream(final ClassLoader loader,
      +1353                                                    final String name)
      +1354     {
      +1355         return (InputStream)AccessController.doPrivileged(
      +1356             new PrivilegedAction() {
      +1357                 public Object run() {
      +1358                     if (loader != null) {
      +1359                         return loader.getResourceAsStream(name);
      +1360                     } else {
      +1361                         return ClassLoader.getSystemResourceAsStream(name);
      +1362                     }
      +1363                 }
      +1364             });
      +1365     }
      +1366 
      +1367     /**
      +1368      * Given a filename, return an enumeration of URLs pointing to
      +1369      * all the occurrences of that filename in the classpath.
      +1370      * <p>
      +1371      * This is just like ClassLoader.getResources except that the
      +1372      * operation is done under an AccessController so that this method will
      +1373      * succeed when this jarfile is privileged but the caller is not.
      +1374      * This method must therefore remain private to avoid security issues.
      +1375      * <p>
      +1376      * If no instances are found, an Enumeration is returned whose
      +1377      * hasMoreElements method returns false (ie an "empty" enumeration).
      +1378      * If resources could not be listed for some reason, null is returned.
      +1379      */
      +1380     private static Enumeration getResources(final ClassLoader loader,
      +1381             final String name)
      +1382     {
      +1383         PrivilegedAction action = 
      +1384             new PrivilegedAction() {
      +1385                 public Object run() {
      +1386                     try {
      +1387                         if (loader != null) {
      +1388                             return loader.getResources(name);
      +1389                         } else {
      +1390                             return ClassLoader.getSystemResources(name);
      +1391                         }
      +1392                     } catch(IOException e) {
      +1393                         if (isDiagnosticsEnabled()) {
      +1394                             logDiagnostic(
      +1395                                 "Exception while trying to find configuration file "
      +1396                                 + name + ":" + e.getMessage());
      +1397                         }
      +1398                         return null;
      +1399                     } catch(NoSuchMethodError e) {
      +1400                         // we must be running on a 1.1 JVM which doesn't support
      +1401                         // ClassLoader.getSystemResources; just return null in
      +1402                         // this case.
      +1403                         return null;
      +1404                     }
      +1405                 }
      +1406             };
      +1407         Object result = AccessController.doPrivileged(action);
      +1408         return (Enumeration) result;
      +1409     }
      +1410 
      +1411     /**
      +1412      * Given a URL that refers to a .properties file, load that file.
      +1413      * This is done under an AccessController so that this method will
      +1414      * succeed when this jarfile is privileged but the caller is not.
      +1415      * This method must therefore remain private to avoid security issues.
      +1416      * <p>
      +1417      * Null is returned if the URL cannot be opened.
      +1418      */
      +1419     private static Properties getProperties(final URL url) {
      +1420         PrivilegedAction action = 
      +1421             new PrivilegedAction() {
      +1422                 public Object run() {
      +1423                     try {
      +1424                         InputStream stream = url.openStream();
      +1425                         if (stream != null) {
      +1426                             Properties props = new Properties();
      +1427                             props.load(stream);
      +1428                             stream.close();
      +1429                             return props;
      +1430                         }
      +1431                     } catch(IOException e) {
      +1432                         if (isDiagnosticsEnabled()) {
      +1433                             logDiagnostic("Unable to read URL " + url);
      +1434                         }
      +1435                     }
      +1436 
      +1437                     return null;
      +1438                 }
      +1439             };
      +1440         return (Properties) AccessController.doPrivileged(action);
      +1441     }
      +1442 
      +1443     /**
      +1444      * Locate a user-provided configuration file.
      +1445      * <p>
      +1446      * The classpath of the specified classLoader (usually the context classloader)
      +1447      * is searched for properties files of the specified name. If none is found,
      +1448      * null is returned. If more than one is found, then the file with the greatest
      +1449      * value for its PRIORITY property is returned. If multiple files have the
      +1450      * same PRIORITY value then the first in the classpath is returned.
      +1451      * <p> 
      +1452      * This differs from the 1.0.x releases; those always use the first one found.
      +1453      * However as the priority is a new field, this change is backwards compatible.
      +1454      * <p>
      +1455      * The purpose of the priority field is to allow a webserver administrator to
      +1456      * override logging settings in all webapps by placing a commons-logging.properties
      +1457      * file in a shared classpath location with a priority > 0; this overrides any
      +1458      * commons-logging.properties files without priorities which are in the
      +1459      * webapps. Webapps can also use explicit priorities to override a configuration
      +1460      * file in the shared classpath if needed. 
      +1461      */
      +1462     private static final Properties getConfigurationFile(
      +1463             ClassLoader classLoader, String fileName) {
      +1464 
      +1465         Properties props = null;
      +1466         double priority = 0.0;
      +1467         URL propsUrl = null;
      +1468         try {
      +1469             Enumeration urls = getResources(classLoader, fileName);
      +1470 
      +1471             if (urls == null) {
      +1472                 return null;
      +1473             }
      +1474             
      +1475             while (urls.hasMoreElements()) {
      +1476                 URL url = (URL) urls.nextElement();
      +1477                 
      +1478                 Properties newProps = getProperties(url);
      +1479                 if (newProps != null) {
      +1480                     if (props == null) {
      +1481                         propsUrl = url; 
      +1482                         props = newProps;
      +1483                         String priorityStr = props.getProperty(PRIORITY_KEY);
      +1484                         priority = 0.0;
      +1485                         if (priorityStr != null) {
      +1486                             priority = Double.parseDouble(priorityStr);
      +1487                         }
      +1488 
      +1489                         if (isDiagnosticsEnabled()) {
      +1490                             logDiagnostic(
      +1491                                 "[LOOKUP] Properties file found at '" + url + "'"
      +1492                                 + " with priority " + priority); 
      +1493                         }
      +1494                     } else {
      +1495                         String newPriorityStr = newProps.getProperty(PRIORITY_KEY);
      +1496                         double newPriority = 0.0;
      +1497                         if (newPriorityStr != null) {
      +1498                             newPriority = Double.parseDouble(newPriorityStr);
      +1499                         }
      +1500 
      +1501                         if (newPriority > priority) {
      +1502                             if (isDiagnosticsEnabled()) {
      +1503                                 logDiagnostic(
      +1504                                     "[LOOKUP] Properties file at '" + url + "'"
      +1505                                     + " with priority " + newPriority 
      +1506                                     + " overrides file at '" + propsUrl + "'"
      +1507                                     + " with priority " + priority);
      +1508                             }
      +1509 
      +1510                             propsUrl = url; 
      +1511                             props = newProps;
      +1512                             priority = newPriority;
      +1513                         } else {
      +1514                             if (isDiagnosticsEnabled()) {
      +1515                                 logDiagnostic(
      +1516                                     "[LOOKUP] Properties file at '" + url + "'"
      +1517                                     + " with priority " + newPriority 
      +1518                                     + " does not override file at '" + propsUrl + "'"
      +1519                                     + " with priority " + priority);
      +1520                             }
      +1521                         }
      +1522                     }
      +1523 
      +1524                 }
      +1525             }
      +1526         } catch (SecurityException e) {
      +1527             if (isDiagnosticsEnabled()) {
      +1528                 logDiagnostic("SecurityException thrown while trying to find/read config files.");
      +1529             }
      +1530         }
      +1531 
      +1532         if (isDiagnosticsEnabled()) {
      +1533             if (props == null) {
      +1534                 logDiagnostic(
      +1535                     "[LOOKUP] No properties file of name '" + fileName
      +1536                     + "' found.");
      +1537             } else {
      +1538                 logDiagnostic(
      +1539                     "[LOOKUP] Properties file of name '" + fileName
      +1540                     + "' found at '" + propsUrl + '"');
      +1541             }
      +1542         }
      +1543 
      +1544         return props;
      +1545     }
      +1546 
      +1547     /**
      +1548      * Read the specified system property, using an AccessController so that 
      +1549      * the property can be read if JCL has been granted the appropriate
      +1550      * security rights even if the calling code has not.
      +1551      * <p>
      +1552      * Take care not to expose the value returned by this method to the
      +1553      * calling application in any way; otherwise the calling app can use that
      +1554      * info to access data that should not be available to it.
      +1555      */
      +1556     private static String getSystemProperty(final String key, final String def)
      +1557     throws SecurityException {
      +1558         return (String) AccessController.doPrivileged(
      +1559                 new PrivilegedAction() {
      +1560                     public Object run() {
      +1561                         return System.getProperty(key, def);
      +1562                     }
      +1563                 });
      +1564     }
      +1565 
      +1566     /**
      +1567      * Determines whether the user wants internal diagnostic output. If so,
      +1568      * returns an appropriate writer object. Users can enable diagnostic
      +1569      * output by setting the system property named {@link #DIAGNOSTICS_DEST_PROPERTY} to
      +1570      * a filename, or the special values STDOUT or STDERR. 
      +1571      */
      +1572     private static void initDiagnostics() {
      +1573         String dest;
      +1574         try {
      +1575             dest = getSystemProperty(DIAGNOSTICS_DEST_PROPERTY, null);
      +1576             if (dest == null) {
      +1577                 return;
      +1578             }
      +1579         } catch(SecurityException ex) {
      +1580             // We must be running in some very secure environment.
      +1581             // We just have to assume output is not wanted..
      +1582             return;
      +1583         }
      +1584 
      +1585         if (dest.equals("STDOUT")) {
      +1586             diagnosticsStream = System.out;
      +1587         } else if (dest.equals("STDERR")) {
      +1588             diagnosticsStream = System.err;
      +1589         } else {
      +1590             try {
      +1591                 // open the file in append mode
      +1592                 FileOutputStream fos = new FileOutputStream(dest, true);
      +1593                 diagnosticsStream = new PrintStream(fos);
      +1594             } catch(IOException ex) {
      +1595                 // We should report this to the user - but how?
      +1596                 return;
      +1597             }
      +1598         }
      +1599 
      +1600         // In order to avoid confusion where multiple instances of JCL are
      +1601         // being used via different classloaders within the same app, we
      +1602         // ensure each logged message has a prefix of form
      +1603         // [LogFactory from classloader OID]
      +1604         //
      +1605         // Note that this prefix should be kept consistent with that 
      +1606         // in LogFactoryImpl. However here we don't need to output info
      +1607         // about the actual *instance* of LogFactory, as all methods that
      +1608         // output diagnostics from this class are static.
      +1609         String classLoaderName;
      +1610         try {
      +1611             ClassLoader classLoader = thisClassLoader;
      +1612             if (thisClassLoader == null) {
      +1613                 classLoaderName = "BOOTLOADER";
      +1614             } else {
      +1615                 classLoaderName = objectId(classLoader);
      +1616             }
      +1617         } catch(SecurityException e) {
      +1618             classLoaderName = "UNKNOWN";
      +1619         }
      +1620         diagnosticPrefix = "[LogFactory from " + classLoaderName + "] ";
      +1621     }
      +1622 
      +1623     /**
      +1624      * Indicates true if the user has enabled internal logging.
      +1625      * <p>
      +1626      * By the way, sorry for the incorrect grammar, but calling this method
      +1627      * areDiagnosticsEnabled just isn't java beans style.
      +1628      * 
      +1629      * @return true if calls to logDiagnostic will have any effect.
      +1630      * @since 1.1
      +1631      */
      +1632     protected static boolean isDiagnosticsEnabled() {
      +1633         return diagnosticsStream != null;
      +1634     }
      +1635 
      +1636     /**
      +1637      * Write the specified message to the internal logging destination.
      +1638      * <p>
      +1639      * Note that this method is private; concrete subclasses of this class
      +1640      * should not call it because the diagnosticPrefix string this
      +1641      * method puts in front of all its messages is LogFactory@....,
      +1642      * while subclasses should put SomeSubClass@...
      +1643      * <p>
      +1644      * Subclasses should instead compute their own prefix, then call
      +1645      * logRawDiagnostic. Note that calling isDiagnosticsEnabled is
      +1646      * fine for subclasses.
      +1647      * <p>
      +1648      * Note that it is safe to call this method before initDiagnostics
      +1649      * is called; any output will just be ignored (as isDiagnosticsEnabled
      +1650      * will return false).
      +1651      * 
      +1652      * @param msg is the diagnostic message to be output.
      +1653      */
      +1654     private static final void logDiagnostic(String msg) {
      +1655         if (diagnosticsStream != null) {
      +1656             diagnosticsStream.print(diagnosticPrefix);
      +1657             diagnosticsStream.println(msg);
      +1658             diagnosticsStream.flush();
      +1659         }
      +1660     }
      +1661 
      +1662     /**
      +1663      * Write the specified message to the internal logging destination.
      +1664      * 
      +1665      * @param msg is the diagnostic message to be output.
      +1666      * @since 1.1
      +1667      */
      +1668     protected static final void logRawDiagnostic(String msg) {
      +1669         if (diagnosticsStream != null) {
      +1670             diagnosticsStream.println(msg);
      +1671             diagnosticsStream.flush();
      +1672         }
      +1673     }
      +1674 
      +1675     /**
      +1676      * Generate useful diagnostics regarding the classloader tree for
      +1677      * the specified class.
      +1678      * <p>
      +1679      * As an example, if the specified class was loaded via a webapp's
      +1680      * classloader, then you may get the following output:
      +1681      * <pre>
      +1682      * Class com.acme.Foo was loaded via classloader 11111
      +1683      * ClassLoader tree: 11111 -> 22222 (SYSTEM) -> 33333 -> BOOT 
      +1684      * </pre>
      +1685      * <p>
      +1686      * This method returns immediately if isDiagnosticsEnabled()
      +1687      * returns false.
      +1688      * 
      +1689      * @param clazz is the class whose classloader + tree are to be
      +1690      * output.
      +1691      */
      +1692     private static void logClassLoaderEnvironment(Class clazz) {
      +1693         if (!isDiagnosticsEnabled()) {
      +1694             return;
      +1695         }
      +1696         
      +1697         try {
      +1698             // Deliberately use System.getProperty here instead of getSystemProperty; if
      +1699             // the overall security policy for the calling application forbids access to
      +1700             // these variables then we do not want to output them to the diagnostic stream. 
      +1701             logDiagnostic("[ENV] Extension directories (java.ext.dir): " + System.getProperty("java.ext.dir"));
      +1702             logDiagnostic("[ENV] Application classpath (java.class.path): " + System.getProperty("java.class.path"));
      +1703         } catch(SecurityException ex) {
      +1704             logDiagnostic("[ENV] Security setting prevent interrogation of system classpaths.");
      +1705         }
      +1706         
      +1707         String className = clazz.getName();
      +1708         ClassLoader classLoader;
      +1709         
      +1710         try {
      +1711             classLoader = getClassLoader(clazz);
      +1712         } catch(SecurityException ex) {
      +1713             // not much useful diagnostics we can print here!
      +1714             logDiagnostic(
      +1715                 "[ENV] Security forbids determining the classloader for " + className);
      +1716             return;
      +1717         }
      +1718 
      +1719         logDiagnostic(
      +1720             "[ENV] Class " + className + " was loaded via classloader "
      +1721             + objectId(classLoader));
      +1722         logHierarchy("[ENV] Ancestry of classloader which loaded " + className + " is ", classLoader);
      +1723     }
      +1724 
      +1725     /**
      +1726      * Logs diagnostic messages about the given classloader
      +1727      * and it's hierarchy. The prefix is prepended to the message
      +1728      * and is intended to make it easier to understand the logs.
      +1729      * @param prefix 
      +1730      * @param classLoader
      +1731      */
      +1732     private static void logHierarchy(String prefix, ClassLoader classLoader) {
      +1733         if (!isDiagnosticsEnabled()) {
      +1734             return;
      +1735         }
      +1736         ClassLoader systemClassLoader;
      +1737         if (classLoader != null) {
      +1738             final String classLoaderString = classLoader.toString();
      +1739             logDiagnostic(prefix + objectId(classLoader) + " == '" + classLoaderString + "'");
      +1740         }
      +1741         
      +1742         try {
      +1743             systemClassLoader = ClassLoader.getSystemClassLoader();
      +1744         } catch(SecurityException ex) {
      +1745             logDiagnostic(
      +1746                     prefix + "Security forbids determining the system classloader.");
      +1747             return;
      +1748         }        
      +1749         if (classLoader != null) {
      +1750             StringBuffer buf = new StringBuffer(prefix + "ClassLoader tree:");
      +1751             for(;;) {
      +1752                 buf.append(objectId(classLoader));
      +1753                 if (classLoader == systemClassLoader) {
      +1754                     buf.append(" (SYSTEM) ");
      +1755                 }
      +1756 
      +1757                 try {
      +1758                     classLoader = classLoader.getParent();
      +1759                 } catch(SecurityException ex) {
      +1760                     buf.append(" --> SECRET");
      +1761                     break;
      +1762                 }
      +1763 
      +1764                 buf.append(" --> ");
      +1765                 if (classLoader == null) {
      +1766                     buf.append("BOOT");
      +1767                     break;
      +1768                 }
      +1769             }
      +1770             logDiagnostic(buf.toString());
      +1771         }
      +1772     }
      +1773 
      +1774     /**
      +1775      * Returns a string that uniquely identifies the specified object, including
      +1776      * its class.
      +1777      * <p>
      +1778      * The returned string is of form "classname@hashcode", ie is the same as
      +1779      * the return value of the Object.toString() method, but works even when
      +1780      * the specified object's class has overidden the toString method.
      +1781      * 
      +1782      * @param o may be null.
      +1783      * @return a string of form classname@hashcode, or "null" if param o is null.
      +1784      * @since 1.1
      +1785      */
      +1786     public static String objectId(Object o) {
      +1787         if (o == null) {
      +1788             return "null";
      +1789         } else {
      +1790             return o.getClass().getName() + "@" + System.identityHashCode(o);
      +1791         }
      +1792     }
      +1793 
      +1794     // ----------------------------------------------------------------------
      +1795     // Static initialiser block to perform initialisation at class load time.
      +1796     //
      +1797     // We can't do this in the class constructor, as there are many 
      +1798     // static methods on this class that can be called before any
      +1799     // LogFactory instances are created, and they depend upon this
      +1800     // stuff having been set up.
      +1801     //
      +1802     // Note that this block must come after any variable declarations used
      +1803     // by any methods called from this block, as we want any static initialiser
      +1804     // associated with the variable to run first. If static initialisers for
      +1805     // variables run after this code, then (a) their value might be needed
      +1806     // by methods called from here, and (b) they might *override* any value
      +1807     // computed here!
      +1808     //
      +1809     // So the wisest thing to do is just to place this code at the very end
      +1810     // of the class file.
      +1811     // ----------------------------------------------------------------------
      +1812 
      +1813     static {
      +1814         // note: it's safe to call methods before initDiagnostics (though
      +1815         // diagnostic output gets discarded).
      +1816         thisClassLoader = getClassLoader(LogFactory.class);
      +1817         initDiagnostics();
      +1818         logClassLoaderEnvironment(LogFactory.class);
      +1819         factories = createFactoryStore();
      +1820         if (isDiagnosticsEnabled()) {
      +1821             logDiagnostic("BOOTSTRAP COMPLETED");
      +1822         }
      +1823     }
      +1824 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogSource.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogSource.html new file mode 100644 index 0000000..f3c9163 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/LogSource.html @@ -0,0 +1,276 @@ + + + + +LogSource xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging;
      +19  
      +20  
      +21  import java.lang.reflect.Constructor;
      +22  import java.util.Hashtable;
      +23  
      +24  import org.apache.commons.logging.impl.NoOpLog;
      +25  
      +26  
      +27  /**
      +28   * <p>Factory for creating {@link Log} instances.  Applications should call
      +29   * the <code>makeNewLogInstance()</code> method to instantiate new instances
      +30   * of the configured {@link Log} implementation class.</p>
      +31   *
      +32   * <p>By default, calling <code>getInstance()</code> will use the following
      +33   * algorithm:</p>
      +34   * <ul>
      +35   * <li>If Log4J is available, return an instance of
      +36   *     <code>org.apache.commons.logging.impl.Log4JLogger</code>.</li>
      +37   * <li>If JDK 1.4 or later is available, return an instance of
      +38   *     <code>org.apache.commons.logging.impl.Jdk14Logger</code>.</li>
      +39   * <li>Otherwise, return an instance of
      +40   *     <code>org.apache.commons.logging.impl.NoOpLog</code>.</li>
      +41   * </ul>
      +42   *
      +43   * <p>You can change the default behavior in one of two ways:</p>
      +44   * <ul>
      +45   * <li>On the startup command line, set the system property
      +46   *     <code>org.apache.commons.logging.log</code> to the name of the
      +47   *     <code>org.apache.commons.logging.Log</code> implementation class
      +48   *     you want to use.</li>
      +49   * <li>At runtime, call <code>LogSource.setLogImplementation()</code>.</li>
      +50   * </ul>
      +51   *
      +52   * @deprecated Use {@link LogFactory} instead - The default factory
      +53   *  implementation performs exactly the same algorithm as this class did
      +54   *
      +55   * @author Rod Waldhoff
      +56   * @version $Id: LogSource.java 424107 2006-07-20 23:15:42Z skitching $
      +57   */
      +58  public class LogSource {
      +59  
      +60      // ------------------------------------------------------- Class Attributes
      +61  
      +62      static protected Hashtable logs = new Hashtable();
      +63  
      +64      /** Is log4j available (in the current classpath) */
      +65      static protected boolean log4jIsAvailable = false;
      +66  
      +67      /** Is JDK 1.4 logging available */
      +68      static protected boolean jdk14IsAvailable = false;
      +69  
      +70      /** Constructor for current log class */
      +71      static protected Constructor logImplctor = null;
      +72  
      +73  
      +74      // ----------------------------------------------------- Class Initializers
      +75  
      +76      static {
      +77  
      +78          // Is Log4J Available?
      +79          try {
      +80              if (null != Class.forName("org.apache.log4j.Logger")) {
      +81                  log4jIsAvailable = true;
      +82              } else {
      +83                  log4jIsAvailable = false;
      +84              }
      +85          } catch (Throwable t) {
      +86              log4jIsAvailable = false;
      +87          }
      +88  
      +89          // Is JDK 1.4 Logging Available?
      +90          try {
      +91              if ((null != Class.forName("java.util.logging.Logger")) &&
      +92                  (null != Class.forName("org.apache.commons.logging.impl.Jdk14Logger"))) {
      +93                  jdk14IsAvailable = true;
      +94              } else {
      +95                  jdk14IsAvailable = false;
      +96              }
      +97          } catch (Throwable t) {
      +98              jdk14IsAvailable = false;
      +99          }
      +100 
      +101         // Set the default Log implementation
      +102         String name = null;
      +103         try {
      +104             name = System.getProperty("org.apache.commons.logging.log");
      +105             if (name == null) {
      +106                 name = System.getProperty("org.apache.commons.logging.Log");
      +107             }
      +108         } catch (Throwable t) {
      +109         }
      +110         if (name != null) {
      +111             try {
      +112                 setLogImplementation(name);
      +113             } catch (Throwable t) {
      +114                 try {
      +115                     setLogImplementation
      +116                             ("org.apache.commons.logging.impl.NoOpLog");
      +117                 } catch (Throwable u) {
      +118                     ;
      +119                 }
      +120             }
      +121         } else {
      +122             try {
      +123                 if (log4jIsAvailable) {
      +124                     setLogImplementation
      +125                             ("org.apache.commons.logging.impl.Log4JLogger");
      +126                 } else if (jdk14IsAvailable) {
      +127                     setLogImplementation
      +128                             ("org.apache.commons.logging.impl.Jdk14Logger");
      +129                 } else {
      +130                     setLogImplementation
      +131                             ("org.apache.commons.logging.impl.NoOpLog");
      +132                 }
      +133             } catch (Throwable t) {
      +134                 try {
      +135                     setLogImplementation
      +136                             ("org.apache.commons.logging.impl.NoOpLog");
      +137                 } catch (Throwable u) {
      +138                     ;
      +139                 }
      +140             }
      +141         }
      +142 
      +143     }
      +144 
      +145 
      +146     // ------------------------------------------------------------ Constructor
      +147 
      +148 
      +149     /** Don't allow others to create instances */
      +150     private LogSource() {
      +151     }
      +152 
      +153 
      +154     // ---------------------------------------------------------- Class Methods
      +155 
      +156 
      +157     /**
      +158      * Set the log implementation/log implementation factory
      +159      * by the name of the class.  The given class
      +160      * must implement {@link Log}, and provide a constructor that
      +161      * takes a single {@link String} argument (containing the name
      +162      * of the log).
      +163      */
      +164     static public void setLogImplementation(String classname) throws
      +165             LinkageError, ExceptionInInitializerError,
      +166             NoSuchMethodException, SecurityException,
      +167             ClassNotFoundException {
      +168         try {
      +169             Class logclass = Class.forName(classname);
      +170             Class[] argtypes = new Class[1];
      +171             argtypes[0] = "".getClass();
      +172             logImplctor = logclass.getConstructor(argtypes);
      +173         } catch (Throwable t) {
      +174             logImplctor = null;
      +175         }
      +176     }
      +177 
      +178 
      +179     /**
      +180      * Set the log implementation/log implementation factory
      +181      * by class.  The given class must implement {@link Log},
      +182      * and provide a constructor that takes a single {@link String}
      +183      * argument (containing the name of the log).
      +184      */
      +185     static public void setLogImplementation(Class logclass) throws
      +186             LinkageError, ExceptionInInitializerError,
      +187             NoSuchMethodException, SecurityException {
      +188         Class[] argtypes = new Class[1];
      +189         argtypes[0] = "".getClass();
      +190         logImplctor = logclass.getConstructor(argtypes);
      +191     }
      +192 
      +193 
      +194     /** Get a <code>Log</code> instance by class name */
      +195     static public Log getInstance(String name) {
      +196         Log log = (Log) (logs.get(name));
      +197         if (null == log) {
      +198             log = makeNewLogInstance(name);
      +199             logs.put(name, log);
      +200         }
      +201         return log;
      +202     }
      +203 
      +204 
      +205     /** Get a <code>Log</code> instance by class */
      +206     static public Log getInstance(Class clazz) {
      +207         return getInstance(clazz.getName());
      +208     }
      +209 
      +210 
      +211     /**
      +212      * Create a new {@link Log} implementation, based
      +213      * on the given <i>name</i>.
      +214      * <p>
      +215      * The specific {@link Log} implementation returned
      +216      * is determined by the value of the
      +217      * <tt>org.apache.commons.logging.log</tt> property.
      +218      * The value of <tt>org.apache.commons.logging.log</tt> may be set to
      +219      * the fully specified name of a class that implements
      +220      * the {@link Log} interface.  This class must also
      +221      * have a public constructor that takes a single
      +222      * {@link String} argument (containing the <i>name</i>
      +223      * of the {@link Log} to be constructed.
      +224      * <p>
      +225      * When <tt>org.apache.commons.logging.log</tt> is not set,
      +226      * or when no corresponding class can be found,
      +227      * this method will return a Log4JLogger
      +228      * if the log4j Logger class is
      +229      * available in the {@link LogSource}'s classpath, or a
      +230      * Jdk14Logger if we are on a JDK 1.4 or later system, or
      +231      * NoOpLog if neither of the above conditions is true.
      +232      *
      +233      * @param name the log name (or category)
      +234      */
      +235     static public Log makeNewLogInstance(String name) {
      +236 
      +237         Log log = null;
      +238         try {
      +239             Object[] args = new Object[1];
      +240             args[0] = name;
      +241             log = (Log) (logImplctor.newInstance(args));
      +242         } catch (Throwable t) {
      +243             log = null;
      +244         }
      +245         if (null == log) {
      +246             log = new NoOpLog(name);
      +247         }
      +248         return log;
      +249 
      +250     }
      +251 
      +252 
      +253     /**
      +254      * Returns a {@link String} array containing the names of
      +255      * all logs known to me.
      +256      */
      +257     static public String[] getLogNames() {
      +258         return (String[]) (logs.keySet().toArray(new String[logs.size()]));
      +259     }
      +260 
      +261 
      +262 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/AvalonLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/AvalonLogger.html new file mode 100644 index 0000000..10cf689 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/AvalonLogger.html @@ -0,0 +1,306 @@ + + + + +AvalonLogger xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.impl;
      +19  
      +20  import org.apache.avalon.framework.logger.Logger;
      +21  import org.apache.commons.logging.Log;
      +22  
      +23  /**
      +24   * <p>Implementation of commons-logging Log interface that delegates all
      +25   * logging calls to the Avalon logging abstraction: the Logger interface.
      +26   * </p>
      +27   * <p>
      +28   * There are two ways in which this class can be used:
      +29   * </p>
      +30   * <ul>
      +31   * <li>the instance can be constructed with an Avalon logger 
      +32   * (by calling {@link #AvalonLogger(Logger)}). In this case, it acts 
      +33   * as a simple thin wrapping implementation over the logger. This is 
      +34   * particularly useful when using a property setter.
      +35   * </li>
      +36   * <li>the {@link #setDefaultLogger} class property can be called which
      +37   * sets the ancesteral Avalon logger for this class. Any <code>AvalonLogger</code> 
      +38   * instances created through the <code>LogFactory</code> mechanisms will output
      +39   * to child loggers of this <code>Logger</code>.
      +40   * </li>
      +41   * </ul>
      +42   * <p>
      +43   * <strong>Note:</strong> <code>AvalonLogger</code> does not implement Serializable
      +44   * because the constructors available for it make this impossible to achieve in all
      +45   * circumstances; there is no way to "reconnect" to an underlying Logger object on
      +46   * deserialization if one was just passed in to the constructor of the original
      +47   * object. This class <i>was</i> marked Serializable in the 1.0.4 release of
      +48   * commons-logging, but this never actually worked (a NullPointerException would 
      +49   * be thrown as soon as the deserialized object was used), so removing this marker
      +50   * is not considered to be an incompatible change.
      +51   * </p>
      +52   * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
      +53   * @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +54   */
      +55  public class AvalonLogger implements Log {
      +56  
      +57      /** Ancesteral avalon logger  */ 
      +58      private static Logger defaultLogger = null;
      +59      /** Avalon logger used to perform log */
      +60      private transient Logger logger = null;
      +61  
      +62      /**
      +63       * Constructs an <code>AvalonLogger</code> that outputs to the given
      +64       * <code>Logger</code> instance.
      +65       * @param logger the avalon logger implementation to delegate to
      +66       */
      +67      public AvalonLogger(Logger logger) {
      +68          this.logger = logger;
      +69      }
      +70  
      +71      /**
      +72       * Constructs an <code>AvalonLogger</code> that will log to a child
      +73       * of the <code>Logger</code> set by calling {@link #setDefaultLogger}.
      +74       * @param name the name of the avalon logger implementation to delegate to
      +75       */
      +76      public AvalonLogger(String name) {
      +77          if (defaultLogger == null)
      +78              throw new NullPointerException("default logger has to be specified if this constructor is used!");
      +79          this.logger = defaultLogger.getChildLogger(name);
      +80      }
      +81  
      +82      /**
      +83       * Gets the Avalon logger implementation used to perform logging.
      +84       * @return avalon logger implementation
      +85       */
      +86      public Logger getLogger() {
      +87          return logger;
      +88      }
      +89  
      +90      /**
      +91       * Sets the ancesteral Avalon logger from which the delegating loggers 
      +92       * will descend.
      +93       * @param logger the default avalon logger, 
      +94       * in case there is no logger instance supplied in constructor
      +95       */
      +96      public static void setDefaultLogger(Logger logger) {
      +97          defaultLogger = logger;
      +98      }
      +99  
      +100     /**
      +101     * Logs a message with
      +102     * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
      +103     * 
      +104     * @param message to log
      +105     * @param t log this cause
      +106     * @see org.apache.commons.logging.Log#debug(Object, Throwable)
      +107      */
      +108     public void debug(Object message, Throwable t) {
      +109         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message), t);
      +110     }
      +111 
      +112     /**
      +113      * Logs a message with
      +114      * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
      +115      * 
      +116      * @param message to log.
      +117      * @see org.apache.commons.logging.Log#debug(Object)
      +118      */
      +119     public void debug(Object message) {
      +120         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message));
      +121     }
      +122 
      +123     /**
      +124      * Logs a message with
      +125      * <code>org.apache.avalon.framework.logger.Logger.error</code>.
      +126      * 
      +127      * @param message to log
      +128      * @param t log this cause
      +129      * @see org.apache.commons.logging.Log#error(Object, Throwable)
      +130      */
      +131     public void error(Object message, Throwable t) {
      +132         if (getLogger().isErrorEnabled()) getLogger().error(String.valueOf(message), t);
      +133     }
      +134 
      +135     /**
      +136      * Logs a message with
      +137      * <code>org.apache.avalon.framework.logger.Logger.error</code>.
      +138      * 
      +139      * @param message to log
      +140      * @see org.apache.commons.logging.Log#error(Object)
      +141      */
      +142     public void error(Object message) {
      +143         if (getLogger().isErrorEnabled()) getLogger().error(String.valueOf(message));
      +144     }
      +145 
      +146     /**
      +147      * Logs a message with
      +148      * <code>org.apache.avalon.framework.logger.Logger.fatalError</code>.
      +149      * 
      +150      * @param message to log.
      +151      * @param t log this cause.
      +152      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
      +153      */
      +154     public void fatal(Object message, Throwable t) {
      +155         if (getLogger().isFatalErrorEnabled()) getLogger().fatalError(String.valueOf(message), t);
      +156     }
      +157 
      +158     /**
      +159      * Logs a message with
      +160      * <code>org.apache.avalon.framework.logger.Logger.fatalError</code>.
      +161      * 
      +162      * @param message to log
      +163      * @see org.apache.commons.logging.Log#fatal(Object)
      +164      */
      +165     public void fatal(Object message) {
      +166         if (getLogger().isFatalErrorEnabled()) getLogger().fatalError(String.valueOf(message));
      +167     }
      +168 
      +169     /**
      +170      * Logs a message with
      +171      * <code>org.apache.avalon.framework.logger.Logger.info</code>.
      +172      * 
      +173      * @param message to log
      +174      * @param t log this cause
      +175      * @see org.apache.commons.logging.Log#info(Object, Throwable)
      +176      */
      +177     public void info(Object message, Throwable t) {
      +178         if (getLogger().isInfoEnabled()) getLogger().info(String.valueOf(message), t);
      +179     }
      +180 
      +181     /**
      +182      * Logs a message with
      +183      * <code>org.apache.avalon.framework.logger.Logger.info</code>.
      +184      * 
      +185      * @param message to log
      +186      * @see org.apache.commons.logging.Log#info(Object)
      +187      */
      +188     public void info(Object message) {
      +189         if (getLogger().isInfoEnabled()) getLogger().info(String.valueOf(message));
      +190     }
      +191 
      +192     /**
      +193      * Is logging to 
      +194      * <code>org.apache.avalon.framework.logger.Logger.debug</code> enabled?
      +195      * @see org.apache.commons.logging.Log#isDebugEnabled()
      +196      */
      +197     public boolean isDebugEnabled() {
      +198         return getLogger().isDebugEnabled();
      +199     }
      +200 
      +201     /**
      +202      * Is logging to 
      +203      * <code>org.apache.avalon.framework.logger.Logger.error</code> enabled?
      +204      * @see org.apache.commons.logging.Log#isErrorEnabled()
      +205      */
      +206     public boolean isErrorEnabled() {
      +207         return getLogger().isErrorEnabled();
      +208     }
      +209 
      +210     /**
      +211      * Is logging to 
      +212      * <code>org.apache.avalon.framework.logger.Logger.fatalError</code> enabled?
      +213      * @see org.apache.commons.logging.Log#isFatalEnabled()
      +214      */
      +215     public boolean isFatalEnabled() {
      +216         return getLogger().isFatalErrorEnabled();
      +217     }
      +218 
      +219     /**
      +220      * Is logging to
      +221      * <code>org.apache.avalon.framework.logger.Logger.info</code> enabled?
      +222      * @see org.apache.commons.logging.Log#isInfoEnabled()
      +223      */
      +224     public boolean isInfoEnabled() {
      +225         return getLogger().isInfoEnabled();
      +226     }
      +227 
      +228     /**
      +229      * Is logging to 
      +230      * <code>org.apache.avalon.framework.logger.Logger.debug</code> enabled?
      +231      * @see org.apache.commons.logging.Log#isTraceEnabled()
      +232      */
      +233     public boolean isTraceEnabled() {
      +234         return getLogger().isDebugEnabled();
      +235     }
      +236 
      +237     /**
      +238      * Is logging to 
      +239      * <code>org.apache.avalon.framework.logger.Logger.warn</code> enabled?
      +240      * @see org.apache.commons.logging.Log#isWarnEnabled()
      +241      */
      +242     public boolean isWarnEnabled() {
      +243         return getLogger().isWarnEnabled();
      +244     }
      +245 
      +246     /**
      +247      * Logs a message with
      +248      * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
      +249      * 
      +250      * @param message to log.
      +251      * @param t log this cause.
      +252      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
      +253      */
      +254     public void trace(Object message, Throwable t) {
      +255         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message), t);
      +256     }
      +257 
      +258     /**
      +259      * Logs a message with
      +260      * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
      +261      * 
      +262      * @param message to log
      +263      * @see org.apache.commons.logging.Log#trace(Object)
      +264      */
      +265     public void trace(Object message) {
      +266         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message));
      +267     }
      +268 
      +269     /**
      +270      * Logs a message with
      +271      * <code>org.apache.avalon.framework.logger.Logger.warn</code>.
      +272      * 
      +273      * @param message to log
      +274      * @param t log this cause
      +275      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
      +276      */
      +277     public void warn(Object message, Throwable t) {
      +278         if (getLogger().isWarnEnabled()) getLogger().warn(String.valueOf(message), t);
      +279     }
      +280 
      +281     /**
      +282      * Logs a message with
      +283      * <code>org.apache.avalon.framework.logger.Logger.warn</code>.
      +284      * 
      +285      * @param message to log
      +286      * @see org.apache.commons.logging.Log#warn(Object)
      +287      */
      +288     public void warn(Object message) {
      +289         if (getLogger().isWarnEnabled()) getLogger().warn(String.valueOf(message));
      +290     }
      +291 
      +292 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html new file mode 100644 index 0000000..7641d12 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk13LumberjackLogger.html @@ -0,0 +1,349 @@ + + + + +Jdk13LumberjackLogger xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  
      +22  import java.io.Serializable;
      +23  import java.util.logging.Level;
      +24  import java.util.logging.Logger;
      +25  import java.util.logging.LogRecord;
      +26  import java.util.StringTokenizer;
      +27  import java.io.PrintWriter;
      +28  import java.io.StringWriter;
      +29  
      +30  import org.apache.commons.logging.Log;
      +31  
      +32  
      +33  /**
      +34   * <p>Implementation of the <code>org.apache.commons.logging.Log</code>
      +35   * interface that wraps the standard JDK logging mechanisms that are
      +36   * available in SourceForge's Lumberjack for JDKs prior to 1.4.</p>
      +37   *
      +38   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +39   * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
      +40   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
      +41   * @author <a href="mailto:vince256@comcast.net">Vince Eagen</a>
      +42   * @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +43   * @since 1.1
      +44   */
      +45  
      +46  public class Jdk13LumberjackLogger implements Log, Serializable {
      +47  
      +48  
      +49      // ----------------------------------------------------- Instance Variables
      +50  
      +51  
      +52      /**
      +53       * The underlying Logger implementation we are using.
      +54       */
      +55      protected transient Logger logger = null;
      +56      protected String name = null;
      +57      private String sourceClassName = "unknown";
      +58      private String sourceMethodName = "unknown";
      +59      private boolean classAndMethodFound = false;
      +60  
      +61  
      +62      /**
      +63       * This member variable simply ensures that any attempt to initialise
      +64       * this class in a pre-1.4 JVM will result in an ExceptionInInitializerError.
      +65       * It must not be private, as an optimising compiler could detect that it
      +66       * is not used and optimise it away.
      +67       */
      +68      protected static final Level dummyLevel = Level.FINE;
      +69  
      +70      // ----------------------------------------------------------- Constructors
      +71  
      +72  
      +73      /**
      +74       * Construct a named instance of this Logger.
      +75       *
      +76       * @param name Name of the logger to be constructed
      +77       */
      +78      public Jdk13LumberjackLogger(String name) {
      +79  
      +80          this.name = name;
      +81          logger = getLogger();
      +82  
      +83      }
      +84  
      +85  
      +86      // --------------------------------------------------------- Public Methods
      +87  
      +88  
      +89      private void log( Level level, String msg, Throwable ex ) {
      +90          if( getLogger().isLoggable(level) ) {
      +91              LogRecord record = new LogRecord(level, msg);
      +92              if( !classAndMethodFound ) {
      +93                  getClassAndMethod();
      +94              }
      +95              record.setSourceClassName(sourceClassName);
      +96              record.setSourceMethodName(sourceMethodName);
      +97              if( ex != null ) {
      +98                  record.setThrown(ex);
      +99              }
      +100             getLogger().log(record);
      +101         }
      +102     }
      +103 
      +104     /**
      +105      * <p>Gets the class and method by looking at the stack trace for the
      +106      * first entry that is not this class.</p>
      +107      */
      +108     private void getClassAndMethod() {
      +109         try {
      +110             Throwable throwable = new Throwable();
      +111             throwable.fillInStackTrace();
      +112             StringWriter stringWriter = new StringWriter();
      +113             PrintWriter printWriter = new PrintWriter( stringWriter );
      +114             throwable.printStackTrace( printWriter );
      +115             String traceString = stringWriter.getBuffer().toString();
      +116             StringTokenizer tokenizer =
      +117                 new StringTokenizer( traceString, "\n" );
      +118             tokenizer.nextToken();
      +119             String line = tokenizer.nextToken();
      +120             while ( line.indexOf( this.getClass().getName() )  == -1 ) {
      +121                 line = tokenizer.nextToken();
      +122             }
      +123             while ( line.indexOf( this.getClass().getName() ) >= 0 ) {
      +124                 line = tokenizer.nextToken();
      +125             }
      +126             int start = line.indexOf( "at " ) + 3;
      +127             int end = line.indexOf( '(' );
      +128             String temp = line.substring( start, end );
      +129             int lastPeriod = temp.lastIndexOf( '.' );
      +130             sourceClassName = temp.substring( 0, lastPeriod );
      +131             sourceMethodName = temp.substring( lastPeriod + 1 );
      +132         } catch ( Exception ex ) {
      +133             // ignore - leave class and methodname unknown
      +134         }
      +135         classAndMethodFound = true;
      +136     }
      +137 
      +138     /**
      +139      * Logs a message with <code>java.util.logging.Level.FINE</code>.
      +140      *
      +141      * @param message to log
      +142      * @see org.apache.commons.logging.Log#debug(Object)
      +143      */
      +144     public void debug(Object message) {
      +145         log(Level.FINE, String.valueOf(message), null);
      +146     }
      +147 
      +148 
      +149     /**
      +150      * Logs a message with <code>java.util.logging.Level.FINE</code>.
      +151      *
      +152      * @param message to log
      +153      * @param exception log this cause
      +154      * @see org.apache.commons.logging.Log#debug(Object, Throwable)
      +155      */
      +156     public void debug(Object message, Throwable exception) {
      +157         log(Level.FINE, String.valueOf(message), exception);
      +158     }
      +159 
      +160 
      +161     /**
      +162      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +163      *
      +164      * @param message to log
      +165      * @see org.apache.commons.logging.Log#error(Object)
      +166      */
      +167     public void error(Object message) {
      +168         log(Level.SEVERE, String.valueOf(message), null);
      +169     }
      +170 
      +171 
      +172     /**
      +173      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +174      *
      +175      * @param message to log
      +176      * @param exception log this cause
      +177      * @see org.apache.commons.logging.Log#error(Object, Throwable)
      +178      */
      +179     public void error(Object message, Throwable exception) {
      +180         log(Level.SEVERE, String.valueOf(message), exception);
      +181     }
      +182 
      +183 
      +184     /**
      +185      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +186      *
      +187      * @param message to log
      +188      * @see org.apache.commons.logging.Log#fatal(Object)
      +189      */
      +190     public void fatal(Object message) {
      +191         log(Level.SEVERE, String.valueOf(message), null);
      +192     }
      +193 
      +194 
      +195     /**
      +196      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +197      *
      +198      * @param message to log
      +199      * @param exception log this cause
      +200      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
      +201      */
      +202     public void fatal(Object message, Throwable exception) {
      +203         log(Level.SEVERE, String.valueOf(message), exception);
      +204     }
      +205 
      +206 
      +207     /**
      +208      * Return the native Logger instance we are using.
      +209      */
      +210     public Logger getLogger() {
      +211         if (logger == null) {
      +212             logger = Logger.getLogger(name);
      +213         }
      +214         return (logger);
      +215     }
      +216 
      +217 
      +218     /**
      +219      * Logs a message with <code>java.util.logging.Level.INFO</code>.
      +220      *
      +221      * @param message to log
      +222      * @see org.apache.commons.logging.Log#info(Object)
      +223      */
      +224     public void info(Object message) {
      +225         log(Level.INFO, String.valueOf(message), null);
      +226     }
      +227 
      +228 
      +229     /**
      +230      * Logs a message with <code>java.util.logging.Level.INFO</code>.
      +231      *
      +232      * @param message to log
      +233      * @param exception log this cause
      +234      * @see org.apache.commons.logging.Log#info(Object, Throwable)
      +235      */
      +236     public void info(Object message, Throwable exception) {
      +237         log(Level.INFO, String.valueOf(message), exception);
      +238     }
      +239 
      +240 
      +241     /**
      +242      * Is debug logging currently enabled?
      +243      */
      +244     public boolean isDebugEnabled() {
      +245         return (getLogger().isLoggable(Level.FINE));
      +246     }
      +247 
      +248 
      +249     /**
      +250      * Is error logging currently enabled?
      +251      */
      +252     public boolean isErrorEnabled() {
      +253         return (getLogger().isLoggable(Level.SEVERE));
      +254     }
      +255 
      +256 
      +257     /**
      +258      * Is fatal logging currently enabled?
      +259      */
      +260     public boolean isFatalEnabled() {
      +261         return (getLogger().isLoggable(Level.SEVERE));
      +262     }
      +263 
      +264 
      +265     /**
      +266      * Is info logging currently enabled?
      +267      */
      +268     public boolean isInfoEnabled() {
      +269         return (getLogger().isLoggable(Level.INFO));
      +270     }
      +271 
      +272 
      +273     /**
      +274      * Is trace logging currently enabled?
      +275      */
      +276     public boolean isTraceEnabled() {
      +277         return (getLogger().isLoggable(Level.FINEST));
      +278     }
      +279 
      +280 
      +281     /**
      +282      * Is warn logging currently enabled?
      +283      */
      +284     public boolean isWarnEnabled() {
      +285         return (getLogger().isLoggable(Level.WARNING));
      +286     }
      +287 
      +288 
      +289     /**
      +290      * Logs a message with <code>java.util.logging.Level.FINEST</code>.
      +291      *
      +292      * @param message to log
      +293      * @see org.apache.commons.logging.Log#trace(Object)
      +294      */
      +295     public void trace(Object message) {
      +296         log(Level.FINEST, String.valueOf(message), null);
      +297     }
      +298 
      +299 
      +300     /**
      +301      * Logs a message with <code>java.util.logging.Level.FINEST</code>.
      +302      *
      +303      * @param message to log
      +304      * @param exception log this cause
      +305      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
      +306      */
      +307     public void trace(Object message, Throwable exception) {
      +308         log(Level.FINEST, String.valueOf(message), exception);
      +309     }
      +310 
      +311 
      +312     /**
      +313      * Logs a message with <code>java.util.logging.Level.WARNING</code>.
      +314      *
      +315      * @param message to log
      +316      * @see org.apache.commons.logging.Log#warn(Object)
      +317      */
      +318     public void warn(Object message) {
      +319         log(Level.WARNING, String.valueOf(message), null);
      +320     }
      +321 
      +322 
      +323     /**
      +324      * Logs a message with <code>java.util.logging.Level.WARNING</code>.
      +325      *
      +326      * @param message to log
      +327      * @param exception log this cause
      +328      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
      +329      */
      +330     public void warn(Object message, Throwable exception) {
      +331         log(Level.WARNING, String.valueOf(message), exception);
      +332     }
      +333 
      +334 
      +335 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk14Logger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk14Logger.html new file mode 100644 index 0000000..7f6aebe --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Jdk14Logger.html @@ -0,0 +1,318 @@ + + + + +Jdk14Logger xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  
      +22  import java.io.Serializable;
      +23  import java.util.logging.Level;
      +24  import java.util.logging.Logger;
      +25  
      +26  import org.apache.commons.logging.Log;
      +27  
      +28  
      +29  /**
      +30   * <p>Implementation of the <code>org.apache.commons.logging.Log</code>
      +31   * interface that wraps the standard JDK logging mechanisms that were
      +32   * introduced in the Merlin release (JDK 1.4).</p>
      +33   *
      +34   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +35   * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
      +36   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
      +37   * @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
      +38   */
      +39  
      +40  public class Jdk14Logger implements Log, Serializable {
      +41  
      +42      /**
      +43       * This member variable simply ensures that any attempt to initialise
      +44       * this class in a pre-1.4 JVM will result in an ExceptionInInitializerError.
      +45       * It must not be private, as an optimising compiler could detect that it
      +46       * is not used and optimise it away.
      +47       */
      +48      protected static final Level dummyLevel = Level.FINE;
      +49  
      +50      // ----------------------------------------------------------- Constructors
      +51  
      +52  
      +53      /**
      +54       * Construct a named instance of this Logger.
      +55       *
      +56       * @param name Name of the logger to be constructed
      +57       */
      +58      public Jdk14Logger(String name) {
      +59  
      +60          this.name = name;
      +61          logger = getLogger();
      +62  
      +63      }
      +64  
      +65  
      +66      // ----------------------------------------------------- Instance Variables
      +67  
      +68  
      +69      /**
      +70       * The underlying Logger implementation we are using.
      +71       */
      +72      protected transient Logger logger = null;
      +73  
      +74  
      +75      /**
      +76       * The name of the logger we are wrapping.
      +77       */
      +78      protected String name = null;
      +79  
      +80  
      +81      // --------------------------------------------------------- Public Methods
      +82  
      +83      private void log( Level level, String msg, Throwable ex ) {
      +84  
      +85          Logger logger = getLogger();
      +86          if (logger.isLoggable(level)) {
      +87              // Hack (?) to get the stack trace.
      +88              Throwable dummyException=new Throwable();
      +89              StackTraceElement locations[]=dummyException.getStackTrace();
      +90              // Caller will be the third element
      +91              String cname="unknown";
      +92              String method="unknown";
      +93              if( locations!=null && locations.length >2 ) {
      +94                  StackTraceElement caller=locations[2];
      +95                  cname=caller.getClassName();
      +96                  method=caller.getMethodName();
      +97              }
      +98              if( ex==null ) {
      +99                  logger.logp( level, cname, method, msg );
      +100             } else {
      +101                 logger.logp( level, cname, method, msg, ex );
      +102             }
      +103         }
      +104 
      +105     }
      +106 
      +107     /**
      +108      * Logs a message with <code>java.util.logging.Level.FINE</code>.
      +109      *
      +110      * @param message to log
      +111      * @see org.apache.commons.logging.Log#debug(Object)
      +112      */
      +113     public void debug(Object message) {
      +114         log(Level.FINE, String.valueOf(message), null);
      +115     }
      +116 
      +117 
      +118     /**
      +119      * Logs a message with <code>java.util.logging.Level.FINE</code>.
      +120      *
      +121      * @param message to log
      +122      * @param exception log this cause
      +123      * @see org.apache.commons.logging.Log#debug(Object, Throwable)
      +124      */
      +125     public void debug(Object message, Throwable exception) {
      +126         log(Level.FINE, String.valueOf(message), exception);
      +127     }
      +128 
      +129 
      +130     /**
      +131      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +132      *
      +133      * @param message to log
      +134      * @see org.apache.commons.logging.Log#error(Object)
      +135      */
      +136     public void error(Object message) {
      +137         log(Level.SEVERE, String.valueOf(message), null);
      +138     }
      +139 
      +140 
      +141     /**
      +142      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +143      *
      +144      * @param message to log
      +145      * @param exception log this cause
      +146      * @see org.apache.commons.logging.Log#error(Object, Throwable)
      +147      */
      +148     public void error(Object message, Throwable exception) {
      +149         log(Level.SEVERE, String.valueOf(message), exception);
      +150     }
      +151 
      +152 
      +153     /**
      +154      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +155      *
      +156      * @param message to log
      +157      * @see org.apache.commons.logging.Log#fatal(Object)
      +158      */
      +159     public void fatal(Object message) {
      +160         log(Level.SEVERE, String.valueOf(message), null);
      +161     }
      +162 
      +163 
      +164     /**
      +165      * Logs a message with <code>java.util.logging.Level.SEVERE</code>.
      +166      *
      +167      * @param message to log
      +168      * @param exception log this cause
      +169      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
      +170      */
      +171     public void fatal(Object message, Throwable exception) {
      +172         log(Level.SEVERE, String.valueOf(message), exception);
      +173     }
      +174 
      +175 
      +176     /**
      +177      * Return the native Logger instance we are using.
      +178      */
      +179     public Logger getLogger() {
      +180         if (logger == null) {
      +181             logger = Logger.getLogger(name);
      +182         }
      +183         return (logger);
      +184     }
      +185 
      +186 
      +187     /**
      +188      * Logs a message with <code>java.util.logging.Level.INFO</code>.
      +189      *
      +190      * @param message to log
      +191      * @see org.apache.commons.logging.Log#info(Object)
      +192      */
      +193     public void info(Object message) {
      +194         log(Level.INFO, String.valueOf(message), null);
      +195     }
      +196 
      +197 
      +198     /**
      +199      * Logs a message with <code>java.util.logging.Level.INFO</code>.
      +200      *
      +201      * @param message to log
      +202      * @param exception log this cause
      +203      * @see org.apache.commons.logging.Log#info(Object, Throwable)
      +204      */
      +205     public void info(Object message, Throwable exception) {
      +206         log(Level.INFO, String.valueOf(message), exception);
      +207     }
      +208 
      +209 
      +210     /**
      +211      * Is debug logging currently enabled?
      +212      */
      +213     public boolean isDebugEnabled() {
      +214         return (getLogger().isLoggable(Level.FINE));
      +215     }
      +216 
      +217 
      +218     /**
      +219      * Is error logging currently enabled?
      +220      */
      +221     public boolean isErrorEnabled() {
      +222         return (getLogger().isLoggable(Level.SEVERE));
      +223     }
      +224 
      +225 
      +226     /**
      +227      * Is fatal logging currently enabled?
      +228      */
      +229     public boolean isFatalEnabled() {
      +230         return (getLogger().isLoggable(Level.SEVERE));
      +231     }
      +232 
      +233 
      +234     /**
      +235      * Is info logging currently enabled?
      +236      */
      +237     public boolean isInfoEnabled() {
      +238         return (getLogger().isLoggable(Level.INFO));
      +239     }
      +240 
      +241 
      +242     /**
      +243      * Is trace logging currently enabled?
      +244      */
      +245     public boolean isTraceEnabled() {
      +246         return (getLogger().isLoggable(Level.FINEST));
      +247     }
      +248 
      +249 
      +250     /**
      +251      * Is warn logging currently enabled?
      +252      */
      +253     public boolean isWarnEnabled() {
      +254         return (getLogger().isLoggable(Level.WARNING));
      +255     }
      +256 
      +257 
      +258     /**
      +259      * Logs a message with <code>java.util.logging.Level.FINEST</code>.
      +260      *
      +261      * @param message to log
      +262      * @see org.apache.commons.logging.Log#trace(Object)
      +263      */
      +264     public void trace(Object message) {
      +265         log(Level.FINEST, String.valueOf(message), null);
      +266     }
      +267 
      +268 
      +269     /**
      +270      * Logs a message with <code>java.util.logging.Level.FINEST</code>.
      +271      *
      +272      * @param message to log
      +273      * @param exception log this cause
      +274      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
      +275      */
      +276     public void trace(Object message, Throwable exception) {
      +277         log(Level.FINEST, String.valueOf(message), exception);
      +278     }
      +279 
      +280 
      +281     /**
      +282      * Logs a message with <code>java.util.logging.Level.WARNING</code>.
      +283      *
      +284      * @param message to log
      +285      * @see org.apache.commons.logging.Log#warn(Object)
      +286      */
      +287     public void warn(Object message) {
      +288         log(Level.WARNING, String.valueOf(message), null);
      +289     }
      +290 
      +291 
      +292     /**
      +293      * Logs a message with <code>java.util.logging.Level.WARNING</code>.
      +294      *
      +295      * @param message to log
      +296      * @param exception log this cause
      +297      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
      +298      */
      +299     public void warn(Object message, Throwable exception) {
      +300         log(Level.WARNING, String.valueOf(message), exception);
      +301     }
      +302 
      +303 
      +304 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Log4JLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Log4JLogger.html new file mode 100644 index 0000000..508b355 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/Log4JLogger.html @@ -0,0 +1,356 @@ + + + + +Log4JLogger xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  import java.io.Serializable;
      +22  import org.apache.commons.logging.Log;
      +23  import org.apache.log4j.Logger;
      +24  import org.apache.log4j.Priority;
      +25  import org.apache.log4j.Level;
      +26  
      +27  /**
      +28   * Implementation of {@link Log} that maps directly to a
      +29   * <strong>Logger</strong> for log4J version 1.2.
      +30   * <p>
      +31   * Initial configuration of the corresponding Logger instances should be done
      +32   * in the usual manner, as outlined in the Log4J documentation.
      +33   * <p>
      +34   * The reason this logger is distinct from the 1.3 logger is that in version 1.2
      +35   * of Log4J:
      +36   * <ul>
      +37   * <li>class Logger takes Priority parameters not Level parameters.
      +38   * <li>class Level extends Priority
      +39   * </ul>
      +40   * Log4J1.3 is expected to change Level so it no longer extends Priority, which is
      +41   * a non-binary-compatible change. The class generated by compiling this code against
      +42   * log4j 1.2 will therefore not run against log4j 1.3.
      +43   *
      +44   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +45   * @author Rod Waldhoff
      +46   * @author Robert Burrell Donkin
      +47   * @version $Id: Log4JLogger.java 479747 2006-11-27 20:15:01Z dennisl $
      +48   */
      +49  
      +50  public class Log4JLogger implements Log, Serializable {
      +51  
      +52      // ------------------------------------------------------------- Attributes
      +53  
      +54      /** The fully qualified name of the Log4JLogger class. */
      +55      private static final String FQCN = Log4JLogger.class.getName();
      +56      
      +57      /** Log to this logger */
      +58      private transient Logger logger = null;
      +59  
      +60      /** Logger name */
      +61      private String name = null;
      +62  
      +63      private static Priority traceLevel;
      +64      
      +65      // ------------------------------------------------------------
      +66      // Static Initializer.
      +67      //
      +68      // Note that this must come after the static variable declarations
      +69      // otherwise initialiser expressions associated with those variables
      +70      // will override any settings done here.
      +71      //
      +72      // Verify that log4j is available, and that it is version 1.2.
      +73      // If an ExceptionInInitializerError is generated, then LogFactoryImpl
      +74      // will treat that as meaning that the appropriate underlying logging
      +75      // library is just not present - if discovery is in progress then
      +76      // discovery will continue.
      +77      // ------------------------------------------------------------
      +78  
      +79      static {
      +80          if (!Priority.class.isAssignableFrom(Level.class)) {
      +81              // nope, this is log4j 1.3, so force an ExceptionInInitializerError
      +82              throw new InstantiationError("Log4J 1.2 not available");
      +83          }
      +84          
      +85          // Releases of log4j1.2 >= 1.2.12 have Priority.TRACE available, earlier
      +86          // versions do not. If TRACE is not available, then we have to map
      +87          // calls to Log.trace(...) onto the DEBUG level.
      +88          
      +89          try {
      +90              traceLevel = (Priority) Level.class.getDeclaredField("TRACE").get(null);
      +91          } catch(Exception ex) {
      +92              // ok, trace not available
      +93              traceLevel = Priority.DEBUG;
      +94          }
      +95      }
      +96  
      +97      
      +98      // ------------------------------------------------------------ Constructor
      +99  
      +100     public Log4JLogger() {
      +101     }
      +102 
      +103 
      +104     /**
      +105      * Base constructor.
      +106      */
      +107     public Log4JLogger(String name) {
      +108         this.name = name;
      +109         this.logger = getLogger();
      +110     }
      +111 
      +112     /** 
      +113      * For use with a log4j factory.
      +114      */
      +115     public Log4JLogger(Logger logger ) {
      +116         if (logger == null) {
      +117             throw new IllegalArgumentException(
      +118                 "Warning - null logger in constructor; possible log4j misconfiguration.");
      +119         }
      +120         this.name = logger.getName();
      +121         this.logger=logger;
      +122     }
      +123 
      +124 
      +125     // --------------------------------------------------------- 
      +126     // Implementation
      +127     //
      +128     // Note that in the methods below the Priority class is used to define
      +129     // levels even though the Level class is supported in 1.2. This is done
      +130     // so that at compile time the call definitely resolves to a call to
      +131     // a method that takes a Priority rather than one that takes a Level.
      +132     // 
      +133     // The Category class (and hence its subclass Logger) in version 1.2 only
      +134     // has methods that take Priority objects. The Category class (and hence
      +135     // Logger class) in version 1.3 has methods that take both Priority and
      +136     // Level objects. This means that if we use Level here, and compile
      +137     // against log4j 1.3 then calls would be bound to the versions of
      +138     // methods taking Level objects and then would fail to run against
      +139     // version 1.2 of log4j.
      +140     // --------------------------------------------------------- 
      +141 
      +142 
      +143     /**
      +144      * Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
      +145      * When using a log4j version that does not support the <code>TRACE</code>
      +146      * level, the message will be logged at the <code>DEBUG</code> level.
      +147      *
      +148      * @param message to log
      +149      * @see org.apache.commons.logging.Log#trace(Object)
      +150      */
      +151     public void trace(Object message) {
      +152         getLogger().log(FQCN, traceLevel, message, null );
      +153     }
      +154 
      +155 
      +156     /**
      +157      * Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
      +158      * When using a log4j version that does not support the <code>TRACE</code>
      +159      * level, the message will be logged at the <code>DEBUG</code> level.
      +160      *
      +161      * @param message to log
      +162      * @param t log this cause
      +163      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
      +164      */
      +165     public void trace(Object message, Throwable t) {
      +166         getLogger().log(FQCN, traceLevel, message, t );
      +167     }
      +168 
      +169 
      +170     /**
      +171      * Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
      +172      *
      +173      * @param message to log
      +174      * @see org.apache.commons.logging.Log#debug(Object)
      +175      */
      +176     public void debug(Object message) {
      +177         getLogger().log(FQCN, Priority.DEBUG, message, null );
      +178     }
      +179 
      +180     /**
      +181      * Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
      +182      *
      +183      * @param message to log
      +184      * @param t log this cause
      +185      * @see org.apache.commons.logging.Log#debug(Object, Throwable)
      +186      */
      +187     public void debug(Object message, Throwable t) {
      +188         getLogger().log(FQCN, Priority.DEBUG, message, t );
      +189     }
      +190 
      +191 
      +192     /**
      +193      * Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
      +194      *
      +195      * @param message to log
      +196      * @see org.apache.commons.logging.Log#info(Object)
      +197      */
      +198     public void info(Object message) {
      +199         getLogger().log(FQCN, Priority.INFO, message, null );
      +200     }
      +201 
      +202 
      +203     /**
      +204      * Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
      +205      *
      +206      * @param message to log
      +207      * @param t log this cause
      +208      * @see org.apache.commons.logging.Log#info(Object, Throwable)
      +209      */
      +210     public void info(Object message, Throwable t) {
      +211         getLogger().log(FQCN, Priority.INFO, message, t );
      +212     }
      +213 
      +214 
      +215     /**
      +216      * Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
      +217      *
      +218      * @param message to log
      +219      * @see org.apache.commons.logging.Log#warn(Object)
      +220      */
      +221     public void warn(Object message) {
      +222         getLogger().log(FQCN, Priority.WARN, message, null );
      +223     }
      +224 
      +225 
      +226     /**
      +227      * Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
      +228      *
      +229      * @param message to log
      +230      * @param t log this cause
      +231      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
      +232      */
      +233     public void warn(Object message, Throwable t) {
      +234         getLogger().log(FQCN, Priority.WARN, message, t );
      +235     }
      +236 
      +237 
      +238     /**
      +239      * Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
      +240      *
      +241      * @param message to log
      +242      * @see org.apache.commons.logging.Log#error(Object)
      +243      */
      +244     public void error(Object message) {
      +245         getLogger().log(FQCN, Priority.ERROR, message, null );
      +246     }
      +247 
      +248 
      +249     /**
      +250      * Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
      +251      *
      +252      * @param message to log
      +253      * @param t log this cause
      +254      * @see org.apache.commons.logging.Log#error(Object, Throwable)
      +255      */
      +256     public void error(Object message, Throwable t) {
      +257         getLogger().log(FQCN, Priority.ERROR, message, t );
      +258     }
      +259 
      +260 
      +261     /**
      +262      * Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
      +263      *
      +264      * @param message to log
      +265      * @see org.apache.commons.logging.Log#fatal(Object)
      +266      */
      +267     public void fatal(Object message) {
      +268         getLogger().log(FQCN, Priority.FATAL, message, null );
      +269     }
      +270 
      +271 
      +272     /**
      +273      * Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
      +274      *
      +275      * @param message to log
      +276      * @param t log this cause
      +277      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
      +278      */
      +279     public void fatal(Object message, Throwable t) {
      +280         getLogger().log(FQCN, Priority.FATAL, message, t );
      +281     }
      +282 
      +283 
      +284     /**
      +285      * Return the native Logger instance we are using.
      +286      */
      +287     public Logger getLogger() {
      +288         if (logger == null) {
      +289             logger = Logger.getLogger(name);
      +290         }
      +291         return (this.logger);
      +292     }
      +293 
      +294 
      +295     /**
      +296      * Check whether the Log4j Logger used is enabled for <code>DEBUG</code> priority.
      +297      */
      +298     public boolean isDebugEnabled() {
      +299         return getLogger().isDebugEnabled();
      +300     }
      +301 
      +302 
      +303      /**
      +304      * Check whether the Log4j Logger used is enabled for <code>ERROR</code> priority.
      +305      */
      +306     public boolean isErrorEnabled() {
      +307         return getLogger().isEnabledFor(Priority.ERROR);
      +308     }
      +309 
      +310 
      +311     /**
      +312      * Check whether the Log4j Logger used is enabled for <code>FATAL</code> priority.
      +313      */
      +314     public boolean isFatalEnabled() {
      +315         return getLogger().isEnabledFor(Priority.FATAL);
      +316     }
      +317 
      +318 
      +319     /**
      +320      * Check whether the Log4j Logger used is enabled for <code>INFO</code> priority.
      +321      */
      +322     public boolean isInfoEnabled() {
      +323         return getLogger().isInfoEnabled();
      +324     }
      +325 
      +326 
      +327     /**
      +328      * Check whether the Log4j Logger used is enabled for <code>TRACE</code> priority.
      +329      * When using a log4j version that does not support the TRACE level, this call
      +330      * will report whether <code>DEBUG</code> is enabled or not.
      +331      */
      +332     public boolean isTraceEnabled() {
      +333         return getLogger().isEnabledFor(traceLevel);
      +334     }
      +335 
      +336     /**
      +337      * Check whether the Log4j Logger used is enabled for <code>WARN</code> priority.
      +338      */
      +339     public boolean isWarnEnabled() {
      +340         return getLogger().isEnabledFor(Priority.WARN);
      +341     }
      +342 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogFactoryImpl.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogFactoryImpl.html new file mode 100644 index 0000000..6415caa --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogFactoryImpl.html @@ -0,0 +1,1514 @@ + + + + +LogFactoryImpl xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  package org.apache.commons.logging.impl;
      +19  
      +20  
      +21  import java.lang.reflect.Constructor;
      +22  import java.lang.reflect.InvocationTargetException;
      +23  import java.lang.reflect.Method;
      +24  import java.net.URL;
      +25  import java.security.AccessController;
      +26  import java.security.PrivilegedAction;
      +27  import java.util.Enumeration;
      +28  import java.util.Hashtable;
      +29  import java.util.Vector;
      +30  
      +31  import org.apache.commons.logging.Log;
      +32  import org.apache.commons.logging.LogConfigurationException;
      +33  import org.apache.commons.logging.LogFactory;
      +34  
      +35  
      +36  /**
      +37   * <p>Concrete subclass of {@link LogFactory} that implements the
      +38   * following algorithm to dynamically select a logging implementation
      +39   * class to instantiate a wrapper for.</p>
      +40   * <ul>
      +41   * <li>Use a factory configuration attribute named
      +42   *     <code>org.apache.commons.logging.Log</code> to identify the
      +43   *     requested implementation class.</li>
      +44   * <li>Use the <code>org.apache.commons.logging.Log</code> system property
      +45   *     to identify the requested implementation class.</li>
      +46   * <li>If <em>Log4J</em> is available, return an instance of
      +47   *     <code>org.apache.commons.logging.impl.Log4JLogger</code>.</li>
      +48   * <li>If <em>JDK 1.4 or later</em> is available, return an instance of
      +49   *     <code>org.apache.commons.logging.impl.Jdk14Logger</code>.</li>
      +50   * <li>Otherwise, return an instance of
      +51   *     <code>org.apache.commons.logging.impl.SimpleLog</code>.</li>
      +52   * </ul>
      +53   *
      +54   * <p>If the selected {@link Log} implementation class has a
      +55   * <code>setLogFactory()</code> method that accepts a {@link LogFactory}
      +56   * parameter, this method will be called on each newly created instance
      +57   * to identify the associated factory.  This makes factory configuration
      +58   * attributes available to the Log instance, if it so desires.</p>
      +59   *
      +60   * <p>This factory will remember previously created <code>Log</code> instances
      +61   * for the same name, and will return them on repeated requests to the
      +62   * <code>getInstance()</code> method.</p>
      +63   *
      +64   * @author Rod Waldhoff
      +65   * @author Craig R. McClanahan
      +66   * @author Richard A. Sitze
      +67   * @author Brian Stansberry
      +68   * @version $Revision: 581090 $ $Date: 2007-10-02 00:01:06 +0200 (ti, 02 okt 2007) $
      +69   */
      +70  
      +71  public class LogFactoryImpl extends LogFactory {
      +72  
      +73  
      +74      /** Log4JLogger class name */
      +75      private static final String LOGGING_IMPL_LOG4J_LOGGER = "org.apache.commons.logging.impl.Log4JLogger";
      +76      /** Jdk14Logger class name */
      +77      private static final String LOGGING_IMPL_JDK14_LOGGER = "org.apache.commons.logging.impl.Jdk14Logger";
      +78      /** Jdk13LumberjackLogger class name */
      +79      private static final String LOGGING_IMPL_LUMBERJACK_LOGGER = "org.apache.commons.logging.impl.Jdk13LumberjackLogger";
      +80      /** SimpleLog class name */
      +81      private static final String LOGGING_IMPL_SIMPLE_LOGGER = "org.apache.commons.logging.impl.SimpleLog";
      +82  
      +83      private static final String PKG_IMPL="org.apache.commons.logging.impl.";
      +84      private static final int PKG_LEN = PKG_IMPL.length();
      +85      
      +86      // ----------------------------------------------------------- Constructors
      +87  
      +88     
      +89  
      +90      /**
      +91       * Public no-arguments constructor required by the lookup mechanism.
      +92       */
      +93      public LogFactoryImpl() {
      +94          super();
      +95          initDiagnostics();  // method on this object
      +96          if (isDiagnosticsEnabled()) {
      +97              logDiagnostic("Instance created.");
      +98          }
      +99      }
      +100 
      +101 
      +102     // ----------------------------------------------------- Manifest Constants
      +103 
      +104 
      +105     /**
      +106      * The name (<code>org.apache.commons.logging.Log</code>) of the system 
      +107      * property identifying our {@link Log} implementation class.
      +108      */
      +109     public static final String LOG_PROPERTY =
      +110         "org.apache.commons.logging.Log";
      +111 
      +112 
      +113     /**
      +114      * The deprecated system property used for backwards compatibility with
      +115      * old versions of JCL.
      +116      */
      +117     protected static final String LOG_PROPERTY_OLD =
      +118         "org.apache.commons.logging.log";
      +119 
      +120     /**
      +121      * The name (<code>org.apache.commons.logging.Log.allowFlawedContext</code>) 
      +122      * of the system property which can be set true/false to
      +123      * determine system behaviour when a bad context-classloader is encountered.
      +124      * When set to false, a LogConfigurationException is thrown if
      +125      * LogFactoryImpl is loaded via a child classloader of the TCCL (this
      +126      * should never happen in sane systems).
      +127      * 
      +128      * Default behaviour: true (tolerates bad context classloaders)
      +129      * 
      +130      * See also method setAttribute.
      +131      */
      +132     public static final String ALLOW_FLAWED_CONTEXT_PROPERTY = 
      +133         "org.apache.commons.logging.Log.allowFlawedContext";
      +134 
      +135     /**
      +136      * The name (<code>org.apache.commons.logging.Log.allowFlawedDiscovery</code>) 
      +137      * of the system property which can be set true/false to
      +138      * determine system behaviour when a bad logging adapter class is
      +139      * encountered during logging discovery. When set to false, an
      +140      * exception will be thrown and the app will fail to start. When set
      +141      * to true, discovery will continue (though the user might end up
      +142      * with a different logging implementation than they expected).
      +143      * 
      +144      * Default behaviour: true (tolerates bad logging adapters)
      +145      * 
      +146      * See also method setAttribute.
      +147      */
      +148     public static final String ALLOW_FLAWED_DISCOVERY_PROPERTY = 
      +149         "org.apache.commons.logging.Log.allowFlawedDiscovery";
      +150 
      +151     /**
      +152      * The name (<code>org.apache.commons.logging.Log.allowFlawedHierarchy</code>) 
      +153      * of the system property which can be set true/false to
      +154      * determine system behaviour when a logging adapter class is
      +155      * encountered which has bound to the wrong Log class implementation.
      +156      * When set to false, an exception will be thrown and the app will fail
      +157      * to start. When set to true, discovery will continue (though the user
      +158      * might end up with a different logging implementation than they expected).
      +159      * 
      +160      * Default behaviour: true (tolerates bad Log class hierarchy)
      +161      * 
      +162      * See also method setAttribute.
      +163      */
      +164     public static final String ALLOW_FLAWED_HIERARCHY_PROPERTY = 
      +165         "org.apache.commons.logging.Log.allowFlawedHierarchy";
      +166 
      +167 
      +168     /**
      +169      * The names of classes that will be tried (in order) as logging
      +170      * adapters. Each class is expected to implement the Log interface,
      +171      * and to throw NoClassDefFound or ExceptionInInitializerError when
      +172      * loaded if the underlying logging library is not available. Any 
      +173      * other error indicates that the underlying logging library is available
      +174      * but broken/unusable for some reason.
      +175      */
      +176     private static final String[] classesToDiscover = {
      +177             LOGGING_IMPL_LOG4J_LOGGER,
      +178             "org.apache.commons.logging.impl.Jdk14Logger",
      +179             "org.apache.commons.logging.impl.Jdk13LumberjackLogger",
      +180             "org.apache.commons.logging.impl.SimpleLog"
      +181     };
      +182     
      +183 
      +184     // ----------------------------------------------------- Instance Variables
      +185 
      +186     /**
      +187      * Determines whether logging classes should be loaded using the thread-context
      +188      * classloader, or via the classloader that loaded this LogFactoryImpl class.
      +189      */
      +190     private boolean useTCCL = true;
      +191 
      +192     /**
      +193      * The string prefixed to every message output by the logDiagnostic method.
      +194      */
      +195     private String diagnosticPrefix;
      +196 
      +197 
      +198     /**
      +199      * Configuration attributes.
      +200      */
      +201     protected Hashtable attributes = new Hashtable();
      +202 
      +203 
      +204     /**
      +205      * The {@link org.apache.commons.logging.Log} instances that have
      +206      * already been created, keyed by logger name.
      +207      */
      +208     protected Hashtable instances = new Hashtable();
      +209 
      +210 
      +211     /**
      +212      * Name of the class implementing the Log interface.
      +213      */
      +214     private String logClassName;
      +215 
      +216 
      +217     /**
      +218      * The one-argument constructor of the
      +219      * {@link org.apache.commons.logging.Log}
      +220      * implementation class that will be used to create new instances.
      +221      * This value is initialized by <code>getLogConstructor()</code>,
      +222      * and then returned repeatedly.
      +223      */
      +224     protected Constructor logConstructor = null;
      +225 
      +226 
      +227     /**
      +228      * The signature of the Constructor to be used.
      +229      */
      +230     protected Class logConstructorSignature[] =
      +231     { java.lang.String.class };
      +232 
      +233 
      +234     /**
      +235      * The one-argument <code>setLogFactory</code> method of the selected
      +236      * {@link org.apache.commons.logging.Log} method, if it exists.
      +237      */
      +238     protected Method logMethod = null;
      +239 
      +240 
      +241     /**
      +242      * The signature of the <code>setLogFactory</code> method to be used.
      +243      */
      +244     protected Class logMethodSignature[] =
      +245     { LogFactory.class };
      +246 
      +247     /**
      +248      * See getBaseClassLoader and initConfiguration.
      +249      */
      +250     private boolean allowFlawedContext;
      +251     
      +252     /**
      +253      * See handleFlawedDiscovery and initConfiguration.
      +254      */
      +255     private boolean allowFlawedDiscovery;
      +256     
      +257     /**
      +258      * See handleFlawedHierarchy and initConfiguration.
      +259      */
      +260     private boolean allowFlawedHierarchy;
      +261     
      +262     // --------------------------------------------------------- Public Methods
      +263 
      +264 
      +265     /**
      +266      * Return the configuration attribute with the specified name (if any),
      +267      * or <code>null</code> if there is no such attribute.
      +268      *
      +269      * @param name Name of the attribute to return
      +270      */
      +271     public Object getAttribute(String name) {
      +272 
      +273         return (attributes.get(name));
      +274 
      +275     }
      +276 
      +277 
      +278     /**
      +279      * Return an array containing the names of all currently defined
      +280      * configuration attributes.  If there are no such attributes, a zero
      +281      * length array is returned.
      +282      */
      +283     public String[] getAttributeNames() {
      +284 
      +285         Vector names = new Vector();
      +286         Enumeration keys = attributes.keys();
      +287         while (keys.hasMoreElements()) {
      +288             names.addElement((String) keys.nextElement());
      +289         }
      +290         String results[] = new String[names.size()];
      +291         for (int i = 0; i < results.length; i++) {
      +292             results[i] = (String) names.elementAt(i);
      +293         }
      +294         return (results);
      +295 
      +296     }
      +297 
      +298 
      +299     /**
      +300      * Convenience method to derive a name from the specified class and
      +301      * call <code>getInstance(String)</code> with it.
      +302      *
      +303      * @param clazz Class for which a suitable Log name will be derived
      +304      *
      +305      * @exception LogConfigurationException if a suitable <code>Log</code>
      +306      *  instance cannot be returned
      +307      */
      +308     public Log getInstance(Class clazz) throws LogConfigurationException {
      +309 
      +310         return (getInstance(clazz.getName()));
      +311 
      +312     }
      +313 
      +314 
      +315     /**
      +316      * <p>Construct (if necessary) and return a <code>Log</code> instance,
      +317      * using the factory's current set of configuration attributes.</p>
      +318      *
      +319      * <p><strong>NOTE</strong> - Depending upon the implementation of
      +320      * the <code>LogFactory</code> you are using, the <code>Log</code>
      +321      * instance you are returned may or may not be local to the current
      +322      * application, and may or may not be returned again on a subsequent
      +323      * call with the same name argument.</p>
      +324      *
      +325      * @param name Logical name of the <code>Log</code> instance to be
      +326      *  returned (the meaning of this name is only known to the underlying
      +327      *  logging implementation that is being wrapped)
      +328      *
      +329      * @exception LogConfigurationException if a suitable <code>Log</code>
      +330      *  instance cannot be returned
      +331      */
      +332     public Log getInstance(String name) throws LogConfigurationException {
      +333 
      +334         Log instance = (Log) instances.get(name);
      +335         if (instance == null) {
      +336             instance = newInstance(name);
      +337             instances.put(name, instance);
      +338         }
      +339         return (instance);
      +340 
      +341     }
      +342 
      +343 
      +344     /**
      +345      * Release any internal references to previously created
      +346      * {@link org.apache.commons.logging.Log}
      +347      * instances returned by this factory.  This is useful in environments
      +348      * like servlet containers, which implement application reloading by
      +349      * throwing away a ClassLoader.  Dangling references to objects in that
      +350      * class loader would prevent garbage collection.
      +351      */
      +352     public void release() {
      +353 
      +354         logDiagnostic("Releasing all known loggers");
      +355         instances.clear();
      +356     }
      +357 
      +358 
      +359     /**
      +360      * Remove any configuration attribute associated with the specified name.
      +361      * If there is no such attribute, no action is taken.
      +362      *
      +363      * @param name Name of the attribute to remove
      +364      */
      +365     public void removeAttribute(String name) {
      +366 
      +367         attributes.remove(name);
      +368 
      +369     }
      +370 
      +371 
      +372     /**
      +373      * Set the configuration attribute with the specified name.  Calling
      +374      * this with a <code>null</code> value is equivalent to calling
      +375      * <code>removeAttribute(name)</code>.
      +376      * <p>
      +377      * This method can be used to set logging configuration programmatically
      +378      * rather than via system properties. It can also be used in code running
      +379      * within a container (such as a webapp) to configure behaviour on a
      +380      * per-component level instead of globally as system properties would do.
      +381      * To use this method instead of a system property, call
      +382      * <pre>
      +383      * LogFactory.getFactory().setAttribute(...)
      +384      * </pre>
      +385      * This must be done before the first Log object is created; configuration
      +386      * changes after that point will be ignored.
      +387      * <p>
      +388      * This method is also called automatically if LogFactory detects a
      +389      * commons-logging.properties file; every entry in that file is set
      +390      * automatically as an attribute here.
      +391      *
      +392      * @param name Name of the attribute to set
      +393      * @param value Value of the attribute to set, or <code>null</code>
      +394      *  to remove any setting for this attribute
      +395      */
      +396     public void setAttribute(String name, Object value) {
      +397 
      +398         if (logConstructor != null) {
      +399             logDiagnostic("setAttribute: call too late; configuration already performed.");
      +400         }
      +401 
      +402         if (value == null) {
      +403             attributes.remove(name);
      +404         } else {
      +405             attributes.put(name, value);
      +406         }
      +407         
      +408         if (name.equals(TCCL_KEY)) {
      +409             useTCCL = Boolean.valueOf(value.toString()).booleanValue();
      +410         }
      +411 
      +412     }
      +413 
      +414 
      +415     // ------------------------------------------------------ 
      +416     // Static Methods
      +417     //
      +418     // These methods only defined as workarounds for a java 1.2 bug;
      +419     // theoretically none of these are needed.
      +420     // ------------------------------------------------------ 
      +421     
      +422     /**
      +423      * Gets the context classloader.
      +424      * This method is a workaround for a java 1.2 compiler bug.
      +425      * @since 1.1
      +426      */
      +427     protected static ClassLoader getContextClassLoader() throws LogConfigurationException {
      +428         return LogFactory.getContextClassLoader();
      +429     }
      +430 
      +431     
      +432     /**
      +433      * Workaround for bug in Java1.2; in theory this method is not needed.
      +434      * See LogFactory.isDiagnosticsEnabled.
      +435      */
      +436     protected static boolean isDiagnosticsEnabled() {
      +437         return LogFactory.isDiagnosticsEnabled();
      +438     }
      +439 
      +440     
      +441     /**
      +442      * Workaround for bug in Java1.2; in theory this method is not needed.
      +443      * See LogFactory.getClassLoader.
      +444      * @since 1.1
      +445      */
      +446     protected static ClassLoader getClassLoader(Class clazz) {
      +447         return LogFactory.getClassLoader(clazz);
      +448     }
      +449 
      +450 
      +451     // ------------------------------------------------------ Protected Methods
      +452 
      +453     /**
      +454      * Calculate and cache a string that uniquely identifies this instance,
      +455      * including which classloader the object was loaded from.
      +456      * <p>
      +457      * This string will later be prefixed to each "internal logging" message
      +458      * emitted, so that users can clearly see any unexpected behaviour.
      +459      * <p>
      +460      * Note that this method does not detect whether internal logging is 
      +461      * enabled or not, nor where to output stuff if it is; that is all
      +462      * handled by the parent LogFactory class. This method just computes
      +463      * its own unique prefix for log messages.
      +464      */
      +465     private void initDiagnostics() {
      +466         // It would be nice to include an identifier of the context classloader
      +467         // that this LogFactoryImpl object is responsible for. However that
      +468         // isn't possible as that information isn't available. It is possible
      +469         // to figure this out by looking at the logging from LogFactory to
      +470         // see the context & impl ids from when this object was instantiated,
      +471         // in order to link the impl id output as this object's prefix back to
      +472         // the context it is intended to manage.
      +473         // Note that this prefix should be kept consistent with that 
      +474         // in LogFactory.
      +475         Class clazz = this.getClass();
      +476         ClassLoader classLoader = getClassLoader(clazz);
      +477         String classLoaderName;
      +478         try {
      +479             if (classLoader == null) {
      +480                 classLoaderName = "BOOTLOADER";
      +481             } else {
      +482                 classLoaderName = objectId(classLoader);
      +483             }
      +484         } catch(SecurityException e) {
      +485             classLoaderName = "UNKNOWN";
      +486         }
      +487         diagnosticPrefix = "[LogFactoryImpl@" + System.identityHashCode(this) + " from " + classLoaderName + "] ";
      +488     }
      +489 
      +490     
      +491     /**
      +492      * Output a diagnostic message to a user-specified destination (if the
      +493      * user has enabled diagnostic logging).
      +494      * 
      +495      * @param msg diagnostic message
      +496      * @since 1.1
      +497      */
      +498     protected void logDiagnostic(String msg) {
      +499         if (isDiagnosticsEnabled()) {
      +500             logRawDiagnostic(diagnosticPrefix + msg);
      +501         }
      +502     }
      +503 
      +504     /**
      +505      * Return the fully qualified Java classname of the {@link Log}
      +506      * implementation we will be using.  
      +507      * 
      +508      * @deprecated  Never invoked by this class; subclasses should not assume
      +509      *              it will be.
      +510      */
      +511     protected String getLogClassName() {
      +512 
      +513         if (logClassName == null) {
      +514             discoverLogImplementation(getClass().getName());
      +515         }
      +516         
      +517         return logClassName;
      +518     }
      +519 
      +520 
      +521     /**
      +522      * <p>Return the <code>Constructor</code> that can be called to instantiate
      +523      * new {@link org.apache.commons.logging.Log} instances.</p>
      +524      *
      +525      * <p><strong>IMPLEMENTATION NOTE</strong> - Race conditions caused by
      +526      * calling this method from more than one thread are ignored, because
      +527      * the same <code>Constructor</code> instance will ultimately be derived
      +528      * in all circumstances.</p>
      +529      *
      +530      * @exception LogConfigurationException if a suitable constructor
      +531      *  cannot be returned   
      +532      * 
      +533      * @deprecated  Never invoked by this class; subclasses should not assume
      +534      *              it will be.
      +535      */
      +536     protected Constructor getLogConstructor()
      +537         throws LogConfigurationException {
      +538 
      +539         // Return the previously identified Constructor (if any)
      +540         if (logConstructor == null) {
      +541             discoverLogImplementation(getClass().getName());
      +542         }
      +543 
      +544         return logConstructor;
      +545     }
      +546     
      +547 
      +548     /**
      +549      * Is <em>JDK 1.3 with Lumberjack</em> logging available?   
      +550      * 
      +551      * @deprecated  Never invoked by this class; subclasses should not assume
      +552      *              it will be.
      +553      */
      +554     protected boolean isJdk13LumberjackAvailable() {
      +555         return isLogLibraryAvailable(
      +556                 "Jdk13Lumberjack",
      +557                 "org.apache.commons.logging.impl.Jdk13LumberjackLogger");
      +558     }
      +559 
      +560 
      +561     /**
      +562      * <p>Return <code>true</code> if <em>JDK 1.4 or later</em> logging
      +563      * is available.  Also checks that the <code>Throwable</code> class
      +564      * supports <code>getStackTrace()</code>, which is required by
      +565      * Jdk14Logger.</p>  
      +566      * 
      +567      * @deprecated  Never invoked by this class; subclasses should not assume
      +568      *              it will be.
      +569      */
      +570     protected boolean isJdk14Available() {
      +571         return isLogLibraryAvailable(
      +572                 "Jdk14",
      +573                 "org.apache.commons.logging.impl.Jdk14Logger");
      +574     }
      +575 
      +576 
      +577     /**
      +578      * Is a <em>Log4J</em> implementation available? 
      +579      * 
      +580      * @deprecated  Never invoked by this class; subclasses should not assume
      +581      *              it will be.
      +582      */
      +583     protected boolean isLog4JAvailable() {
      +584         return isLogLibraryAvailable(
      +585                 "Log4J",
      +586                 LOGGING_IMPL_LOG4J_LOGGER);
      +587     }
      +588 
      +589 
      +590     /**
      +591      * Create and return a new {@link org.apache.commons.logging.Log}
      +592      * instance for the specified name.
      +593      *
      +594      * @param name Name of the new logger
      +595      *
      +596      * @exception LogConfigurationException if a new instance cannot
      +597      *  be created
      +598      */
      +599     protected Log newInstance(String name) throws LogConfigurationException {
      +600 
      +601         Log instance = null;
      +602         try {
      +603             if (logConstructor == null) {
      +604                 instance = discoverLogImplementation(name);
      +605             }
      +606             else {
      +607                 Object params[] = { name };
      +608                 instance = (Log) logConstructor.newInstance(params);
      +609             }
      +610             
      +611             if (logMethod != null) {
      +612                 Object params[] = { this };
      +613                 logMethod.invoke(instance, params);
      +614             }
      +615             
      +616             return (instance);
      +617             
      +618         } catch (LogConfigurationException lce) {
      +619             
      +620             // this type of exception means there was a problem in discovery
      +621             // and we've already output diagnostics about the issue, etc.; 
      +622             // just pass it on
      +623             throw (LogConfigurationException) lce;
      +624             
      +625         } catch (InvocationTargetException e) {
      +626             // A problem occurred invoking the Constructor or Method 
      +627             // previously discovered
      +628             Throwable c = e.getTargetException();
      +629             if (c != null) {
      +630                 throw new LogConfigurationException(c);
      +631             } else {
      +632                 throw new LogConfigurationException(e);
      +633             }
      +634         } catch (Throwable t) {
      +635             // A problem occurred invoking the Constructor or Method 
      +636             // previously discovered
      +637             throw new LogConfigurationException(t);
      +638         }
      +639     }
      +640     
      +641 
      +642     //  ------------------------------------------------------ Private Methods
      +643     
      +644     /**
      +645      * Calls LogFactory.directGetContextClassLoader under the control of an
      +646      * AccessController class. This means that java code running under a
      +647      * security manager that forbids access to ClassLoaders will still work
      +648      * if this class is given appropriate privileges, even when the caller
      +649      * doesn't have such privileges. Without using an AccessController, the
      +650      * the entire call stack must have the privilege before the call is
      +651      * allowed.
      +652      *  
      +653      * @return the context classloader associated with the current thread,
      +654      * or null if security doesn't allow it.
      +655      * 
      +656      * @throws LogConfigurationException if there was some weird error while
      +657      * attempting to get the context classloader.
      +658      * 
      +659      * @throws SecurityException if the current java security policy doesn't
      +660      * allow this class to access the context classloader.
      +661      */
      +662     private static ClassLoader getContextClassLoaderInternal()
      +663     throws LogConfigurationException {
      +664         return (ClassLoader)AccessController.doPrivileged(
      +665             new PrivilegedAction() {
      +666                 public Object run() {
      +667                     return LogFactory.directGetContextClassLoader();
      +668                 }
      +669             });
      +670     }
      +671 
      +672     /**
      +673      * Read the specified system property, using an AccessController so that 
      +674      * the property can be read if JCL has been granted the appropriate
      +675      * security rights even if the calling code has not.
      +676      * <p>
      +677      * Take care not to expose the value returned by this method to the
      +678      * calling application in any way; otherwise the calling app can use that
      +679      * info to access data that should not be available to it.
      +680      */
      +681     private static String getSystemProperty(final String key, final String def)
      +682     throws SecurityException {
      +683         return (String) AccessController.doPrivileged(
      +684                 new PrivilegedAction() {
      +685                     public Object run() {
      +686                         return System.getProperty(key, def);
      +687                     }
      +688                 });
      +689     }
      +690 
      +691     /**
      +692      * Fetch the parent classloader of a specified classloader.
      +693      * <p>
      +694      * If a SecurityException occurs, null is returned.
      +695      * <p>
      +696      * Note that this method is non-static merely so logDiagnostic is available.
      +697      */
      +698     private ClassLoader getParentClassLoader(final ClassLoader cl) {
      +699         try {
      +700             return (ClassLoader)AccessController.doPrivileged(
      +701                     new PrivilegedAction() {
      +702                         public Object run() {
      +703                             return cl.getParent();
      +704                         }
      +705                     });
      +706         } catch(SecurityException ex) {
      +707             logDiagnostic("[SECURITY] Unable to obtain parent classloader");
      +708             return null;
      +709         }
      +710         
      +711     }
      +712 
      +713     /**
      +714      * Utility method to check whether a particular logging library is
      +715      * present and available for use. Note that this does <i>not</i>
      +716      * affect the future behaviour of this class.
      +717      */
      +718     private boolean isLogLibraryAvailable(String name, String classname) {
      +719         if (isDiagnosticsEnabled()) {
      +720             logDiagnostic("Checking for '" + name + "'.");
      +721         }
      +722         try {
      +723             Log log = createLogFromClass(
      +724                         classname, 
      +725                         this.getClass().getName(), // dummy category
      +726                         false);
      +727 
      +728             if (log == null) {
      +729                 if (isDiagnosticsEnabled()) {
      +730                     logDiagnostic("Did not find '" + name + "'.");
      +731                 }
      +732                 return false;
      +733             } else {
      +734                 if (isDiagnosticsEnabled()) {
      +735                     logDiagnostic("Found '" + name + "'.");
      +736                 }
      +737                 return true;
      +738             }
      +739         } catch(LogConfigurationException e) {
      +740             if (isDiagnosticsEnabled()) {
      +741                 logDiagnostic("Logging system '" + name + "' is available but not useable.");
      +742             }
      +743             return false;
      +744         }
      +745     }
      +746 
      +747     /**
      +748      * Attempt to find an attribute (see method setAttribute) or a 
      +749      * system property with the provided name and return its value.
      +750      * <p>
      +751      * The attributes associated with this object are checked before
      +752      * system properties in case someone has explicitly called setAttribute,
      +753      * or a configuration property has been set in a commons-logging.properties
      +754      * file.
      +755      * 
      +756      * @return the value associated with the property, or null.
      +757      */
      +758     private String getConfigurationValue(String property) {
      +759         if (isDiagnosticsEnabled()) {
      +760             logDiagnostic("[ENV] Trying to get configuration for item " + property);
      +761         }
      +762 
      +763         Object valueObj =  getAttribute(property);
      +764         if (valueObj != null) {
      +765             if (isDiagnosticsEnabled()) {
      +766                 logDiagnostic("[ENV] Found LogFactory attribute [" + valueObj + "] for " + property);
      +767             }
      +768             return valueObj.toString();
      +769         }
      +770         
      +771         if (isDiagnosticsEnabled()) {
      +772             logDiagnostic("[ENV] No LogFactory attribute found for " + property);
      +773         }
      +774 
      +775         try {
      +776             // warning: minor security hole here, in that we potentially read a system
      +777             // property that the caller cannot, then output it in readable form as a
      +778             // diagnostic message. However it's only ever JCL-specific properties
      +779             // involved here, so the harm is truly trivial. 
      +780             String value = getSystemProperty(property, null);
      +781             if (value != null) {
      +782                 if (isDiagnosticsEnabled()) {
      +783                     logDiagnostic("[ENV] Found system property [" + value + "] for " + property);
      +784                 }
      +785                 return value;
      +786             }
      +787 
      +788             if (isDiagnosticsEnabled()) {
      +789                 logDiagnostic("[ENV] No system property found for property " + property);
      +790             }
      +791         } catch (SecurityException e) {
      +792             if (isDiagnosticsEnabled()) {
      +793                 logDiagnostic("[ENV] Security prevented reading system property " + property);
      +794             }
      +795         }
      +796 
      +797         if (isDiagnosticsEnabled()) {
      +798             logDiagnostic("[ENV] No configuration defined for item " + property);
      +799         }
      +800 
      +801         return null;
      +802     }
      +803     
      +804     /**
      +805      * Get the setting for the user-configurable behaviour specified by key.
      +806      * If nothing has explicitly been set, then return dflt.  
      +807      */
      +808     private boolean getBooleanConfiguration(String key, boolean dflt) {
      +809         String val = getConfigurationValue(key);
      +810         if (val == null)
      +811             return dflt;
      +812         return Boolean.valueOf(val).booleanValue();
      +813     }
      +814 
      +815     /**
      +816      * Initialize a number of variables that control the behaviour of this
      +817      * class and that can be tweaked by the user. This is done when the first
      +818      * logger is created, not in the constructor of this class, because we
      +819      * need to give the user a chance to call method setAttribute in order to
      +820      * configure this object.
      +821      */
      +822     private void initConfiguration() {
      +823         allowFlawedContext = getBooleanConfiguration(ALLOW_FLAWED_CONTEXT_PROPERTY, true);
      +824         allowFlawedDiscovery = getBooleanConfiguration(ALLOW_FLAWED_DISCOVERY_PROPERTY, true);
      +825         allowFlawedHierarchy = getBooleanConfiguration(ALLOW_FLAWED_HIERARCHY_PROPERTY, true);
      +826     }
      +827   
      +828 
      +829     /**
      +830      * Attempts to create a Log instance for the given category name.
      +831      * Follows the discovery process described in the class javadoc.
      +832      * 
      +833      * @param logCategory the name of the log category
      +834      * 
      +835      * @throws LogConfigurationException if an error in discovery occurs, 
      +836      * or if no adapter at all can be instantiated
      +837      */
      +838     private Log discoverLogImplementation(String logCategory)
      +839     throws LogConfigurationException
      +840     {
      +841         if (isDiagnosticsEnabled()) {
      +842             logDiagnostic("Discovering a Log implementation...");
      +843         }
      +844         
      +845         initConfiguration();
      +846         
      +847         Log result = null;
      +848         
      +849         // See if the user specified the Log implementation to use
      +850         String specifiedLogClassName = findUserSpecifiedLogClassName();
      +851 
      +852         if (specifiedLogClassName != null) {
      +853             if (isDiagnosticsEnabled()) {
      +854                 logDiagnostic("Attempting to load user-specified log class '" + 
      +855                     specifiedLogClassName + "'...");
      +856             }
      +857             
      +858             result = createLogFromClass(specifiedLogClassName,
      +859                                         logCategory,
      +860                                         true);
      +861             if (result == null) {
      +862                 StringBuffer messageBuffer =  new StringBuffer("User-specified log class '");
      +863                 messageBuffer.append(specifiedLogClassName);
      +864                 messageBuffer.append("' cannot be found or is not useable.");
      +865                 
      +866                 // Mistyping or misspelling names is a common fault.
      +867                 // Construct a good error message, if we can
      +868                 if (specifiedLogClassName != null) {
      +869                     informUponSimilarName(messageBuffer, specifiedLogClassName, LOGGING_IMPL_LOG4J_LOGGER);
      +870                     informUponSimilarName(messageBuffer, specifiedLogClassName, LOGGING_IMPL_JDK14_LOGGER);
      +871                     informUponSimilarName(messageBuffer, specifiedLogClassName, LOGGING_IMPL_LUMBERJACK_LOGGER);
      +872                     informUponSimilarName(messageBuffer, specifiedLogClassName, LOGGING_IMPL_SIMPLE_LOGGER);
      +873                 }
      +874                 throw new LogConfigurationException(messageBuffer.toString());
      +875             }
      +876             
      +877             return result;
      +878         }
      +879         
      +880         // No user specified log; try to discover what's on the classpath
      +881         //
      +882         // Note that we deliberately loop here over classesToDiscover and
      +883         // expect method createLogFromClass to loop over the possible source
      +884         // classloaders. The effect is:
      +885         //   for each discoverable log adapter
      +886         //      for each possible classloader
      +887         //          see if it works
      +888         //
      +889         // It appears reasonable at first glance to do the opposite: 
      +890         //   for each possible classloader
      +891         //     for each discoverable log adapter
      +892         //        see if it works
      +893         //
      +894         // The latter certainly has advantages for user-installable logging
      +895         // libraries such as log4j; in a webapp for example this code should
      +896         // first check whether the user has provided any of the possible
      +897         // logging libraries before looking in the parent classloader. 
      +898         // Unfortunately, however, Jdk14Logger will always work in jvm>=1.4,
      +899         // and SimpleLog will always work in any JVM. So the loop would never
      +900         // ever look for logging libraries in the parent classpath. Yet many
      +901         // users would expect that putting log4j there would cause it to be
      +902         // detected (and this is the historical JCL behaviour). So we go with
      +903         // the first approach. A user that has bundled a specific logging lib
      +904         // in a webapp should use a commons-logging.properties file or a
      +905         // service file in META-INF to force use of that logging lib anyway,
      +906         // rather than relying on discovery.
      +907         
      +908         if (isDiagnosticsEnabled()) {
      +909             logDiagnostic(
      +910                 "No user-specified Log implementation; performing discovery" +
      +911                 " using the standard supported logging implementations...");
      +912         }
      +913         for(int i=0; (i<classesToDiscover.length) && (result == null); ++i) {
      +914             result = createLogFromClass(classesToDiscover[i], logCategory, true);
      +915         }
      +916         
      +917         if (result == null) {
      +918             throw new LogConfigurationException
      +919                         ("No suitable Log implementation");
      +920         }
      +921         
      +922         return result;        
      +923     }
      +924 
      +925 
      +926     /**
      +927      * Appends message if the given name is similar to the candidate.
      +928      * @param messageBuffer <code>StringBuffer</code> the message should be appended to, 
      +929      * not null
      +930      * @param name the (trimmed) name to be test against the candidate, not null
      +931      * @param candidate the candidate name (not null)
      +932      */
      +933     private void informUponSimilarName(final StringBuffer messageBuffer, final String name, 
      +934             final String candidate) {
      +935         if (name.equals(candidate)) {
      +936             // Don't suggest a name that is exactly the same as the one the
      +937             // user tried...
      +938             return;
      +939         }
      +940 
      +941         // If the user provides a name that is in the right package, and gets
      +942         // the first 5 characters of the adapter class right (ignoring case),
      +943         // then suggest the candidate adapter class name.
      +944         if (name.regionMatches(true, 0, candidate, 0, PKG_LEN + 5)) {
      +945             messageBuffer.append(" Did you mean '");
      +946             messageBuffer.append(candidate);
      +947             messageBuffer.append("'?");
      +948         }
      +949     }
      +950     
      +951     
      +952     /**
      +953      * Checks system properties and the attribute map for 
      +954      * a Log implementation specified by the user under the 
      +955      * property names {@link #LOG_PROPERTY} or {@link #LOG_PROPERTY_OLD}.
      +956      * 
      +957      * @return classname specified by the user, or <code>null</code>
      +958      */
      +959     private String findUserSpecifiedLogClassName()
      +960     {
      +961         if (isDiagnosticsEnabled()) {
      +962             logDiagnostic("Trying to get log class from attribute '" + LOG_PROPERTY + "'");
      +963         }
      +964         String specifiedClass = (String) getAttribute(LOG_PROPERTY);
      +965 
      +966         if (specifiedClass == null) { // @deprecated
      +967             if (isDiagnosticsEnabled()) {
      +968                 logDiagnostic("Trying to get log class from attribute '" + 
      +969                               LOG_PROPERTY_OLD + "'");
      +970             }
      +971             specifiedClass = (String) getAttribute(LOG_PROPERTY_OLD);
      +972         }
      +973 
      +974         if (specifiedClass == null) {
      +975             if (isDiagnosticsEnabled()) {
      +976                 logDiagnostic("Trying to get log class from system property '" + 
      +977                           LOG_PROPERTY + "'");
      +978             }
      +979             try {
      +980                 specifiedClass = getSystemProperty(LOG_PROPERTY, null);
      +981             } catch (SecurityException e) {
      +982                 if (isDiagnosticsEnabled()) {
      +983                     logDiagnostic("No access allowed to system property '" + 
      +984                         LOG_PROPERTY + "' - " + e.getMessage());
      +985                 }
      +986             }
      +987         }
      +988 
      +989         if (specifiedClass == null) { // @deprecated
      +990             if (isDiagnosticsEnabled()) {
      +991                 logDiagnostic("Trying to get log class from system property '" + 
      +992                           LOG_PROPERTY_OLD + "'");
      +993             }
      +994             try {
      +995                 specifiedClass = getSystemProperty(LOG_PROPERTY_OLD, null);
      +996             } catch (SecurityException e) {
      +997                 if (isDiagnosticsEnabled()) {
      +998                     logDiagnostic("No access allowed to system property '" + 
      +999                         LOG_PROPERTY_OLD + "' - " + e.getMessage());
      +1000                 }
      +1001             }
      +1002         }
      +1003         
      +1004         // Remove any whitespace; it's never valid in a classname so its
      +1005         // presence just means a user mistake. As we know what they meant,
      +1006         // we may as well strip the spaces.
      +1007         if (specifiedClass != null) {
      +1008             specifiedClass = specifiedClass.trim();
      +1009         }
      +1010 
      +1011         return specifiedClass;
      +1012     }
      +1013 
      +1014     
      +1015     /**
      +1016      * Attempts to load the given class, find a suitable constructor,
      +1017      * and instantiate an instance of Log.
      +1018      * 
      +1019      * @param logAdapterClassName classname of the Log implementation
      +1020      * 
      +1021      * @param logCategory  argument to pass to the Log implementation's
      +1022      * constructor
      +1023      * 
      +1024      * @param affectState  <code>true</code> if this object's state should
      +1025      * be affected by this method call, <code>false</code> otherwise.
      +1026      * 
      +1027      * @return  an instance of the given class, or null if the logging
      +1028      * library associated with the specified adapter is not available.
      +1029      *                          
      +1030      * @throws LogConfigurationException if there was a serious error with
      +1031      * configuration and the handleFlawedDiscovery method decided this
      +1032      * problem was fatal.
      +1033      */                                  
      +1034     private Log createLogFromClass(String logAdapterClassName,
      +1035                                    String logCategory,
      +1036                                    boolean affectState) 
      +1037             throws LogConfigurationException {       
      +1038 
      +1039         if (isDiagnosticsEnabled()) {
      +1040             logDiagnostic("Attempting to instantiate '" + logAdapterClassName + "'");
      +1041         }
      +1042         
      +1043         Object[] params = { logCategory };
      +1044         Log logAdapter = null;
      +1045         Constructor constructor = null;
      +1046         
      +1047         Class logAdapterClass = null;
      +1048         ClassLoader currentCL = getBaseClassLoader();
      +1049         
      +1050         for(;;) {
      +1051             // Loop through the classloader hierarchy trying to find
      +1052             // a viable classloader.
      +1053             logDiagnostic(
      +1054                     "Trying to load '"
      +1055                     + logAdapterClassName
      +1056                     + "' from classloader "
      +1057                     + objectId(currentCL));
      +1058             try {
      +1059                 if (isDiagnosticsEnabled()) {
      +1060                     // Show the location of the first occurrence of the .class file
      +1061                     // in the classpath. This is the location that ClassLoader.loadClass
      +1062                     // will load the class from -- unless the classloader is doing
      +1063                     // something weird. 
      +1064                     URL url;
      +1065                     String resourceName = logAdapterClassName.replace('.', '/') + ".class";
      +1066                     if (currentCL != null) {
      +1067                         url = currentCL.getResource(resourceName );
      +1068                     } else {
      +1069                         url = ClassLoader.getSystemResource(resourceName + ".class");
      +1070                     }
      +1071 
      +1072                     if (url == null) {
      +1073                         logDiagnostic("Class '" + logAdapterClassName + "' [" + resourceName + "] cannot be found.");
      +1074                     } else {
      +1075                         logDiagnostic("Class '" + logAdapterClassName + "' was found at '" + url + "'");
      +1076                     }
      +1077                 }
      +1078 
      +1079                 Class c = null;
      +1080                 try {
      +1081                     c = Class.forName(logAdapterClassName, true, currentCL);
      +1082                 } catch (ClassNotFoundException originalClassNotFoundException) {
      +1083                     // The current classloader was unable to find the log adapter 
      +1084                     // in this or any ancestor classloader. There's no point in
      +1085                     // trying higher up in the hierarchy in this case..
      +1086                     String msg = "" + originalClassNotFoundException.getMessage();
      +1087                     logDiagnostic(
      +1088                         "The log adapter '"
      +1089                         + logAdapterClassName
      +1090                         + "' is not available via classloader " 
      +1091                         + objectId(currentCL)
      +1092                         + ": "
      +1093                         + msg.trim());
      +1094                     try {
      +1095                         // Try the class classloader.
      +1096                         // This may work in cases where the TCCL
      +1097                         // does not contain the code executed or JCL.
      +1098                         // This behaviour indicates that the application 
      +1099                         // classloading strategy is not consistent with the
      +1100                         // Java 1.2 classloading guidelines but JCL can
      +1101                         // and so should handle this case.
      +1102                         c = Class.forName(logAdapterClassName);
      +1103                     } catch (ClassNotFoundException secondaryClassNotFoundException) {
      +1104                         // no point continuing: this adapter isn't available
      +1105                         msg = "" + secondaryClassNotFoundException.getMessage();
      +1106                         logDiagnostic(
      +1107                             "The log adapter '"
      +1108                             + logAdapterClassName
      +1109                             + "' is not available via the LogFactoryImpl class classloader: "
      +1110                             + msg.trim());
      +1111                         break;
      +1112                     }
      +1113                 }
      +1114                 
      +1115                 constructor = c.getConstructor(logConstructorSignature);
      +1116                 Object o = constructor.newInstance(params);
      +1117 
      +1118                 // Note that we do this test after trying to create an instance
      +1119                 // [rather than testing Log.class.isAssignableFrom(c)] so that
      +1120                 // we don't complain about Log hierarchy problems when the
      +1121                 // adapter couldn't be instantiated anyway.
      +1122                 if (o instanceof Log) {
      +1123                     logAdapterClass = c;
      +1124                     logAdapter = (Log) o;
      +1125                     break;
      +1126                 }
      +1127                 
      +1128                 // Oops, we have a potential problem here. An adapter class
      +1129                 // has been found and its underlying lib is present too, but
      +1130                 // there are multiple Log interface classes available making it
      +1131                 // impossible to cast to the type the caller wanted. We 
      +1132                 // certainly can't use this logger, but we need to know whether
      +1133                 // to keep on discovering or terminate now.
      +1134                 //
      +1135                 // The handleFlawedHierarchy method will throw 
      +1136                 // LogConfigurationException if it regards this problem as
      +1137                 // fatal, and just return if not.
      +1138                 handleFlawedHierarchy(currentCL, c);
      +1139             } catch (NoClassDefFoundError e) {
      +1140                 // We were able to load the adapter but it had references to
      +1141                 // other classes that could not be found. This simply means that
      +1142                 // the underlying logger library is not present in this or any
      +1143                 // ancestor classloader. There's no point in trying higher up
      +1144                 // in the hierarchy in this case..
      +1145                 String msg = "" + e.getMessage();
      +1146                 logDiagnostic(
      +1147                     "The log adapter '"
      +1148                     + logAdapterClassName
      +1149                     + "' is missing dependencies when loaded via classloader "
      +1150                     + objectId(currentCL)
      +1151                     + ": "
      +1152                     + msg.trim());
      +1153                 break;
      +1154             } catch (ExceptionInInitializerError e) {
      +1155                 // A static initializer block or the initializer code associated 
      +1156                 // with a static variable on the log adapter class has thrown
      +1157                 // an exception.
      +1158                 //
      +1159                 // We treat this as meaning the adapter's underlying logging
      +1160                 // library could not be found.
      +1161                 String msg = "" + e.getMessage();
      +1162                 logDiagnostic(
      +1163                     "The log adapter '"
      +1164                     + logAdapterClassName
      +1165                     + "' is unable to initialize itself when loaded via classloader "
      +1166                     + objectId(currentCL)
      +1167                     + ": "
      +1168                     + msg.trim());
      +1169                 break;
      +1170             } catch(LogConfigurationException e) {
      +1171                 // call to handleFlawedHierarchy above must have thrown
      +1172                 // a LogConfigurationException, so just throw it on                
      +1173                 throw e;
      +1174             } catch(Throwable t) {
      +1175                 // handleFlawedDiscovery will determine whether this is a fatal
      +1176                 // problem or not. If it is fatal, then a LogConfigurationException
      +1177                 // will be thrown.
      +1178                 handleFlawedDiscovery(logAdapterClassName, currentCL, t);
      +1179             }
      +1180                         
      +1181             if (currentCL == null) {
      +1182                 break;
      +1183             }
      +1184             
      +1185             // try the parent classloader
      +1186             // currentCL = currentCL.getParent();
      +1187             currentCL = getParentClassLoader(currentCL);
      +1188         }
      +1189 
      +1190         if ((logAdapter != null) && affectState) {
      +1191             // We've succeeded, so set instance fields
      +1192             this.logClassName   = logAdapterClassName;
      +1193             this.logConstructor = constructor;
      +1194             
      +1195             // Identify the <code>setLogFactory</code> method (if there is one)
      +1196             try {
      +1197                 this.logMethod = logAdapterClass.getMethod("setLogFactory",
      +1198                                                logMethodSignature);
      +1199                 logDiagnostic("Found method setLogFactory(LogFactory) in '" 
      +1200                               + logAdapterClassName + "'");
      +1201             } catch (Throwable t) {
      +1202                 this.logMethod = null;
      +1203                 logDiagnostic(
      +1204                     "[INFO] '" + logAdapterClassName 
      +1205                     + "' from classloader " + objectId(currentCL)
      +1206                     + " does not declare optional method "
      +1207                     + "setLogFactory(LogFactory)");
      +1208             }
      +1209             
      +1210             logDiagnostic(
      +1211                 "Log adapter '" + logAdapterClassName 
      +1212                 + "' from classloader " + objectId(logAdapterClass.getClassLoader())
      +1213                 + " has been selected for use.");
      +1214         }
      +1215         
      +1216         return logAdapter;
      +1217     }
      +1218     
      +1219     
      +1220     /**
      +1221      * Return the classloader from which we should try to load the logging
      +1222      * adapter classes.
      +1223      * <p>
      +1224      * This method usually returns the context classloader. However if it
      +1225      * is discovered that the classloader which loaded this class is a child
      +1226      * of the context classloader <i>and</i> the allowFlawedContext option
      +1227      * has been set then the classloader which loaded this class is returned
      +1228      * instead.
      +1229      * <p>
      +1230      * The only time when the classloader which loaded this class is a
      +1231      * descendant (rather than the same as or an ancestor of the context
      +1232      * classloader) is when an app has created custom classloaders but
      +1233      * failed to correctly set the context classloader. This is a bug in
      +1234      * the calling application; however we provide the option for JCL to
      +1235      * simply generate a warning rather than fail outright.
      +1236      * 
      +1237      */
      +1238     private ClassLoader getBaseClassLoader() throws LogConfigurationException {
      +1239         ClassLoader thisClassLoader = getClassLoader(LogFactoryImpl.class);
      +1240         
      +1241         if (useTCCL == false) {
      +1242             return thisClassLoader;
      +1243         }
      +1244 
      +1245         ClassLoader contextClassLoader = getContextClassLoaderInternal();
      +1246 
      +1247         ClassLoader baseClassLoader = getLowestClassLoader(
      +1248                 contextClassLoader, thisClassLoader);
      +1249         
      +1250         if (baseClassLoader == null) {
      +1251            // The two classloaders are not part of a parent child relationship.
      +1252            // In some classloading setups (e.g. JBoss with its 
      +1253            // UnifiedLoaderRepository) this can still work, so if user hasn't
      +1254            // forbidden it, just return the contextClassLoader.
      +1255            if (allowFlawedContext) {   
      +1256               if (isDiagnosticsEnabled()) {
      +1257                    logDiagnostic(
      +1258                            "[WARNING] the context classloader is not part of a"
      +1259                            + " parent-child relationship with the classloader that"
      +1260                            + " loaded LogFactoryImpl.");
      +1261               }
      +1262               // If contextClassLoader were null, getLowestClassLoader() would
      +1263               // have returned thisClassLoader.  The fact we are here means
      +1264               // contextClassLoader is not null, so we can just return it.
      +1265               return contextClassLoader;
      +1266            }
      +1267            else {
      +1268             throw new LogConfigurationException(
      +1269                 "Bad classloader hierarchy; LogFactoryImpl was loaded via"
      +1270                 + " a classloader that is not related to the current context"
      +1271                 + " classloader.");
      +1272            }           
      +1273         }
      +1274 
      +1275         if (baseClassLoader != contextClassLoader) {
      +1276             // We really should just use the contextClassLoader as the starting
      +1277             // point for scanning for log adapter classes. However it is expected
      +1278             // that there are a number of broken systems out there which create
      +1279             // custom classloaders but fail to set the context classloader so
      +1280             // we handle those flawed systems anyway.
      +1281             if (allowFlawedContext) {
      +1282                 if (isDiagnosticsEnabled()) {
      +1283                     logDiagnostic(
      +1284                             "Warning: the context classloader is an ancestor of the"
      +1285                             + " classloader that loaded LogFactoryImpl; it should be"
      +1286                             + " the same or a descendant. The application using"
      +1287                             + " commons-logging should ensure the context classloader"
      +1288                             + " is used correctly.");
      +1289                 }
      +1290             } else {
      +1291                 throw new LogConfigurationException(
      +1292                         "Bad classloader hierarchy; LogFactoryImpl was loaded via"
      +1293                         + " a classloader that is not related to the current context"
      +1294                         + " classloader."); 
      +1295             }
      +1296         }
      +1297         
      +1298         return baseClassLoader;
      +1299     }
      +1300 
      +1301     /**
      +1302      * Given two related classloaders, return the one which is a child of
      +1303      * the other.
      +1304      * <p>
      +1305      * @param c1 is a classloader (including the null classloader)
      +1306      * @param c2 is a classloader (including the null classloader)
      +1307      * 
      +1308      * @return c1 if it has c2 as an ancestor, c2 if it has c1 as an ancestor,
      +1309      * and null if neither is an ancestor of the other.
      +1310      */
      +1311     private ClassLoader getLowestClassLoader(ClassLoader c1, ClassLoader c2) {
      +1312         // TODO: use AccessController when dealing with classloaders here
      +1313         
      +1314         if (c1 == null)
      +1315             return c2;
      +1316         
      +1317         if (c2 == null)
      +1318             return c1;
      +1319         
      +1320         ClassLoader current;
      +1321 
      +1322         // scan c1's ancestors to find c2
      +1323         current = c1;
      +1324         while (current != null) {
      +1325             if (current == c2)
      +1326                 return c1;
      +1327             current = current.getParent();
      +1328         }
      +1329        
      +1330         // scan c2's ancestors to find c1
      +1331         current = c2;
      +1332         while (current != null) {
      +1333             if (current == c1)
      +1334                 return c2;
      +1335             current = current.getParent();
      +1336         }
      +1337 
      +1338         return null;
      +1339     }
      +1340 
      +1341     /**
      +1342      * Generates an internal diagnostic logging of the discovery failure and 
      +1343      * then throws a <code>LogConfigurationException</code> that wraps 
      +1344      * the passed <code>Throwable</code>.
      +1345      * 
      +1346      * @param logAdapterClassName is the class name of the Log implementation
      +1347      * that could not be instantiated. Cannot be <code>null</code>.
      +1348      * 
      +1349      * @param classLoader is the classloader that we were trying to load the
      +1350      * logAdapterClassName from when the exception occurred.
      +1351      * 
      +1352      * @param discoveryFlaw is the Throwable created by the classloader
      +1353      * 
      +1354      * @throws LogConfigurationException    ALWAYS
      +1355      */
      +1356     private void handleFlawedDiscovery(String logAdapterClassName,
      +1357                                        ClassLoader classLoader,
      +1358                                        Throwable discoveryFlaw) {
      +1359         
      +1360         if (isDiagnosticsEnabled()) {
      +1361             logDiagnostic("Could not instantiate Log '"
      +1362                       + logAdapterClassName + "' -- "
      +1363                       + discoveryFlaw.getClass().getName() + ": "
      +1364                       + discoveryFlaw.getLocalizedMessage());       
      +1365 
      +1366             if (discoveryFlaw instanceof InvocationTargetException ) {
      +1367                 // Ok, the lib is there but while trying to create a real underlying
      +1368                 // logger something failed in the underlying lib; display info about
      +1369                 // that if possible.
      +1370                 InvocationTargetException ite = (InvocationTargetException)discoveryFlaw;
      +1371                 Throwable cause = ite.getTargetException();
      +1372                 if (cause != null) {
      +1373                     logDiagnostic("... InvocationTargetException: " +
      +1374                         cause.getClass().getName() + ": " +
      +1375                         cause.getLocalizedMessage());
      +1376 
      +1377                     if (cause instanceof ExceptionInInitializerError) {
      +1378                         ExceptionInInitializerError eiie = (ExceptionInInitializerError)cause;
      +1379                         Throwable cause2 = eiie.getException();
      +1380                         if (cause2 != null) {
      +1381                             logDiagnostic("... ExceptionInInitializerError: " +
      +1382                                 cause2.getClass().getName() + ": " +
      +1383                                 cause2.getLocalizedMessage());
      +1384                         }
      +1385                     }
      +1386                 }
      +1387             }
      +1388         }
      +1389         
      +1390         if (!allowFlawedDiscovery) {
      +1391             throw new LogConfigurationException(discoveryFlaw);
      +1392         }
      +1393     }
      +1394 
      +1395     
      +1396     /**
      +1397      * Report a problem loading the log adapter, then either return 
      +1398      * (if the situation is considered recoverable) or throw a
      +1399      * LogConfigurationException.
      +1400      *  <p>
      +1401      * There are two possible reasons why we successfully loaded the 
      +1402      * specified log adapter class then failed to cast it to a Log object:
      +1403      * <ol>
      +1404      * <li>the specific class just doesn't implement the Log interface 
      +1405      *     (user screwed up), or
      +1406      * <li> the specified class has bound to a Log class loaded by some other
      +1407      *      classloader; Log@classloaderX cannot be cast to Log@classloaderY.
      +1408      * </ol>
      +1409      * <p>
      +1410      * Here we try to figure out which case has occurred so we can give the
      +1411      * user some reasonable feedback.
      +1412      * 
      +1413      * @param badClassLoader is the classloader we loaded the problem class from,
      +1414      * ie it is equivalent to badClass.getClassLoader().
      +1415      * 
      +1416      * @param badClass is a Class object with the desired name, but which 
      +1417      * does not implement Log correctly.
      +1418      * 
      +1419      * @throws LogConfigurationException when the situation
      +1420      * should not be recovered from.
      +1421      */
      +1422     private void handleFlawedHierarchy(ClassLoader badClassLoader, Class badClass)
      +1423     throws LogConfigurationException {
      +1424 
      +1425         boolean implementsLog = false;
      +1426         String logInterfaceName = Log.class.getName();
      +1427         Class interfaces[] = badClass.getInterfaces();
      +1428         for (int i = 0; i < interfaces.length; i++) {
      +1429             if (logInterfaceName.equals(interfaces[i].getName())) {
      +1430                 implementsLog = true;
      +1431                 break;
      +1432             }
      +1433         }
      +1434         
      +1435         if (implementsLog) {
      +1436             // the class does implement an interface called Log, but
      +1437             // it is in the wrong classloader
      +1438             if (isDiagnosticsEnabled()) {
      +1439                 try {
      +1440                     ClassLoader logInterfaceClassLoader = getClassLoader(Log.class);
      +1441                     logDiagnostic(
      +1442                         "Class '" + badClass.getName()
      +1443                         + "' was found in classloader " 
      +1444                         + objectId(badClassLoader)
      +1445                         + ". It is bound to a Log interface which is not"
      +1446                         + " the one loaded from classloader "
      +1447                         + objectId(logInterfaceClassLoader));
      +1448                 } catch (Throwable t) {
      +1449                     logDiagnostic(
      +1450                         "Error while trying to output diagnostics about"
      +1451                         + " bad class '" + badClass + "'");
      +1452                 }
      +1453             }
      +1454             
      +1455             if (!allowFlawedHierarchy) {
      +1456                 StringBuffer msg = new StringBuffer();
      +1457                 msg.append("Terminating logging for this context ");
      +1458                 msg.append("due to bad log hierarchy. ");
      +1459                 msg.append("You have more than one version of '");
      +1460                 msg.append(Log.class.getName());
      +1461                 msg.append("' visible.");
      +1462                 if (isDiagnosticsEnabled()) {
      +1463                     logDiagnostic(msg.toString());
      +1464                 } 
      +1465                 throw new LogConfigurationException(msg.toString());
      +1466             }
      +1467         
      +1468             if (isDiagnosticsEnabled()) {
      +1469                 StringBuffer msg = new StringBuffer();
      +1470                 msg.append("Warning: bad log hierarchy. ");
      +1471                 msg.append("You have more than one version of '");
      +1472                 msg.append(Log.class.getName());
      +1473                 msg.append("' visible.");
      +1474                 logDiagnostic(msg.toString());
      +1475             }
      +1476         } else {
      +1477             // this is just a bad adapter class
      +1478             if (!allowFlawedDiscovery) {
      +1479                 StringBuffer msg = new StringBuffer();
      +1480                 msg.append("Terminating logging for this context. ");
      +1481                 msg.append("Log class '");
      +1482                 msg.append(badClass.getName());
      +1483                 msg.append("' does not implement the Log interface.");
      +1484                 if (isDiagnosticsEnabled()) {
      +1485                     logDiagnostic(msg.toString());
      +1486                 }
      +1487                 
      +1488                 throw new LogConfigurationException(msg.toString());
      +1489             }
      +1490 
      +1491             if (isDiagnosticsEnabled()) {
      +1492                 StringBuffer msg = new StringBuffer();
      +1493                 msg.append("[WARNING] Log class '");
      +1494                 msg.append(badClass.getName());
      +1495                 msg.append("' does not implement the Log interface.");
      +1496                 logDiagnostic(msg.toString());
      +1497             }
      +1498         }
      +1499     }
      +1500 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogKitLogger.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogKitLogger.html new file mode 100644 index 0000000..ef1dfda --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/LogKitLogger.html @@ -0,0 +1,308 @@ + + + + +LogKitLogger xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  import java.io.Serializable;
      +22  import org.apache.log.Logger;
      +23  import org.apache.log.Hierarchy;
      +24  import org.apache.commons.logging.Log;
      +25  
      +26  /**
      +27   * <p>Implementation of <code>org.apache.commons.logging.Log</code>
      +28   * that wraps the <a href="http://avalon.apache.org/logkit/">avalon-logkit</a>
      +29   * logging system. Configuration of <code>LogKit</code> is left to the user.
      +30   * </p>
      +31   *
      +32   * <p><code>LogKit</code> accepts only <code>String</code> messages.
      +33   * Therefore, this implementation converts object messages into strings
      +34   * by called their <code>toString()</code> method before logging them.</p>
      +35   *
      +36   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +37   * @author Robert Burrell Donkin
      +38   * @version $Id: LogKitLogger.java 424107 2006-07-20 23:15:42Z skitching $
      +39   */
      +40  
      +41  public class LogKitLogger implements Log, Serializable {
      +42  
      +43  
      +44      // ------------------------------------------------------------- Attributes
      +45  
      +46  
      +47      /** Logging goes to this <code>LogKit</code> logger */
      +48      protected transient Logger logger = null;
      +49  
      +50      /** Name of this logger */
      +51      protected String name = null;
      +52  
      +53  
      +54      // ------------------------------------------------------------ Constructor
      +55  
      +56  
      +57      /**
      +58       * Construct <code>LogKitLogger</code> which wraps the <code>LogKit</code>
      +59       * logger with given name.
      +60       *
      +61       * @param name log name
      +62       */
      +63      public LogKitLogger(String name) {
      +64          this.name = name;
      +65          this.logger = getLogger();
      +66      }
      +67  
      +68  
      +69      // --------------------------------------------------------- Public Methods
      +70  
      +71  
      +72      /**
      +73       * <p>Return the underlying Logger we are using.</p>
      +74       */
      +75      public Logger getLogger() {
      +76  
      +77          if (logger == null) {
      +78              logger = Hierarchy.getDefaultHierarchy().getLoggerFor(name);
      +79          }
      +80          return (logger);
      +81  
      +82      }
      +83  
      +84  
      +85      // ----------------------------------------------------- Log Implementation
      +86  
      +87  
      +88      /**
      +89       * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
      +90       * 
      +91       * @param message to log
      +92       * @see org.apache.commons.logging.Log#trace(Object)
      +93      */
      +94      public void trace(Object message) {
      +95          debug(message);
      +96      }
      +97  
      +98  
      +99      /**
      +100      * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
      +101      * 
      +102      * @param message to log
      +103      * @param t log this cause
      +104      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
      +105      */
      +106     public void trace(Object message, Throwable t) {
      +107         debug(message, t);
      +108     }
      +109 
      +110 
      +111     /**
      +112      * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
      +113      * 
      +114      * @param message to log
      +115      * @see org.apache.commons.logging.Log#debug(Object)
      +116      */
      +117     public void debug(Object message) {
      +118         if (message != null) {
      +119             getLogger().debug(String.valueOf(message));
      +120         }
      +121     }
      +122 
      +123 
      +124     /**
      +125      * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
      +126      * 
      +127      * @param message to log
      +128      * @param t log this cause
      +129      * @see org.apache.commons.logging.Log#debug(Object, Throwable)
      +130      */
      +131     public void debug(Object message, Throwable t) {
      +132         if (message != null) {
      +133             getLogger().debug(String.valueOf(message), t);
      +134         }
      +135     }
      +136 
      +137 
      +138     /**
      +139      * Logs a message with <code>org.apache.log.Priority.INFO</code>.
      +140      * 
      +141      * @param message to log
      +142      * @see org.apache.commons.logging.Log#info(Object)
      +143      */
      +144     public void info(Object message) {
      +145         if (message != null) {
      +146             getLogger().info(String.valueOf(message));
      +147         }
      +148     }
      +149 
      +150 
      +151     /**
      +152      * Logs a message with <code>org.apache.log.Priority.INFO</code>.
      +153      * 
      +154      * @param message to log
      +155      * @param t log this cause
      +156      * @see org.apache.commons.logging.Log#info(Object, Throwable)
      +157      */
      +158     public void info(Object message, Throwable t) {
      +159         if (message != null) {
      +160             getLogger().info(String.valueOf(message), t);
      +161         }
      +162     }
      +163 
      +164 
      +165     /**
      +166      * Logs a message with <code>org.apache.log.Priority.WARN</code>.
      +167      * 
      +168      * @param message to log
      +169      * @see org.apache.commons.logging.Log#warn(Object)
      +170      */
      +171     public void warn(Object message) {
      +172         if (message != null) {
      +173             getLogger().warn(String.valueOf(message));
      +174         }
      +175     }
      +176 
      +177 
      +178     /**
      +179      * Logs a message with <code>org.apache.log.Priority.WARN</code>.
      +180      * 
      +181      * @param message to log
      +182      * @param t log this cause
      +183      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
      +184      */
      +185     public void warn(Object message, Throwable t) {
      +186         if (message != null) {
      +187             getLogger().warn(String.valueOf(message), t);
      +188         }
      +189     }
      +190 
      +191 
      +192     /**
      +193      * Logs a message with <code>org.apache.log.Priority.ERROR</code>.
      +194      * 
      +195      * @param message to log
      +196      * @see org.apache.commons.logging.Log#error(Object)
      +197      */
      +198     public void error(Object message) {
      +199         if (message != null) {
      +200             getLogger().error(String.valueOf(message));
      +201         }
      +202     }
      +203 
      +204 
      +205     /**
      +206      * Logs a message with <code>org.apache.log.Priority.ERROR</code>.
      +207      * 
      +208      * @param message to log
      +209      * @param t log this cause
      +210      * @see org.apache.commons.logging.Log#error(Object, Throwable)
      +211      */
      +212     public void error(Object message, Throwable t) {
      +213         if (message != null) {
      +214             getLogger().error(String.valueOf(message), t);
      +215         }
      +216     }
      +217 
      +218 
      +219     /**
      +220      * Logs a message with <code>org.apache.log.Priority.FATAL_ERROR</code>.
      +221      * 
      +222      * @param message to log
      +223      * @see org.apache.commons.logging.Log#fatal(Object)
      +224      */
      +225     public void fatal(Object message) {
      +226         if (message != null) {
      +227             getLogger().fatalError(String.valueOf(message));
      +228         }
      +229     }
      +230 
      +231 
      +232     /**
      +233      * Logs a message with <code>org.apache.log.Priority.FATAL_ERROR</code>.
      +234      * 
      +235      * @param message to log
      +236      * @param t log this cause
      +237      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
      +238      */
      +239     public void fatal(Object message, Throwable t) {
      +240         if (message != null) {
      +241             getLogger().fatalError(String.valueOf(message), t);
      +242         }
      +243     }
      +244 
      +245 
      +246     /**
      +247      * Checks whether the <code>LogKit</code> logger will log messages of priority <code>DEBUG</code>.
      +248      */
      +249     public boolean isDebugEnabled() {
      +250         return getLogger().isDebugEnabled();
      +251     }
      +252 
      +253 
      +254     /**
      +255      * Checks whether the <code>LogKit</code> logger will log messages of priority <code>ERROR</code>.
      +256      */
      +257     public boolean isErrorEnabled() {
      +258         return getLogger().isErrorEnabled();
      +259     }
      +260 
      +261 
      +262     /**
      +263      * Checks whether the <code>LogKit</code> logger will log messages of priority <code>FATAL_ERROR</code>.
      +264      */
      +265     public boolean isFatalEnabled() {
      +266         return getLogger().isFatalErrorEnabled();
      +267     }
      +268 
      +269 
      +270     /**
      +271      * Checks whether the <code>LogKit</code> logger will log messages of priority <code>INFO</code>.
      +272      */
      +273     public boolean isInfoEnabled() {
      +274         return getLogger().isInfoEnabled();
      +275     }
      +276 
      +277 
      +278     /**
      +279      * Checks whether the <code>LogKit</code> logger will log messages of priority <code>DEBUG</code>.
      +280      */
      +281     public boolean isTraceEnabled() {
      +282         return getLogger().isDebugEnabled();
      +283     }
      +284 
      +285 
      +286     /**
      +287      * Checks whether the <code>LogKit</code> logger will log messages of priority <code>WARN</code>.
      +288      */
      +289     public boolean isWarnEnabled() {
      +290         return getLogger().isWarnEnabled();
      +291     }
      +292 
      +293 
      +294 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/NoOpLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/NoOpLog.html new file mode 100644 index 0000000..3738209 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/NoOpLog.html @@ -0,0 +1,121 @@ + + + + +NoOpLog xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  
      +22  import java.io.Serializable;
      +23  import org.apache.commons.logging.Log;
      +24  
      +25  
      +26  /**
      +27   * <p>Trivial implementation of Log that throws away all messages.  No
      +28   * configurable system properties are supported.</p>
      +29   *
      +30   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +31   * @author Rod Waldhoff
      +32   * @version $Id: NoOpLog.java 424107 2006-07-20 23:15:42Z skitching $
      +33   */
      +34  public class NoOpLog implements Log, Serializable {
      +35  
      +36      /** Convenience constructor */
      +37      public NoOpLog() { }
      +38      /** Base constructor */
      +39      public NoOpLog(String name) { }
      +40      /** Do nothing */
      +41      public void trace(Object message) { }
      +42      /** Do nothing */
      +43      public void trace(Object message, Throwable t) { }
      +44      /** Do nothing */
      +45      public void debug(Object message) { }
      +46      /** Do nothing */
      +47      public void debug(Object message, Throwable t) { }
      +48      /** Do nothing */
      +49      public void info(Object message) { }
      +50      /** Do nothing */
      +51      public void info(Object message, Throwable t) { }
      +52      /** Do nothing */
      +53      public void warn(Object message) { }
      +54      /** Do nothing */
      +55      public void warn(Object message, Throwable t) { }
      +56      /** Do nothing */
      +57      public void error(Object message) { }
      +58      /** Do nothing */
      +59      public void error(Object message, Throwable t) { }
      +60      /** Do nothing */
      +61      public void fatal(Object message) { }
      +62      /** Do nothing */
      +63      public void fatal(Object message, Throwable t) { }
      +64  
      +65      /**
      +66       * Debug is never enabled.
      +67       *
      +68       * @return false
      +69       */
      +70      public final boolean isDebugEnabled() { return false; }
      +71  
      +72      /**
      +73       * Error is never enabled.
      +74       *
      +75       * @return false
      +76       */
      +77      public final boolean isErrorEnabled() { return false; }
      +78  
      +79      /**
      +80       * Fatal is never enabled.
      +81       *
      +82       * @return false
      +83       */
      +84      public final boolean isFatalEnabled() { return false; }
      +85  
      +86      /**
      +87       * Info is never enabled.
      +88       *
      +89       * @return false
      +90       */
      +91      public final boolean isInfoEnabled() { return false; }
      +92  
      +93      /**
      +94       * Trace is never enabled.
      +95       *
      +96       * @return false
      +97       */
      +98      public final boolean isTraceEnabled() { return false; }
      +99  
      +100     /**
      +101      * Warn is never enabled.
      +102      *
      +103      * @return false
      +104      */
      +105     public final boolean isWarnEnabled() { return false; }
      +106 
      +107 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/ServletContextCleaner.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/ServletContextCleaner.html new file mode 100644 index 0000000..ac6f8b4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/ServletContextCleaner.html @@ -0,0 +1,152 @@ + + + + +ServletContextCleaner xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  import java.lang.reflect.InvocationTargetException;
      +22  import java.lang.reflect.Method;
      +23  
      +24  import javax.servlet.ServletContextEvent;
      +25  import javax.servlet.ServletContextListener;
      +26  
      +27  import org.apache.commons.logging.LogFactory;
      +28  
      +29  
      +30  /**
      +31   * This class is capable of receiving notifications about the undeployment of
      +32   * a webapp, and responds by ensuring that commons-logging releases all
      +33   * memory associated with the undeployed webapp.
      +34   * <p>
      +35   * In general, the WeakHashtable support added in commons-logging release 1.1
      +36   * ensures that logging classes do not hold references that prevent an
      +37   * undeployed webapp's memory from being garbage-collected even when multiple
      +38   * copies of commons-logging are deployed via multiple classloaders (a
      +39   * situation that earlier versions had problems with). However there are
      +40   * some rare cases where the WeakHashtable approach does not work; in these
      +41   * situations specifying this class as a listener for the web application will
      +42   * ensure that all references held by commons-logging are fully released.
      +43   * <p>
      +44   * To use this class, configure the webapp deployment descriptor to call
      +45   * this class on webapp undeploy; the contextDestroyed method will tell
      +46   * every accessable LogFactory class that the entry in its map for the
      +47   * current webapp's context classloader should be cleared.
      +48   * 
      +49   * @since 1.1
      +50   */
      +51  
      +52  public class ServletContextCleaner implements ServletContextListener {
      +53  
      +54      private Class[] RELEASE_SIGNATURE = {ClassLoader.class};
      +55      
      +56      /**
      +57       * Invoked when a webapp is undeployed, this tells the LogFactory
      +58       * class to release any logging information related to the current
      +59       * contextClassloader.
      +60       */
      +61      public void contextDestroyed(ServletContextEvent sce) {
      +62          ClassLoader tccl = Thread.currentThread().getContextClassLoader();
      +63  
      +64          Object[] params = new Object[1];
      +65          params[0] = tccl;
      +66  
      +67          // Walk up the tree of classloaders, finding all the available
      +68          // LogFactory classes and releasing any objects associated with
      +69          // the tccl (ie the webapp).
      +70          //
      +71          // When there is only one LogFactory in the classpath, and it
      +72          // is within the webapp being undeployed then there is no problem;
      +73          // garbage collection works fine.
      +74          //
      +75          // When there are multiple LogFactory classes in the classpath but
      +76          // parent-first classloading is used everywhere, this loop is really
      +77          // short. The first instance of LogFactory found will
      +78          // be the highest in the classpath, and then no more will be found.
      +79          // This is ok, as with this setup this will be the only LogFactory
      +80          // holding any data associated with the tccl being released.
      +81          //
      +82          // When there are multiple LogFactory classes in the classpath and
      +83          // child-first classloading is used in any classloader, then multiple
      +84          // LogFactory instances may hold info about this TCCL; whenever the
      +85          // webapp makes a call into a class loaded via an ancestor classloader
      +86          // and that class calls LogFactory the tccl gets registered in
      +87          // the LogFactory instance that is visible from the ancestor
      +88          // classloader. However the concrete logging library it points
      +89          // to is expected to have been loaded via the TCCL, so the 
      +90          // underlying logging lib is only initialised/configured once.
      +91          // These references from ancestor LogFactory classes down to
      +92          // TCCL classloaders are held via weak references and so should
      +93          // be released but there are circumstances where they may not.
      +94          // Walking up the classloader ancestry ladder releasing
      +95          // the current tccl at each level tree, though, will definitely
      +96          // clear any problem references.
      +97          ClassLoader loader = tccl;
      +98          while (loader != null) {
      +99              // Load via the current loader. Note that if the class is not accessable
      +100             // via this loader, but is accessable via some ancestor then that class
      +101             // will be returned.
      +102             try {
      +103                 Class logFactoryClass = loader.loadClass("org.apache.commons.logging.LogFactory");
      +104                 Method releaseMethod = logFactoryClass.getMethod("release", RELEASE_SIGNATURE);
      +105                 releaseMethod.invoke(null, params);
      +106                 loader = logFactoryClass.getClassLoader().getParent();
      +107             } catch(ClassNotFoundException ex) {
      +108                 // Neither the current classloader nor any of its ancestors could find
      +109                 // the LogFactory class, so we can stop now.
      +110                 loader = null;
      +111             } catch(NoSuchMethodException ex) {
      +112                 // This is not expected; every version of JCL has this method
      +113                 System.err.println("LogFactory instance found which does not support release method!");
      +114                 loader = null;
      +115             } catch(IllegalAccessException ex) {
      +116                 // This is not expected; every ancestor class should be accessable
      +117                 System.err.println("LogFactory instance found which is not accessable!");
      +118                 loader = null;
      +119             } catch(InvocationTargetException ex) {
      +120                 // This is not expected
      +121                 System.err.println("LogFactory instance release method failed!");
      +122                 loader = null;
      +123             }
      +124         }
      +125         
      +126         // Just to be sure, invoke release on the LogFactory that is visible from
      +127         // this ServletContextCleaner class too. This should already have been caught
      +128         // by the above loop but just in case...
      +129         LogFactory.release(tccl);
      +130     }
      +131     
      +132     /**
      +133      * Invoked when a webapp is deployed. Nothing needs to be done here.
      +134      */
      +135     public void contextInitialized(ServletContextEvent sce) {
      +136         // do nothing
      +137     }
      +138 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/SimpleLog.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/SimpleLog.html new file mode 100644 index 0000000..7cbb0b9 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/SimpleLog.html @@ -0,0 +1,735 @@ + + + + +SimpleLog xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  import java.io.InputStream;
      +22  import java.io.Serializable;
      +23  import java.lang.reflect.InvocationTargetException;
      +24  import java.lang.reflect.Method;
      +25  import java.security.AccessController;
      +26  import java.security.PrivilegedAction;
      +27  import java.text.DateFormat;
      +28  import java.text.SimpleDateFormat;
      +29  import java.util.Date;
      +30  import java.util.Properties;
      +31  
      +32  import org.apache.commons.logging.Log;
      +33  import org.apache.commons.logging.LogConfigurationException;
      +34  
      +35  /**
      +36   * <p>Simple implementation of Log that sends all enabled log messages,
      +37   * for all defined loggers, to System.err.  The following system properties
      +38   * are supported to configure the behavior of this logger:</p>
      +39   * <ul>
      +40   * <li><code>org.apache.commons.logging.simplelog.defaultlog</code> -
      +41   *     Default logging detail level for all instances of SimpleLog.
      +42   *     Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
      +43   *     If not specified, defaults to "info". </li>
      +44   * <li><code>org.apache.commons.logging.simplelog.log.xxxxx</code> -
      +45   *     Logging detail level for a SimpleLog instance named "xxxxx".
      +46   *     Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
      +47   *     If not specified, the default logging detail level is used.</li>
      +48   * <li><code>org.apache.commons.logging.simplelog.showlogname</code> -
      +49   *     Set to <code>true</code> if you want the Log instance name to be
      +50   *     included in output messages. Defaults to <code>false</code>.</li>
      +51   * <li><code>org.apache.commons.logging.simplelog.showShortLogname</code> -
      +52   *     Set to <code>true</code> if you want the last component of the name to be
      +53   *     included in output messages. Defaults to <code>true</code>.</li>
      +54   * <li><code>org.apache.commons.logging.simplelog.showdatetime</code> -
      +55   *     Set to <code>true</code> if you want the current date and time
      +56   *     to be included in output messages. Default is <code>false</code>.</li>
      +57   * <li><code>org.apache.commons.logging.simplelog.dateTimeFormat</code> -
      +58   *     The date and time format to be used in the output messages.
      +59   *     The pattern describing the date and time format is the same that is
      +60   *     used in <code>java.text.SimpleDateFormat</code>. If the format is not
      +61   *     specified or is invalid, the default format is used.
      +62   *     The default format is <code>yyyy/MM/dd HH:mm:ss:SSS zzz</code>.</li>
      +63   * </ul>
      +64   *
      +65   * <p>In addition to looking for system properties with the names specified
      +66   * above, this implementation also checks for a class loader resource named
      +67   * <code>"simplelog.properties"</code>, and includes any matching definitions
      +68   * from this resource (if it exists).</p>
      +69   *
      +70   * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
      +71   * @author Rod Waldhoff
      +72   * @author Robert Burrell Donkin
      +73   *
      +74   * @version $Id: SimpleLog.java 581090 2007-10-01 22:01:06Z dennisl $
      +75   */
      +76  public class SimpleLog implements Log, Serializable {
      +77  
      +78  
      +79      // ------------------------------------------------------- Class Attributes
      +80  
      +81      /** All system properties used by <code>SimpleLog</code> start with this */
      +82      static protected final String systemPrefix =
      +83          "org.apache.commons.logging.simplelog.";
      +84  
      +85      /** Properties loaded from simplelog.properties */
      +86      static protected final Properties simpleLogProps = new Properties();
      +87  
      +88      /** The default format to use when formating dates */
      +89      static protected final String DEFAULT_DATE_TIME_FORMAT =
      +90          "yyyy/MM/dd HH:mm:ss:SSS zzz";
      +91  
      +92      /** Include the instance name in the log message? */
      +93      static protected boolean showLogName = false;
      +94      /** Include the short name ( last component ) of the logger in the log
      +95       *  message. Defaults to true - otherwise we'll be lost in a flood of
      +96       *  messages without knowing who sends them.
      +97       */
      +98      static protected boolean showShortName = true;
      +99      /** Include the current time in the log message */
      +100     static protected boolean showDateTime = false;
      +101     /** The date and time format to use in the log message */
      +102     static protected String dateTimeFormat = DEFAULT_DATE_TIME_FORMAT;
      +103 
      +104     /**
      +105      * Used to format times.
      +106      * <p>
      +107      * Any code that accesses this object should first obtain a lock on it,
      +108      * ie use synchronized(dateFormatter); this requirement was introduced
      +109      * in 1.1.1 to fix an existing thread safety bug (SimpleDateFormat.format
      +110      * is not thread-safe).
      +111      */
      +112     static protected DateFormat dateFormatter = null;
      +113 
      +114     // ---------------------------------------------------- Log Level Constants
      +115 
      +116 
      +117     /** "Trace" level logging. */
      +118     public static final int LOG_LEVEL_TRACE  = 1;
      +119     /** "Debug" level logging. */
      +120     public static final int LOG_LEVEL_DEBUG  = 2;
      +121     /** "Info" level logging. */
      +122     public static final int LOG_LEVEL_INFO   = 3;
      +123     /** "Warn" level logging. */
      +124     public static final int LOG_LEVEL_WARN   = 4;
      +125     /** "Error" level logging. */
      +126     public static final int LOG_LEVEL_ERROR  = 5;
      +127     /** "Fatal" level logging. */
      +128     public static final int LOG_LEVEL_FATAL  = 6;
      +129 
      +130     /** Enable all logging levels */
      +131     public static final int LOG_LEVEL_ALL    = (LOG_LEVEL_TRACE - 1);
      +132 
      +133     /** Enable no logging levels */
      +134     public static final int LOG_LEVEL_OFF    = (LOG_LEVEL_FATAL + 1);
      +135 
      +136     // ------------------------------------------------------------ Initializer
      +137 
      +138     private static String getStringProperty(String name) {
      +139         String prop = null;
      +140         try {
      +141             prop = System.getProperty(name);
      +142         } catch (SecurityException e) {
      +143             ; // Ignore
      +144         }
      +145         return (prop == null) ? simpleLogProps.getProperty(name) : prop;
      +146     }
      +147 
      +148     private static String getStringProperty(String name, String dephault) {
      +149         String prop = getStringProperty(name);
      +150         return (prop == null) ? dephault : prop;
      +151     }
      +152 
      +153     private static boolean getBooleanProperty(String name, boolean dephault) {
      +154         String prop = getStringProperty(name);
      +155         return (prop == null) ? dephault : "true".equalsIgnoreCase(prop);
      +156     }
      +157 
      +158     // Initialize class attributes.
      +159     // Load properties file, if found.
      +160     // Override with system properties.
      +161     static {
      +162         // Add props from the resource simplelog.properties
      +163         InputStream in = getResourceAsStream("simplelog.properties");
      +164         if(null != in) {
      +165             try {
      +166                 simpleLogProps.load(in);
      +167                 in.close();
      +168             } catch(java.io.IOException e) {
      +169                 // ignored
      +170             }
      +171         }
      +172 
      +173         showLogName = getBooleanProperty( systemPrefix + "showlogname", showLogName);
      +174         showShortName = getBooleanProperty( systemPrefix + "showShortLogname", showShortName);
      +175         showDateTime = getBooleanProperty( systemPrefix + "showdatetime", showDateTime);
      +176 
      +177         if(showDateTime) {
      +178             dateTimeFormat = getStringProperty(systemPrefix + "dateTimeFormat",
      +179                                                dateTimeFormat);
      +180             try {
      +181                 dateFormatter = new SimpleDateFormat(dateTimeFormat);
      +182             } catch(IllegalArgumentException e) {
      +183                 // If the format pattern is invalid - use the default format
      +184                 dateTimeFormat = DEFAULT_DATE_TIME_FORMAT;
      +185                 dateFormatter = new SimpleDateFormat(dateTimeFormat);
      +186             }
      +187         }
      +188     }
      +189 
      +190     // ------------------------------------------------------------- Attributes
      +191 
      +192     /** The name of this simple log instance */
      +193     protected String logName = null;
      +194     /** The current log level */
      +195     protected int currentLogLevel;
      +196     /** The short name of this simple log instance */
      +197     private String shortLogName = null;
      +198 
      +199 
      +200     // ------------------------------------------------------------ Constructor
      +201 
      +202     /**
      +203      * Construct a simple log with given name.
      +204      *
      +205      * @param name log name
      +206      */
      +207     public SimpleLog(String name) {
      +208 
      +209         logName = name;
      +210 
      +211         // Set initial log level
      +212         // Used to be: set default log level to ERROR
      +213         // IMHO it should be lower, but at least info ( costin ).
      +214         setLevel(SimpleLog.LOG_LEVEL_INFO);
      +215 
      +216         // Set log level from properties
      +217         String lvl = getStringProperty(systemPrefix + "log." + logName);
      +218         int i = String.valueOf(name).lastIndexOf(".");
      +219         while(null == lvl && i > -1) {
      +220             name = name.substring(0,i);
      +221             lvl = getStringProperty(systemPrefix + "log." + name);
      +222             i = String.valueOf(name).lastIndexOf(".");
      +223         }
      +224 
      +225         if(null == lvl) {
      +226             lvl =  getStringProperty(systemPrefix + "defaultlog");
      +227         }
      +228 
      +229         if("all".equalsIgnoreCase(lvl)) {
      +230             setLevel(SimpleLog.LOG_LEVEL_ALL);
      +231         } else if("trace".equalsIgnoreCase(lvl)) {
      +232             setLevel(SimpleLog.LOG_LEVEL_TRACE);
      +233         } else if("debug".equalsIgnoreCase(lvl)) {
      +234             setLevel(SimpleLog.LOG_LEVEL_DEBUG);
      +235         } else if("info".equalsIgnoreCase(lvl)) {
      +236             setLevel(SimpleLog.LOG_LEVEL_INFO);
      +237         } else if("warn".equalsIgnoreCase(lvl)) {
      +238             setLevel(SimpleLog.LOG_LEVEL_WARN);
      +239         } else if("error".equalsIgnoreCase(lvl)) {
      +240             setLevel(SimpleLog.LOG_LEVEL_ERROR);
      +241         } else if("fatal".equalsIgnoreCase(lvl)) {
      +242             setLevel(SimpleLog.LOG_LEVEL_FATAL);
      +243         } else if("off".equalsIgnoreCase(lvl)) {
      +244             setLevel(SimpleLog.LOG_LEVEL_OFF);
      +245         }
      +246 
      +247     }
      +248 
      +249 
      +250     // -------------------------------------------------------- Properties
      +251 
      +252     /**
      +253      * <p> Set logging level. </p>
      +254      *
      +255      * @param currentLogLevel new logging level
      +256      */
      +257     public void setLevel(int currentLogLevel) {
      +258 
      +259         this.currentLogLevel = currentLogLevel;
      +260 
      +261     }
      +262 
      +263 
      +264     /**
      +265      * <p> Get logging level. </p>
      +266      */
      +267     public int getLevel() {
      +268 
      +269         return currentLogLevel;
      +270     }
      +271 
      +272 
      +273     // -------------------------------------------------------- Logging Methods
      +274 
      +275 
      +276     /**
      +277      * <p> Do the actual logging.
      +278      * This method assembles the message
      +279      * and then calls <code>write()</code> to cause it to be written.</p>
      +280      *
      +281      * @param type One of the LOG_LEVEL_XXX constants defining the log level
      +282      * @param message The message itself (typically a String)
      +283      * @param t The exception whose stack trace should be logged
      +284      */
      +285     protected void log(int type, Object message, Throwable t) {
      +286         // Use a string buffer for better performance
      +287         StringBuffer buf = new StringBuffer();
      +288 
      +289         // Append date-time if so configured
      +290         if(showDateTime) {
      +291             Date now = new Date();
      +292             String dateText;
      +293             synchronized(dateFormatter) {
      +294                 dateText = dateFormatter.format(now);
      +295             }
      +296             buf.append(dateText);
      +297             buf.append(" ");
      +298         }
      +299 
      +300         // Append a readable representation of the log level
      +301         switch(type) {
      +302             case SimpleLog.LOG_LEVEL_TRACE: buf.append("[TRACE] "); break;
      +303             case SimpleLog.LOG_LEVEL_DEBUG: buf.append("[DEBUG] "); break;
      +304             case SimpleLog.LOG_LEVEL_INFO:  buf.append("[INFO] ");  break;
      +305             case SimpleLog.LOG_LEVEL_WARN:  buf.append("[WARN] ");  break;
      +306             case SimpleLog.LOG_LEVEL_ERROR: buf.append("[ERROR] "); break;
      +307             case SimpleLog.LOG_LEVEL_FATAL: buf.append("[FATAL] "); break;
      +308         }
      +309 
      +310         // Append the name of the log instance if so configured
      +311         if( showShortName) {
      +312             if( shortLogName==null ) {
      +313                 // Cut all but the last component of the name for both styles
      +314                 shortLogName = logName.substring(logName.lastIndexOf(".") + 1);
      +315                 shortLogName =
      +316                     shortLogName.substring(shortLogName.lastIndexOf("/") + 1);
      +317             }
      +318             buf.append(String.valueOf(shortLogName)).append(" - ");
      +319         } else if(showLogName) {
      +320             buf.append(String.valueOf(logName)).append(" - ");
      +321         }
      +322 
      +323         // Append the message
      +324         buf.append(String.valueOf(message));
      +325 
      +326         // Append stack trace if not null
      +327         if(t != null) {
      +328             buf.append(" <");
      +329             buf.append(t.toString());
      +330             buf.append(">");
      +331 
      +332             java.io.StringWriter sw= new java.io.StringWriter(1024);
      +333             java.io.PrintWriter pw= new java.io.PrintWriter(sw);
      +334             t.printStackTrace(pw);
      +335             pw.close();
      +336             buf.append(sw.toString());
      +337         }
      +338 
      +339         // Print to the appropriate destination
      +340         write(buf);
      +341 
      +342     }
      +343 
      +344 
      +345     /**
      +346      * <p>Write the content of the message accumulated in the specified
      +347      * <code>StringBuffer</code> to the appropriate output destination.  The
      +348      * default implementation writes to <code>System.err</code>.</p>
      +349      *
      +350      * @param buffer A <code>StringBuffer</code> containing the accumulated
      +351      *  text to be logged
      +352      */
      +353     protected void write(StringBuffer buffer) {
      +354 
      +355         System.err.println(buffer.toString());
      +356 
      +357     }
      +358 
      +359 
      +360     /**
      +361      * Is the given log level currently enabled?
      +362      *
      +363      * @param logLevel is this level enabled?
      +364      */
      +365     protected boolean isLevelEnabled(int logLevel) {
      +366         // log level are numerically ordered so can use simple numeric
      +367         // comparison
      +368         return (logLevel >= currentLogLevel);
      +369     }
      +370 
      +371 
      +372     // -------------------------------------------------------- Log Implementation
      +373 
      +374 
      +375     /**
      +376      * Logs a message with 
      +377      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG</code>.
      +378      *
      +379      * @param message to log
      +380      * @see org.apache.commons.logging.Log#debug(Object)
      +381      */
      +382     public final void debug(Object message) {
      +383 
      +384         if (isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG)) {
      +385             log(SimpleLog.LOG_LEVEL_DEBUG, message, null);
      +386         }
      +387     }
      +388 
      +389 
      +390     /**
      +391      * Logs a message with 
      +392      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG</code>.
      +393      *
      +394      * @param message to log
      +395      * @param t log this cause
      +396      * @see org.apache.commons.logging.Log#debug(Object, Throwable)
      +397      */
      +398     public final void debug(Object message, Throwable t) {
      +399 
      +400         if (isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG)) {
      +401             log(SimpleLog.LOG_LEVEL_DEBUG, message, t);
      +402         }
      +403     }
      +404 
      +405 
      +406     /**
      +407      * Logs a message with 
      +408      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE</code>.
      +409      *
      +410      * @param message to log
      +411      * @see org.apache.commons.logging.Log#trace(Object)
      +412      */
      +413     public final void trace(Object message) {
      +414 
      +415         if (isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE)) {
      +416             log(SimpleLog.LOG_LEVEL_TRACE, message, null);
      +417         }
      +418     }
      +419 
      +420 
      +421     /**
      +422      * Logs a message with 
      +423      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE</code>.
      +424      *
      +425      * @param message to log
      +426      * @param t log this cause
      +427      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
      +428      */
      +429     public final void trace(Object message, Throwable t) {
      +430 
      +431         if (isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE)) {
      +432             log(SimpleLog.LOG_LEVEL_TRACE, message, t);
      +433         }
      +434     }
      +435 
      +436 
      +437     /**
      +438      * Logs a message with 
      +439      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO</code>.
      +440      *
      +441      * @param message to log
      +442      * @see org.apache.commons.logging.Log#info(Object)
      +443      */
      +444     public final void info(Object message) {
      +445 
      +446         if (isLevelEnabled(SimpleLog.LOG_LEVEL_INFO)) {
      +447             log(SimpleLog.LOG_LEVEL_INFO,message,null);
      +448         }
      +449     }
      +450 
      +451 
      +452     /**
      +453      * Logs a message with 
      +454      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO</code>.
      +455      *
      +456      * @param message to log
      +457      * @param t log this cause
      +458      * @see org.apache.commons.logging.Log#info(Object, Throwable)
      +459      */
      +460     public final void info(Object message, Throwable t) {
      +461 
      +462         if (isLevelEnabled(SimpleLog.LOG_LEVEL_INFO)) {
      +463             log(SimpleLog.LOG_LEVEL_INFO, message, t);
      +464         }
      +465     }
      +466 
      +467 
      +468     /**
      +469      * Logs a message with 
      +470      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN</code>.
      +471      *
      +472      * @param message to log
      +473      * @see org.apache.commons.logging.Log#warn(Object)
      +474      */
      +475     public final void warn(Object message) {
      +476 
      +477         if (isLevelEnabled(SimpleLog.LOG_LEVEL_WARN)) {
      +478             log(SimpleLog.LOG_LEVEL_WARN, message, null);
      +479         }
      +480     }
      +481 
      +482 
      +483     /**
      +484      * Logs a message with 
      +485      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN</code>.
      +486      *
      +487      * @param message to log
      +488      * @param t log this cause
      +489      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
      +490      */
      +491     public final void warn(Object message, Throwable t) {
      +492 
      +493         if (isLevelEnabled(SimpleLog.LOG_LEVEL_WARN)) {
      +494             log(SimpleLog.LOG_LEVEL_WARN, message, t);
      +495         }
      +496     }
      +497 
      +498 
      +499     /**
      +500      * Logs a message with 
      +501      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR</code>.
      +502      *
      +503      * @param message to log
      +504      * @see org.apache.commons.logging.Log#error(Object)
      +505      */
      +506     public final void error(Object message) {
      +507 
      +508         if (isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR)) {
      +509             log(SimpleLog.LOG_LEVEL_ERROR, message, null);
      +510         }
      +511     }
      +512 
      +513 
      +514     /**
      +515      * Logs a message with 
      +516      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR</code>.
      +517      *
      +518      * @param message to log
      +519      * @param t log this cause
      +520      * @see org.apache.commons.logging.Log#error(Object, Throwable)
      +521      */
      +522     public final void error(Object message, Throwable t) {
      +523 
      +524         if (isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR)) {
      +525             log(SimpleLog.LOG_LEVEL_ERROR, message, t);
      +526         }
      +527     }
      +528 
      +529 
      +530     /**
      +531      * Log a message with 
      +532      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL</code>.
      +533      *
      +534      * @param message to log
      +535      * @see org.apache.commons.logging.Log#fatal(Object)
      +536      */
      +537     public final void fatal(Object message) {
      +538 
      +539         if (isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL)) {
      +540             log(SimpleLog.LOG_LEVEL_FATAL, message, null);
      +541         }
      +542     }
      +543 
      +544 
      +545     /**
      +546      * Logs a message with 
      +547      * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL</code>.
      +548      *
      +549      * @param message to log
      +550      * @param t log this cause
      +551      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
      +552      */
      +553     public final void fatal(Object message, Throwable t) {
      +554 
      +555         if (isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL)) {
      +556             log(SimpleLog.LOG_LEVEL_FATAL, message, t);
      +557         }
      +558     }
      +559 
      +560 
      +561     /**
      +562      * <p> Are debug messages currently enabled? </p>
      +563      *
      +564      * <p> This allows expensive operations such as <code>String</code>
      +565      * concatenation to be avoided when the message will be ignored by the
      +566      * logger. </p>
      +567      */
      +568     public final boolean isDebugEnabled() {
      +569 
      +570         return isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG);
      +571     }
      +572 
      +573 
      +574     /**
      +575      * <p> Are error messages currently enabled? </p>
      +576      *
      +577      * <p> This allows expensive operations such as <code>String</code>
      +578      * concatenation to be avoided when the message will be ignored by the
      +579      * logger. </p>
      +580      */
      +581     public final boolean isErrorEnabled() {
      +582 
      +583         return isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR);
      +584     }
      +585 
      +586 
      +587     /**
      +588      * <p> Are fatal messages currently enabled? </p>
      +589      *
      +590      * <p> This allows expensive operations such as <code>String</code>
      +591      * concatenation to be avoided when the message will be ignored by the
      +592      * logger. </p>
      +593      */
      +594     public final boolean isFatalEnabled() {
      +595 
      +596         return isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL);
      +597     }
      +598 
      +599 
      +600     /**
      +601      * <p> Are info messages currently enabled? </p>
      +602      *
      +603      * <p> This allows expensive operations such as <code>String</code>
      +604      * concatenation to be avoided when the message will be ignored by the
      +605      * logger. </p>
      +606      */
      +607     public final boolean isInfoEnabled() {
      +608 
      +609         return isLevelEnabled(SimpleLog.LOG_LEVEL_INFO);
      +610     }
      +611 
      +612 
      +613     /**
      +614      * <p> Are trace messages currently enabled? </p>
      +615      *
      +616      * <p> This allows expensive operations such as <code>String</code>
      +617      * concatenation to be avoided when the message will be ignored by the
      +618      * logger. </p>
      +619      */
      +620     public final boolean isTraceEnabled() {
      +621 
      +622         return isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE);
      +623     }
      +624 
      +625 
      +626     /**
      +627      * <p> Are warn messages currently enabled? </p>
      +628      *
      +629      * <p> This allows expensive operations such as <code>String</code>
      +630      * concatenation to be avoided when the message will be ignored by the
      +631      * logger. </p>
      +632      */
      +633     public final boolean isWarnEnabled() {
      +634 
      +635         return isLevelEnabled(SimpleLog.LOG_LEVEL_WARN);
      +636     }
      +637 
      +638 
      +639     /**
      +640      * Return the thread context class loader if available.
      +641      * Otherwise return null.
      +642      *
      +643      * The thread context class loader is available for JDK 1.2
      +644      * or later, if certain security conditions are met.
      +645      *
      +646      * @exception LogConfigurationException if a suitable class loader
      +647      * cannot be identified.
      +648      */
      +649     private static ClassLoader getContextClassLoader()
      +650     {
      +651         ClassLoader classLoader = null;
      +652 
      +653         if (classLoader == null) {
      +654             try {
      +655                 // Are we running on a JDK 1.2 or later system?
      +656                 Method method = Thread.class.getMethod("getContextClassLoader",
      +657                         (Class[]) null);
      +658 
      +659                 // Get the thread context class loader (if there is one)
      +660                 try {
      +661                     classLoader = (ClassLoader)method.invoke(Thread.currentThread(), 
      +662                             (Class[]) null);
      +663                 } catch (IllegalAccessException e) {
      +664                     ;  // ignore
      +665                 } catch (InvocationTargetException e) {
      +666                     /**
      +667                      * InvocationTargetException is thrown by 'invoke' when
      +668                      * the method being invoked (getContextClassLoader) throws
      +669                      * an exception.
      +670                      *
      +671                      * getContextClassLoader() throws SecurityException when
      +672                      * the context class loader isn't an ancestor of the
      +673                      * calling class's class loader, or if security
      +674                      * permissions are restricted.
      +675                      *
      +676                      * In the first case (not related), we want to ignore and
      +677                      * keep going.  We cannot help but also ignore the second
      +678                      * with the logic below, but other calls elsewhere (to
      +679                      * obtain a class loader) will trigger this exception where
      +680                      * we can make a distinction.
      +681                      */
      +682                     if (e.getTargetException() instanceof SecurityException) {
      +683                         ;  // ignore
      +684                     } else {
      +685                         // Capture 'e.getTargetException()' exception for details
      +686                         // alternate: log 'e.getTargetException()', and pass back 'e'.
      +687                         throw new LogConfigurationException
      +688                             ("Unexpected InvocationTargetException", e.getTargetException());
      +689                     }
      +690                 }
      +691             } catch (NoSuchMethodException e) {
      +692                 // Assume we are running on JDK 1.1
      +693                 ;  // ignore
      +694             }
      +695         }
      +696 
      +697         if (classLoader == null) {
      +698             classLoader = SimpleLog.class.getClassLoader();
      +699         }
      +700 
      +701         // Return the selected class loader
      +702         return classLoader;
      +703     }
      +704 
      +705     private static InputStream getResourceAsStream(final String name)
      +706     {
      +707         return (InputStream)AccessController.doPrivileged(
      +708             new PrivilegedAction() {
      +709                 public Object run() {
      +710                     ClassLoader threadCL = getContextClassLoader();
      +711 
      +712                     if (threadCL != null) {
      +713                         return threadCL.getResourceAsStream(name);
      +714                     } else {
      +715                         return ClassLoader.getSystemResourceAsStream(name);
      +716                     }
      +717                 }
      +718             });
      +719     }
      +720 }
      +721 
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/WeakHashtable.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/WeakHashtable.html new file mode 100644 index 0000000..3e7880b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/WeakHashtable.html @@ -0,0 +1,492 @@ + + + + +WeakHashtable xref + + + +
      +
      +1   /*
      +2    * Licensed to the Apache Software Foundation (ASF) under one or more
      +3    * contributor license agreements.  See the NOTICE file distributed with
      +4    * this work for additional information regarding copyright ownership.
      +5    * The ASF licenses this file to You under the Apache License, Version 2.0
      +6    * (the "License"); you may not use this file except in compliance with
      +7    * the License.  You may obtain a copy of the License at
      +8    * 
      +9    *      http://www.apache.org/licenses/LICENSE-2.0
      +10   * 
      +11   * Unless required by applicable law or agreed to in writing, software
      +12   * distributed under the License is distributed on an "AS IS" BASIS,
      +13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      +14   * See the License for the specific language governing permissions and
      +15   * limitations under the License.
      +16   */ 
      +17  
      +18  
      +19  package org.apache.commons.logging.impl;
      +20  
      +21  import java.lang.ref.ReferenceQueue;
      +22  import java.lang.ref.WeakReference;
      +23  import java.util.*;
      +24  
      +25  /**
      +26   * <p>Implementation of <code>Hashtable</code> that uses <code>WeakReference</code>'s
      +27   * to hold its keys thus allowing them to be reclaimed by the garbage collector.
      +28   * The associated values are retained using strong references.</p>
      +29   *
      +30   * <p>This class follows the symantics of <code>Hashtable</code> as closely as
      +31   * possible. It therefore does not accept null values or keys.</p>
      +32   *
      +33   * <p><strong>Note:</strong>
      +34   * This is <em>not</em> intended to be a general purpose hash table replacement.
      +35   * This implementation is also tuned towards a particular purpose: for use as a replacement
      +36   * for <code>Hashtable</code> in <code>LogFactory</code>. This application requires
      +37   * good liveliness for <code>get</code> and <code>put</code>. Various tradeoffs
      +38   * have been made with this in mind.
      +39   * </p>
      +40   * <p>
      +41   * <strong>Usage:</strong> typical use case is as a drop-in replacement 
      +42   * for the <code>Hashtable</code> used in <code>LogFactory</code> for J2EE enviroments
      +43   * running 1.3+ JVMs. Use of this class <i>in most cases</i> (see below) will
      +44   * allow classloaders to be collected by the garbage collector without the need 
      +45   * to call {@link org.apache.commons.logging.LogFactory#release(ClassLoader) LogFactory.release(ClassLoader)}.
      +46   * </p>
      +47   *
      +48   * <p><code>org.apache.commons.logging.LogFactory</code> checks whether this class
      +49   * can be supported by the current JVM, and if so then uses it to store
      +50   * references to the <code>LogFactory</code> implementationd it loads 
      +51   * (rather than using a standard Hashtable instance). 
      +52   * Having this class used instead of <code>Hashtable</code> solves
      +53   * certain issues related to dynamic reloading of applications in J2EE-style
      +54   * environments. However this class requires java 1.3 or later (due to its use
      +55   * of <code>java.lang.ref.WeakReference</code> and associates).
      +56   * And by the way, this extends <code>Hashtable</code> rather than <code>HashMap</code>
      +57   * for backwards compatibility reasons. See the documentation
      +58   * for method <code>LogFactory.createFactoryStore</code> for more details.</p>
      +59   *
      +60   * <p>The reason all this is necessary is due to a issue which
      +61   * arises during hot deploy in a J2EE-like containers. 
      +62   * Each component running in the container owns one or more classloaders; when
      +63   * the component loads a LogFactory instance via the component classloader
      +64   * a reference to it gets stored in the static LogFactory.factories member,
      +65   * keyed by the component's classloader so different components don't
      +66   * stomp on each other. When the component is later unloaded, the container
      +67   * sets the component's classloader to null with the intent that all the 
      +68   * component's classes get garbage-collected. However there's still a
      +69   * reference to the component's classloader from a key in the "global"
      +70   * <code>LogFactory</code>'s factories member! If <code>LogFactory.release()</code>
      +71   * is called whenever component is unloaded, the classloaders will be correctly
      +72   * garbage collected; this <i>should</i> be done by any container that 
      +73   * bundles commons-logging by default. However, holding the classloader
      +74   * references weakly ensures that the classloader will be garbage collected
      +75   * without the container performing this step. </p>
      +76   *
      +77   * <p>
      +78   * <strong>Limitations:</strong>
      +79   * There is still one (unusual) scenario in which a component will not 
      +80   * be correctly unloaded without an explicit release. Though weak references
      +81   * are used for its keys, it is necessary to use strong references for its values.
      +82   * </p>
      +83   * 
      +84   * <p> If the abstract class <code>LogFactory</code> is 
      +85   * loaded by the container classloader but a subclass of 
      +86   * <code>LogFactory</code> [LogFactory1] is loaded by the component's 
      +87   * classloader and an instance stored in the static map associated with the
      +88   * base LogFactory class, then there is a strong reference from the LogFactory
      +89   * class to the LogFactory1 instance (as normal) and a strong reference from
      +90   * the LogFactory1 instance to the component classloader via
      +91   * <code>getClass().getClassLoader()</code>. This chain of references will prevent 
      +92   * collection of the child classloader.</p>
      +93   *
      +94   * <p>
      +95   * Such a situation occurs when the commons-logging.jar is
      +96   * loaded by a parent classloader (e.g. a server level classloader in a
      +97   * servlet container) and a custom <code>LogFactory</code> implementation is
      +98   * loaded by a child classloader (e.g. a web app classloader).</p>
      +99   * 
      +100  * <p>To avoid this scenario, ensure
      +101  * that any custom LogFactory subclass is loaded by the same classloader as 
      +102  * the base <code>LogFactory</code>. Creating custom LogFactory subclasses is,
      +103  * however, rare. The standard LogFactoryImpl class should be sufficient
      +104  * for most or all users.</p>
      +105  *
      +106  *
      +107  * @author Brian Stansberry
      +108  * 
      +109  * @since 1.1
      +110  */
      +111 public final class WeakHashtable extends Hashtable {
      +112 
      +113     /** 
      +114      * The maximum number of times put() or remove() can be called before
      +115      * the map will be purged of all cleared entries.
      +116      */
      +117     private static final int MAX_CHANGES_BEFORE_PURGE = 100;
      +118     
      +119     /** 
      +120      * The maximum number of times put() or remove() can be called before
      +121      * the map will be purged of one cleared entry.
      +122      */
      +123     private static final int PARTIAL_PURGE_COUNT     = 10;
      +124     
      +125     /* ReferenceQueue we check for gc'd keys */
      +126     private ReferenceQueue queue = new ReferenceQueue();
      +127     /* Counter used to control how often we purge gc'd entries */
      +128     private int changeCount = 0;
      +129     
      +130     /**
      +131      * Constructs a WeakHashtable with the Hashtable default
      +132      * capacity and load factor.
      +133      */
      +134     public WeakHashtable() {}
      +135     
      +136     
      +137     /**
      +138      *@see Hashtable
      +139      */
      +140     public boolean containsKey(Object key) {
      +141         // purge should not be required
      +142         Referenced referenced = new Referenced(key);
      +143         return super.containsKey(referenced);
      +144     }
      +145     
      +146     /**
      +147      *@see Hashtable
      +148      */
      +149     public Enumeration elements() {
      +150         purge();
      +151         return super.elements();
      +152     }
      +153     
      +154     /**
      +155      *@see Hashtable
      +156      */
      +157     public Set entrySet() {
      +158         purge();
      +159         Set referencedEntries = super.entrySet();
      +160         Set unreferencedEntries = new HashSet();
      +161         for (Iterator it=referencedEntries.iterator(); it.hasNext();) {
      +162             Map.Entry entry = (Map.Entry) it.next();
      +163             Referenced referencedKey = (Referenced) entry.getKey();
      +164             Object key = referencedKey.getValue();
      +165             Object value = entry.getValue();
      +166             if (key != null) {
      +167                 Entry dereferencedEntry = new Entry(key, value);
      +168                 unreferencedEntries.add(dereferencedEntry);
      +169             }
      +170         }
      +171         return unreferencedEntries;
      +172     }
      +173     
      +174     /**
      +175      *@see Hashtable
      +176      */
      +177     public Object get(Object key) {
      +178         // for performance reasons, no purge
      +179         Referenced referenceKey = new Referenced(key);
      +180         return super.get(referenceKey);
      +181     }
      +182     
      +183     /**
      +184      *@see Hashtable
      +185      */
      +186     public Enumeration keys() {
      +187         purge();
      +188         final Enumeration enumer = super.keys();
      +189         return new Enumeration() {
      +190             public boolean hasMoreElements() {
      +191                 return enumer.hasMoreElements();
      +192             }
      +193             public Object nextElement() {
      +194                  Referenced nextReference = (Referenced) enumer.nextElement();
      +195                  return nextReference.getValue();
      +196             }
      +197         };
      +198     }
      +199     
      +200         
      +201     /**
      +202      *@see Hashtable
      +203      */
      +204     public Set keySet() {
      +205         purge();
      +206         Set referencedKeys = super.keySet();
      +207         Set unreferencedKeys = new HashSet();
      +208         for (Iterator it=referencedKeys.iterator(); it.hasNext();) {
      +209             Referenced referenceKey = (Referenced) it.next();
      +210             Object keyValue = referenceKey.getValue();
      +211             if (keyValue != null) {
      +212                 unreferencedKeys.add(keyValue);
      +213             }
      +214         }
      +215         return unreferencedKeys;
      +216     }
      +217     
      +218     /**
      +219      *@see Hashtable
      +220      */    
      +221     public Object put(Object key, Object value) {
      +222         // check for nulls, ensuring symantics match superclass
      +223         if (key == null) {
      +224             throw new NullPointerException("Null keys are not allowed");
      +225         }
      +226         if (value == null) {
      +227             throw new NullPointerException("Null values are not allowed");
      +228         }
      +229 
      +230         // for performance reasons, only purge every 
      +231         // MAX_CHANGES_BEFORE_PURGE times
      +232         if (changeCount++ > MAX_CHANGES_BEFORE_PURGE) {
      +233             purge();
      +234             changeCount = 0;
      +235         }
      +236         // do a partial purge more often
      +237         else if ((changeCount % PARTIAL_PURGE_COUNT) == 0) {
      +238             purgeOne();
      +239         }
      +240         
      +241         Referenced keyRef = new Referenced(key, queue);
      +242         return super.put(keyRef, value);
      +243     }
      +244     
      +245     /**
      +246      *@see Hashtable
      +247      */    
      +248     public void putAll(Map t) {
      +249         if (t != null) {
      +250             Set entrySet = t.entrySet();
      +251             for (Iterator it=entrySet.iterator(); it.hasNext();) {
      +252                 Map.Entry entry = (Map.Entry) it.next();
      +253                 put(entry.getKey(), entry.getValue());
      +254             }
      +255         }
      +256     }
      +257     
      +258     /**
      +259      *@see Hashtable
      +260      */      
      +261     public Collection values() {
      +262         purge();
      +263         return super.values();
      +264     }
      +265     
      +266     /**
      +267      *@see Hashtable
      +268      */     
      +269     public Object remove(Object key) {
      +270         // for performance reasons, only purge every 
      +271         // MAX_CHANGES_BEFORE_PURGE times
      +272         if (changeCount++ > MAX_CHANGES_BEFORE_PURGE) {
      +273             purge();
      +274             changeCount = 0;
      +275         }
      +276         // do a partial purge more often
      +277         else if ((changeCount % PARTIAL_PURGE_COUNT) == 0) {
      +278             purgeOne();
      +279         }
      +280         return super.remove(new Referenced(key));
      +281     }
      +282     
      +283     /**
      +284      *@see Hashtable
      +285      */    
      +286     public boolean isEmpty() {
      +287         purge();
      +288         return super.isEmpty();
      +289     }
      +290     
      +291     /**
      +292      *@see Hashtable
      +293      */    
      +294     public int size() {
      +295         purge();
      +296         return super.size();
      +297     }
      +298     
      +299     /**
      +300      *@see Hashtable
      +301      */        
      +302     public String toString() {
      +303         purge();
      +304         return super.toString();
      +305     }
      +306     
      +307     /**
      +308      * @see Hashtable
      +309      */
      +310     protected void rehash() {
      +311         // purge here to save the effort of rehashing dead entries
      +312         purge();
      +313         super.rehash();
      +314     }
      +315     
      +316     /**
      +317      * Purges all entries whose wrapped keys
      +318      * have been garbage collected.
      +319      */
      +320     private void purge() {
      +321         synchronized (queue) {
      +322             WeakKey key;
      +323             while ((key = (WeakKey) queue.poll()) != null) {
      +324                 super.remove(key.getReferenced());
      +325             }
      +326         }
      +327     }
      +328     
      +329     /**
      +330      * Purges one entry whose wrapped key 
      +331      * has been garbage collected.
      +332      */
      +333     private void purgeOne() {
      +334         
      +335         synchronized (queue) {
      +336             WeakKey key = (WeakKey) queue.poll();
      +337             if (key != null) {
      +338                 super.remove(key.getReferenced());
      +339             }
      +340         }
      +341     }
      +342     
      +343     /** Entry implementation */
      +344     private final static class Entry implements Map.Entry {
      +345     
      +346         private final Object key;
      +347         private final Object value;
      +348         
      +349         private Entry(Object key, Object value) {
      +350             this.key = key;
      +351             this.value = value;
      +352         }
      +353     
      +354         public boolean equals(Object o) {
      +355             boolean result = false;
      +356             if (o != null && o instanceof Map.Entry) {
      +357                 Map.Entry entry = (Map.Entry) o;
      +358                 result =    (getKey()==null ?
      +359                                             entry.getKey() == null : 
      +360                                             getKey().equals(entry.getKey()))
      +361                             &&
      +362                             (getValue()==null ?
      +363                                             entry.getValue() == null : 
      +364                                             getValue().equals(entry.getValue()));
      +365             }
      +366             return result;
      +367         } 
      +368         
      +369         public int hashCode() {
      +370 
      +371             return (getKey()==null ? 0 : getKey().hashCode()) ^
      +372                 (getValue()==null ? 0 : getValue().hashCode());
      +373         }
      +374 
      +375         public Object setValue(Object value) {
      +376             throw new UnsupportedOperationException("Entry.setValue is not supported.");
      +377         }
      +378         
      +379         public Object getValue() {
      +380             return value;
      +381         }
      +382         
      +383         public Object getKey() {
      +384             return key;
      +385         }
      +386     }
      +387     
      +388     
      +389     /** Wrapper giving correct symantics for equals and hashcode */
      +390     private final static class Referenced {
      +391         
      +392         private final WeakReference reference;
      +393         private final int           hashCode;
      +394 
      +395         /**
      +396          * 
      +397          * @throws NullPointerException if referant is <code>null</code>
      +398          */        
      +399         private Referenced(Object referant) {
      +400             reference = new WeakReference(referant);
      +401             // Calc a permanent hashCode so calls to Hashtable.remove()
      +402             // work if the WeakReference has been cleared
      +403             hashCode  = referant.hashCode();
      +404         }
      +405         
      +406         /**
      +407          * 
      +408          * @throws NullPointerException if key is <code>null</code>
      +409          */
      +410         private Referenced(Object key, ReferenceQueue queue) {
      +411             reference = new WeakKey(key, queue, this);
      +412             // Calc a permanent hashCode so calls to Hashtable.remove()
      +413             // work if the WeakReference has been cleared
      +414             hashCode  = key.hashCode();
      +415 
      +416         }
      +417         
      +418         public int hashCode() {
      +419             return hashCode;
      +420         }
      +421         
      +422         private Object getValue() {
      +423             return reference.get();
      +424         }
      +425         
      +426         public boolean equals(Object o) {
      +427             boolean result = false;
      +428             if (o instanceof Referenced) {
      +429                 Referenced otherKey = (Referenced) o;
      +430                 Object thisKeyValue = getValue();
      +431                 Object otherKeyValue = otherKey.getValue();
      +432                 if (thisKeyValue == null) {                     
      +433                     result = (otherKeyValue == null);
      +434                     
      +435                     // Since our hashcode was calculated from the original
      +436                     // non-null referant, the above check breaks the 
      +437                     // hashcode/equals contract, as two cleared Referenced
      +438                     // objects could test equal but have different hashcodes.
      +439                     // We can reduce (not eliminate) the chance of this
      +440                     // happening by comparing hashcodes.
      +441                     if (result == true) {
      +442                         result = (this.hashCode() == otherKey.hashCode());
      +443                     }
      +444                     // In any case, as our c'tor does not allow null referants
      +445                     // and Hashtable does not do equality checks between 
      +446                     // existing keys, normal hashtable operations should never 
      +447                     // result in an equals comparison between null referants
      +448                 }
      +449                 else
      +450                 {
      +451                     result = thisKeyValue.equals(otherKeyValue);
      +452                 }
      +453             }
      +454             return result;
      +455         }
      +456     }
      +457     
      +458     /**
      +459      * WeakReference subclass that holds a hard reference to an
      +460      * associated <code>value</code> and also makes accessible
      +461      * the Referenced object holding it.
      +462      */
      +463     private final static class WeakKey extends WeakReference {
      +464 
      +465         private final Referenced referenced;
      +466         
      +467         private WeakKey(Object key, 
      +468                         ReferenceQueue queue,
      +469                         Referenced referenced) {
      +470             super(key, queue);
      +471             this.referenced = referenced;
      +472         }
      +473         
      +474         private Referenced getReferenced() {
      +475             return referenced;
      +476         }
      +477      }
      +478 }
      +
      +
      + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-frame.html new file mode 100644 index 0000000..7fdc5f3 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-frame.html @@ -0,0 +1,60 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.impl + + + + +

      + org.apache.commons.logging.impl +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-summary.html new file mode 100644 index 0000000..6ee9ed5 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/impl/package-summary.html @@ -0,0 +1,127 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging.impl + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging.impl

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + AvalonLogger +
      + Entry +
      + Jdk13LumberjackLogger +
      + Jdk14Logger +
      + Log4JLogger +
      + LogFactoryImpl +
      + LogKitLogger +
      + NoOpLog +
      + Referenced +
      + ServletContextCleaner +
      + SimpleLog +
      + WeakHashtable +
      + WeakKey +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-frame.html new file mode 100644 index 0000000..8f2f98e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-frame.html @@ -0,0 +1,33 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging + + + + +

      + org.apache.commons.logging +

      + +

      Classes

      + + + + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-summary.html new file mode 100644 index 0000000..514bdf6 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/org/apache/commons/logging/package-summary.html @@ -0,0 +1,82 @@ + + + + + + Commons Logging 1.1.1 Reference Package org.apache.commons.logging + + + +
      + +
      +
      + +
      + +

      Package org.apache.commons.logging

      + + + + + + + + + + + + + + + + + + + + + +
      Class Summary
      + Log +
      + LogConfigurationException +
      + LogFactory +
      + LogSource +
      + +
      + +
      +
      + +
      +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-frame.html new file mode 100644 index 0000000..b8c387f --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-frame.html @@ -0,0 +1,28 @@ + + + + + + Commons Logging 1.1.1 Reference + + + + +

      + All Classes +

      + +

      Packages

      + + + + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-summary.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-summary.html new file mode 100644 index 0000000..ecf2eb4 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/overview-summary.html @@ -0,0 +1,69 @@ + + + + + + Commons Logging 1.1.1 Reference + + + +
      +
        +
      • Overview
      • +
      • Package
      • +
      +
      +
      + +
      + +

      Commons Logging 1.1.1 Reference

      + + + + + + + + + + + + + + + +
      Packages
      + org.apache.commons.logging +
      + org.apache.commons.logging.impl +
      + +
      +
        +
      • Overview
      • +
      • Package
      • +
      +
      +
      + +
      + +
      + Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved. + + \ No newline at end of file diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/stylesheet.css b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/stylesheet.css new file mode 100644 index 0000000..00e6114 --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/xref/stylesheet.css @@ -0,0 +1,116 @@ +/* Javadoc style sheet */ +/* Define colors, fonts and other style attributes here to override the defaults */ +body { + background-color: #fff; + font-family: Arial, Helvetica, sans-serif; +} + +a:link { + color: #00f; +} +a:visited { + color: #00a; +} + +a:active, a:hover { + color: #f30 !important; +} + +ul, li { + list-style-type:none; + margin:0; + padding:0; +} + +table td { + padding: 3px; + border: 1px solid #000; +} +table { + width:100%; + border: 1px solid #000; + border-collapse: collapse; +} + +div.overview { + background-color:#ddd; + padding: 4px 4px 4px 0; +} +div.overview li, div.framenoframe li { + display: inline; +} +div.framenoframe { + text-align: center; + font-size: x-small; +} +div.framenoframe li { + margin: 0 3px 0 3px; +} +div.overview li { + margin:3px 3px 0 3px; + padding: 4px; +} +li.selected { + background-color:#888; + color: #fff; + font-weight: bold; +} + +table.summary { + margin-bottom: 20px; +} +table.summary td, table.summary th { + font-weight: bold; + text-align: left; + padding: 3px; +} +table.summary th { + background-color:#036; + color: #fff; +} +table.summary td { + background-color:#eee; + border: 1px solid black; +} + +em { + color: #A00; +} +em.comment { + color: #390; +} +.string { + color: #009; +} +div#footer { + text-align:center; +} +#overview { + padding:2px; +} + +hr { + height: 1px; + color: #000; +} + +/* JXR style sheet */ +.jxr_comment +{ + color: #390; +} + +.jxr_javadoccomment +{ + color: #A00; +} + +.jxr_string +{ + color: #009; +} + +.jxr_keyword +{ + color: #000; +} diff --git a/store_v1.0.sql b/store_v1.0.sql new file mode 100644 index 0000000..294b5f2 --- /dev/null +++ b/store_v1.0.sql @@ -0,0 +1,157 @@ + + +DROP TABLE IF EXISTS `category`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `category` ( + `cid` varchar(32) NOT NULL, + `cname` varchar(20) DEFAULT NULL, + PRIMARY KEY (`cid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `category` +-- + +LOCK TABLES `category` WRITE; +/*!40000 ALTER TABLE `category` DISABLE KEYS */; +INSERT INTO `category` VALUES ('1','手机数码'),('172934bd636d485c98fd2d3d9cccd409','运动户外'),('2','电脑办公'),('3','家具家居'),('4','鞋靴箱包'),('5','图书音像'),('59f56ba6ccb84cb591c66298766b83b5','aaaa'),('6','母婴孕婴'),('afdba41a139b4320a74904485bdb7719','汽车用品'); +/*!40000 ALTER TABLE `category` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `orderitem` +-- + +DROP TABLE IF EXISTS `orderitem`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orderitem` ( + `itemid` varchar(32) NOT NULL, + `count` int(11) DEFAULT NULL, + `subtotal` double DEFAULT NULL, + `pid` varchar(32) DEFAULT NULL, + `oid` varchar(32) DEFAULT NULL, + PRIMARY KEY (`itemid`), + KEY `fk_0001` (`pid`), + KEY `fk_0002` (`oid`), + CONSTRAINT `fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`), + CONSTRAINT `fk_0002` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `orderitem` +-- + +LOCK TABLES `orderitem` WRITE; +/*!40000 ALTER TABLE `orderitem` DISABLE KEYS */; +/*!40000 ALTER TABLE `orderitem` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `orders` +-- + +DROP TABLE IF EXISTS `orders`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orders` ( + `oid` varchar(32) NOT NULL, + `ordertime` datetime DEFAULT NULL, + `total` double DEFAULT NULL, + `state` int(11) DEFAULT NULL, + `address` varchar(30) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + `telephone` varchar(20) DEFAULT NULL, + `uid` varchar(32) DEFAULT NULL, + PRIMARY KEY (`oid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `orders` +-- + +LOCK TABLES `orders` WRITE; +/*!40000 ALTER TABLE `orders` DISABLE KEYS */; +/*!40000 ALTER TABLE `orders` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `product` +-- + +DROP TABLE IF EXISTS `product`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `product` ( + `pid` varchar(32) NOT NULL, + `pname` varchar(50) DEFAULT NULL, + `market_price` double DEFAULT NULL, + `shop_price` double DEFAULT NULL, + `pimage` varchar(200) DEFAULT NULL, + `pdate` date DEFAULT NULL, + `is_hot` int(11) DEFAULT NULL, + `pdesc` varchar(255) DEFAULT NULL, + `pflag` int(11) DEFAULT NULL, + `cid` varchar(32) DEFAULT NULL, + PRIMARY KEY (`pid`), + KEY `sfk_0001` (`cid`), + CONSTRAINT `sfk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `product` +-- + +LOCK TABLES `product` WRITE; +/*!40000 ALTER TABLE `product` DISABLE KEYS */; +INSERT INTO `product` VALUES ('1','小米 4c 标准版',1399,1299,'products/1/c_0001.jpg','2015-11-02',1,'小米 4c 标准版 全网通 白色 移动联通电信4G手机 双卡双待',0,'1'),('10','华为 Ascend Mate7',2699,2599,'products/1/c_0010.jpg','2015-11-02',1,'华为 Ascend Mate7 月光银 移动4G手机 双卡双待双通6英寸高清大屏,纤薄机身,智能超八核,按压式指纹识别!!选择下方“移动老用户4G飞享合约”,无需换号,还有话费每月返还!',0,'1'),('11','vivo X5Pro',2399,2298,'products/1/c_0014.jpg','2015-11-02',1,'移动联通双4G手机 3G运存版 极光白【购机送蓝牙耳机+蓝牙自拍杆】新升级3G运行内存·双2.5D弧面玻璃·眼球识别技术',0,'1'),('12','努比亚(nubia)My 布拉格',1899,1799,'products/1/c_0013.jpg','2015-11-02',0,'努比亚(nubia)My 布拉格 银白 移动联通4G手机 双卡双待【嗨11,下单立减100】金属机身,快速充电!布拉格相机全新体验!',0,'1'),('13','华为 麦芒4',2599,2499,'products/1/c_0012.jpg','2015-11-02',1,'华为 麦芒4 晨曦金 全网通版4G手机 双卡双待金属机身 2.5D弧面屏 指纹解锁 光学防抖',0,'1'),('14','vivo X5M',1899,1799,'products/1/c_0011.jpg','2015-11-02',0,'vivo X5M 移动4G手机 双卡双待 香槟金【购机送蓝牙耳机+蓝牙自拍杆】5.0英寸大屏显示·八核双卡双待·Hi-Fi移动KTV',0,'1'),('15','Apple iPhone 6 (A1586)',4399,4288,'products/1/c_0015.jpg','2015-11-02',1,'Apple iPhone 6 (A1586) 16GB 金色 移动联通电信4G手机长期省才是真的省!点击购机送费版,月月送话费,月月享优惠,畅享4G网络,就在联通4G!',0,'1'),('16','华为 HUAWEI Mate S 臻享版',4200,4087,'products/1/c_0016.jpg','2015-11-03',0,'华为 HUAWEI Mate S 臻享版 手机 极昼金 移动联通双4G(高配)满星评价即返30元话费啦;买就送电源+清水套+创意手机支架;优雅弧屏,mate7升级版',0,'1'),('17','索尼(SONY) E6533 Z3+',4099,3999,'products/1/c_0017.jpg','2015-11-02',0,'索尼(SONY) E6533 Z3+ 双卡双4G手机 防水防尘 涧湖绿索尼z3专业防水 2070万像素 移动联通双4G',0,'1'),('18','HTC One M9+',3599,3499,'products/1/c_0018.jpg','2015-11-02',0,'HTC One M9+(M9pw) 金银汇 移动联通双4G手机5.2英寸,8核CPU,指纹识别,UltraPixel超像素前置相机+2000万/200万后置双镜头相机!降价特卖,惊喜不断!',0,'1'),('19','HTC Desire 826d 32G 臻珠白',1599,1469,'products/1/c_0020.jpg','2015-11-02',1,'后置1300万+UltraPixel超像素前置摄像头+【双】前置扬声器+5.5英寸【1080p】大屏!',0,'1'),('2','中兴 AXON',2899,2699,'products/1/c_0002.jpg','2015-11-05',1,'中兴 AXON 天机 mini 压力屏版 B2015 华尔金 移动联通电信4G 双卡双待',0,'1'),('20','小米 红米2A 增强版 白色',649,549,'products/1/c_0019.jpg','2015-11-02',0,'新增至2GB 内存+16GB容量!4G双卡双待,联芯 4 核 1.5GHz 处理器!',0,'1'),('21','魅族 魅蓝note2 16GB 白色',1099,999,'products/1/c_0021.jpg','2015-11-02',0,'现货速抢,抢完即止!5.5英寸1080P分辨率屏幕,64位八核1.3GHz处理器,1300万像素摄像头,双色温双闪光灯!',0,'1'),('22','三星 Galaxy S5 (G9008W) 闪耀白',2099,1999,'products/1/c_0022.jpg','2015-11-02',1,'5.1英寸全高清炫丽屏,2.5GHz四核处理器,1600万像素',0,'1'),('23','sonim XP7700 4G手机',1799,1699,'products/1/c_0023.jpg','2015-11-09',1,'三防智能手机 移动/联通双4G 安全 黑黄色 双4G美国军工IP69 30天长待机 3米防水防摔 北斗',0,'1'),('24','努比亚(nubia)Z9精英版 金色',3988,3888,'products/1/c_0024.jpg','2015-11-02',1,'移动联通电信4G手机 双卡双待真正的无边框!金色尊贵版!4GB+64GB大内存!',0,'1'),('25','Apple iPhone 6 Plus (A1524) 16GB 金色',5188,4988,'products/1/c_0025.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机 硬货 硬实力',0,'1'),('26','Apple iPhone 6s (A1700) 64G 玫瑰金色',6388,6088,'products/1/c_0026.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机 硬货 硬实力',0,'1'),('27','三星 Galaxy Note5(N9200)32G版',5588,5388,'products/1/c_0027.jpg','2015-11-02',0,'旗舰机型!5.7英寸大屏,4+32G内存!不一样的SPen更优化的浮窗指令!赠无线充电板!',0,'1'),('28','三星 Galaxy S6 Edge+(G9280)32G版 铂光金',5999,5888,'products/1/c_0028.jpg','2015-11-02',0,'赠移动电源+自拍杆+三星OTG金属U盘+无线充电器+透明保护壳',0,'1'),('29','LG G4(H818)陶瓷白 国际版',3018,2978,'products/1/c_0029.jpg','2015-11-02',0,'李敏镐代言,F1.8大光圈1600万后置摄像头,5.5英寸2K屏,3G+32G内存,LG年度旗舰机!',0,'1'),('3','华为荣耀6',1599,1499,'products/1/c_0003.jpg','2015-11-02',0,'荣耀 6 (H60-L01) 3GB内存标准版 黑色 移动4G手机',0,'1'),('30','微软(Microsoft) Lumia 640 LTE DS (RM-1113)',1099,999,'products/1/c_0030.jpg','2015-11-02',0,'微软首款双网双卡双4G手机,5.0英寸高清大屏,双网双卡双4G!',0,'1'),('31','宏碁(acer)ATC705-N50 台式电脑',2399,2299,'products/1/c_0031.jpg','2015-11-02',0,'爆款直降,满千减百,品质宏碁,特惠来袭,何必苦等11.11,早买早便宜!',0,'2'),('32','Apple MacBook Air MJVE2CH/A 13.3英寸',6788,6688,'products/1/c_0032.jpg','2015-11-02',0,'宽屏笔记本电脑 128GB 闪存',0,'2'),('33','联想(ThinkPad) 轻薄系列E450C(20EH0001CD)',4399,4199,'products/1/c_0033.jpg','2015-11-02',0,'联想(ThinkPad) 轻薄系列E450C(20EH0001CD)14英寸笔记本电脑(i5-4210U 4G 500G 2G独显 Win8.1)',0,'2'),('34','联想(Lenovo)小新V3000经典版',4599,4499,'products/1/c_0034.jpg','2015-11-02',0,'14英寸超薄笔记本电脑(i7-5500U 4G 500G+8G SSHD 2G独显 全高清屏)黑色满1000減100,狂减!火力全开,横扫3天!',0,'2'),('35','华硕(ASUS)经典系列R557LI',3799,3699,'products/1/c_0035.jpg','2015-11-02',0,'15.6英寸笔记本电脑(i5-5200U 4G 7200转500G 2G独显 D刻 蓝牙 Win8.1 黑色)',0,'2'),('36','华硕(ASUS)X450J',4599,4399,'products/1/c_0036.jpg','2015-11-02',0,'14英寸笔记本电脑 (i5-4200H 4G 1TB GT940M 2G独显 蓝牙4.0 D刻 Win8.1 黑色)',0,'2'),('37','戴尔(DELL)灵越 飞匣3000系列',3399,3299,'products/1/c_0037.jpg','2015-11-03',0,' Ins14C-4528B 14英寸笔记本(i5-5200U 4G 500G GT820M 2G独显 Win8)黑',0,'2'),('38','惠普(HP)WASD 暗影精灵',5699,5499,'products/1/c_0038.jpg','2015-11-02',0,'15.6英寸游戏笔记本电脑(i5-6300HQ 4G 1TB+128G SSD GTX950M 4G独显 Win10)',0,'2'),('39','Apple 配备 Retina 显示屏的 MacBook',11299,10288,'products/1/c_0039.jpg','2015-11-02',0,'Pro MF840CH/A 13.3英寸宽屏笔记本电脑 256GB 闪存',0,'2'),('4','联想 P1',2199,1999,'products/1/c_0004.jpg','2015-11-02',0,'联想 P1 16G 伯爵金 移动联通4G手机充电5分钟,通话3小时!科技源于超越!品质源于沉淀!5000mAh大电池!高端商务佳配!',0,'1'),('40','机械革命(MECHREVO)MR X6S-M',6799,6599,'products/1/c_0040.jpg','2015-11-02',0,'15.6英寸游戏本(I7-4710MQ 8G 64GSSD+1T GTX960M 2G独显 IPS屏 WIN7)黑色',0,'2'),('41','神舟(HASEE) 战神K660D-i7D2',5699,5499,'products/1/c_0041.jpg','2015-11-02',0,'15.6英寸游戏本(i7-4710MQ 8G 1TB GTX960M 2G独显 1080P)黑色',0,'2'),('42','微星(MSI)GE62 2QC-264XCN',6199,5999,'products/1/c_0042.jpg','2015-11-02',0,'15.6英寸游戏笔记本电脑(i5-4210H 8G 1T GTX960MG DDR5 2G 背光键盘)黑色',0,'2'),('43','雷神(ThundeRobot)G150S',5699,5499,'products/1/c_0043.jpg','2015-11-02',0,'15.6英寸游戏本 ( i7-4710MQ 4G 500G GTX950M 2G独显 包无亮点全高清屏) 金',0,'2'),('44','惠普(HP)轻薄系列 HP',3199,3099,'products/1/c_0044.jpg','2015-11-02',0,'15-r239TX 15.6英寸笔记本电脑(i5-5200U 4G 500G GT820M 2G独显 win8.1)金属灰',0,'2'),('45','未来人类(Terrans Force)T5',10999,9899,'products/1/c_0045.jpg','2015-11-02',0,'15.6英寸游戏本(i7-5700HQ 16G 120G固态+1TB GTX970M 3G GDDR5独显)黑',0,'2'),('46','戴尔(DELL)Vostro 3800-R6308 台式电脑',3299,3199,'products/1/c_0046.jpg','2015-11-02',0,'(i3-4170 4G 500G DVD 三年上门服务 Win7)黑',0,'2'),('47','联想(Lenovo)H3050 台式电脑',5099,4899,'products/1/c_0047.jpg','2015-11-11',0,'(i5-4460 4G 500G GT720 1G独显 DVD 千兆网卡 Win10)23英寸',0,'2'),('48','Apple iPad mini 2 ME279CH/A',2088,1888,'products/1/c_0048.jpg','2015-11-02',0,'(配备 Retina 显示屏 7.9英寸 16G WLAN 机型 银色)',0,'2'),('49','小米(MI)7.9英寸平板',1399,1299,'products/1/c_0049.jpg','2015-11-02',0,'WIFI 64GB(NVIDIA Tegra K1 2.2GHz 2G 64G 2048*1536视网膜屏 800W)白色',0,'2'),('5','摩托罗拉 moto x(x+1)',1799,1699,'products/1/c_0005.jpg','2015-11-01',0,'摩托罗拉 moto x(x+1)(XT1085) 32GB 天然竹 全网通4G手机11月11天!MOTO X震撼特惠来袭!1699元!带你玩转黑科技!天然材质,原生流畅系统!',0,'1'),('50','Apple iPad Air 2 MGLW2CH/A',2399,2299,'products/1/c_0050.jpg','2015-11-12',0,'(9.7英寸 16G WLAN 机型 银色)',0,'2'),('6','魅族 MX5 16GB 银黑色',1899,1799,'products/1/c_0006.jpg','2015-11-02',0,'魅族 MX5 16GB 银黑色 移动联通双4G手机 双卡双待送原厂钢化膜+保护壳+耳机!5.5英寸大屏幕,3G运行内存,2070万+500万像素摄像头!长期省才是真的省!',0,'1'),('7','三星 Galaxy On7',1499,1398,'products/1/c_0007.jpg','2015-11-14',0,'三星 Galaxy On7(G6000)昂小七 金色 全网通4G手机 双卡双待新品火爆抢购中!京东尊享千元良机!5.5英寸高清大屏!1300+500W像素!评价赢30元话费券!',0,'1'),('8','NUU NU5',1288,1190,'products/1/c_0008.jpg','2015-11-02',0,'NUU NU5 16GB 移动联通双4G智能手机 双卡双待 晒单有礼 晨光金香港品牌 2.5D弧度前后钢化玻璃 随机附赠手机套+钢化贴膜 晒单送移动电源+蓝牙耳机',0,'1'),('9','乐视(Letv)乐1pro(X800)',2399,2299,'products/1/c_0009.jpg','2015-11-02',0,'乐视(Letv)乐1pro(X800)64GB 金色 移动联通4G手机 双卡双待乐视生态UI+5.5英寸2K屏+高通8核处理器+4GB运行内存+64GB存储+1300万摄像头!',0,'1'); +/*!40000 ALTER TABLE `product` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user` +-- + +DROP TABLE IF EXISTS `user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user` ( + `uid` varchar(32) NOT NULL, + `username` varchar(20) DEFAULT NULL, + `password` varchar(20) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + `email` varchar(30) DEFAULT NULL, + `telephone` varchar(20) DEFAULT NULL, + `birthday` varchar(20) DEFAULT NULL, + `sex` varchar(10) DEFAULT NULL, + `state` int(11) DEFAULT NULL, + `code` varchar(64) DEFAULT NULL, + PRIMARY KEY (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +INSERT INTO `user` VALUES ('373eb242933b4f5ca3bd43503c34668b','ccc','ccc','aaa','bbb@store.com','15723689921','2015-11-04','男',0,'9782f3e837ff422b9aee8b6381ccf927bdd9d2ced10d48f4ba4b9f187edf7738'),('3ca76a75e4f64db2bacd0974acc7c897','bb','bb','张三','bbb@store.com','15723689921','1990-02-01','男',0,'1258e96181a9457987928954825189000bae305094a042d6bd9d2d35674684e6'),('62145f6e66ea4f5cbe7b6f6b954917d3','cc','cc','张三','bbb@store.com','15723689921','2015-11-03','男',0,'19f100aa81184c03951c4b840a725b6a98097aa1106a4a38ba1c29f1a496c231'),('c95b15a864334adab3d5bb6604c6e1fc','bbb','bbb','老王','bbb@store.com','15712344823','2000-02-01','男',0,'71a3a933353347a4bcacff699e6baa9c950a02f6b84e4f6fb8404ca06febfd6f'),('f55b7d3a352a4f0782c910b2c70f1ea4','aaa','aaa','小王','aaa@store.com','15712344823','2000-02-01','男',1,NULL); +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2016-03-03 0:08:34

      a=+$764#2B#sgl!eiFLI* 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 + +$Id: RELEASE-NOTES.txt 597240 2007-11-21 22:50:06Z dennisl $ + + Commons Logging Package + Version 1.1.1 + Release Notes + +INTRODUCTION: +============ + +This release of Apache Commons Logging is a maintenance release, with just a +couple of fixes for using Commons Logging under restrictive security policies. + +All core classes were compiled with Maven using a 1.4.x JDK, with target set +to 1.1 and source set to 1.2. Commons Logging may work on some +augmented 1.1 series JREs but it is recommended that those wish to run +on 1.1 JREs download the source and create a custom implementation by +stripping out all the complex classloader management code. + +For further details, please see the Apache Commons Logging website: + http://commons.apache.org/logging/ + +For the very latest news, hints, FAQs etc. please see the +Apache Commons Logging wiki site: + http://wiki.apache.org/commons/Logging + +Note that some containers (some versions of Apache Tomcat and JBoss in +particular) prevent webapps, ejbs, etc from overriding the commons-logging +implementation provided by the container. This means that bundling this +updated implementation with a deployed application may not have any effect. +See the commons-logging site and/or the wiki for more information. + +== New Features Since 1.1.0 == + +None. + +== Incompatibilities == + +The protected method LogFactory.getContextClassLoader has been reverted to pre-1.1 +behaviour. In earlier releases, this method did not use an AccessController when +obtaining the context classloader. In version 1.1 it did. In this release, it has +reverted to not using an AccessController; any user-level code that needs to obtain +a context classloader should itself create an AccessController, and call the +LogFactory.getContextClassLoader method via the doPrivileged method. This fixes a +potential security issue, where untrusted code could get access to the context +classloader if a signed Commons Logging library was in the classpath. + +== Dependencies == + +Commons Logging has no mandatory dependencies. + +Java 1.2 and later are supported. It may be possible to use this release with +java 1.1 but this has not been tested; the unit tests certainly don't run on +that version. + +== Distributed Jar Files == + +File commons-logging-nn.jar is the one most people will want. It provides the +base implementation and adapters to a number of popular logging libraries. + +File commons-logging-adapters-nn.jar includes only the adapters to various +concrete logging libraries. When commons-logging-nn.jar or +commons-logging-api-nn.jar is deployed in a container classpath, then this +adapters-only jar file should be deployed in the webapp, not the complete Commons +Logging distribution. This ensures that the core Log/LogFactory classes are only +deployed via one classloader, thus avoiding "Log4JLogger does not implement Log" +and similar problems. + +File commons-logging-api-nn.jar provides minimal adapters to external logging +libraries, just the internally implemented SimpleLog and NoOpLog classes +plus Jdk14Logger (which is currently required by Apache Tomcat). + +The file commons-logging-api-nn.jar may be used as a declared dependency for +projects that care about "transitive dependencies" and can't handle jar files +such as commons-logging-nn.jar which have "optional" dependencies depending on +how they are used. In addition, this jar file can be useful for "rebundlers" of +Commons Logging who recompile the source-code but who may not be able to +recompile against the full set of supported adapters; such projects should be +able to at least recreate an equivalent of this jar file. + +== General Notes == + +The Apache Commons project has migrated to the Subversion version control system +(previously, CVS was used). There should be no effect on users of the Commons +Logging library, but obviously the process of examining the latest source code, +and of creating patches for Commons Logging has now changed. Please see the +Apache Commons website for details (http://commons.apache.org/). + +The Apache Commons project has now moved to using the Apache JIRA installation +as its bugtracking system (formerly, the Apache Bugzilla installation was used). + +All source files for this release have been updated to reflect the new Apache +Software Foundation licensing rules. The terms and conditions are unaltered; +this merely affects how those are presented in the source files. See + http://www.apache.org/legal/src-headers.html + +This release can be built/tested with Maven 2.0.x as well as Ant. Note that +building with Maven 1.x is no longer supported. The files used to build Commons +Logging with Maven 1.x will be removed in a future version of Commons Logging. + +== Bugs Fixed == + +* LOGGING-106: Commons Logging 1.1 was completely unusable under a security + policy that prevented access to system properties. Even signing/authorising + the Commons Logging library was not sufficient. This has been fixed by (a) + catching SecurityException and falling back to a sensible default, and (b) + using AccessController so Commons Logging can be granted privileges without + needing the caller to have them too. + +* LOGGING-107: Commons Logging 1.1 auto-discovery failed under a security + policy that prevented calls to ClassLoader.getParent. Signing/authorising the + Commons Logging library was not sufficient as an AccessController was not used. + This has been fixed by catching SecurityException and using an AccessController. + +* LOGGING-111, LOGGING-114: Show the contents of chained exceptions, to make + debugging easier, in particular when using Commons Logging together with Log4J. + +* LOGGING-113: pom.xml in maven repository does not list dependencies as optional. + +* LOGGING-115: NPE thrown due to exception message logging. + +* LOGGING-117: Unit tests fail on linux with java16. + +* LOGGING-118: Generate source and binary archives. + +* MEV-392 (http://jira.codehaus.org/browse/MEV-392) + As Commons Logging didn't provide a Maven2 pom.xml file, one was helpfully + created by people not involved with the commons-logging project and published + to the standard maven repositories. Unfortunately this pom declared normal + dependencies on all the logging libraries that are supported by the core + Commons Logging distribution, meaning they all get pulled into a project that + declares a dependency on Commons Logging 1.1. This release now provides an + "official" pom.xml which declares these dependencies as optional so they aren't + automatically included in projects that depend on Commons Logging 1.1.1. + +* (no bug#): Fix thread-safety bug (SimpleDateFormat.format is not thread-safe). + Thanks to Martin Wilson of bright-interactive for the bug report. + +* (no bug#): Security issue regarding access to context classloader (see + incompatibilities section above). + +DEPRECATIONS: +============ + + (These are carried forward from Version 1.0.4) + +[LogSource] Previously deprecated, replaced by LogFactory. + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-frame.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-frame.html new file mode 100644 index 0000000..952e39b --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-frame.html @@ -0,0 +1,57 @@ + + + + + + + +All Classes (Commons Logging 1.1.1 API) + + + + + + + + + + +All Classes +
      + + + + + +
      AvalonLogger +
      +Jdk13LumberjackLogger +
      +Jdk14Logger +
      +Log +
      +Log4JLogger +
      +LogConfigurationException +
      +LogFactory +
      +LogFactoryImpl +
      +LogKitLogger +
      +LogSource +
      +NoOpLog +
      +ServletContextCleaner +
      +SimpleLog +
      +WeakHashtable +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-noframe.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-noframe.html new file mode 100644 index 0000000..3de0b8e --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/allclasses-noframe.html @@ -0,0 +1,57 @@ + + + + + + + +All Classes (Commons Logging 1.1.1 API) + + + + + + + + + + +All Classes +
      + + + + + +
      AvalonLogger +
      +Jdk13LumberjackLogger +
      +Jdk14Logger +
      +Log +
      +Log4JLogger +
      +LogConfigurationException +
      +LogFactory +
      +LogFactoryImpl +
      +LogKitLogger +
      +LogSource +
      +NoOpLog +
      +ServletContextCleaner +
      +SimpleLog +
      +WeakHashtable +
      +
      + + + diff --git a/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/constant-values.html b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/constant-values.html new file mode 100644 index 0000000..802e4af --- /dev/null +++ b/beanutils/commons-logging-1.1.1-bin/commons-logging-1.1.1/site/apidocs/constant-values.html @@ -0,0 +1,323 @@ + + + + + + + +Constant Field Values (Commons Logging 1.1.1 API) + + + + + + + + + + + + + +
      + + + + + + + + + + + +
      + +
      + + + +

    KWY(cO;3Vt- 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�uJpXsyiVQ~0>E5| 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%0A&2hI<25ZA*#ttNxm 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