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 }