01: package org.hibernate.bytecode.javassist;
02:
03: import java.io.Serializable;
04:
05: /**
06: * A JavaBean accessor.
07: * <p/>
08: * <p>This object provides methods that set/get multiple properties
09: * of a JavaBean at once. This class and its support classes have been
10: * developed for the comaptibility with cglib
11: * (<tt>http://cglib.sourceforge.net/</tt>).
12: *
13: * @author Muga Nishizawa
14: * @author modified by Shigeru Chiba
15: */
16: public abstract class BulkAccessor implements Serializable {
17: protected Class target;
18: protected String[] getters, setters;
19: protected Class[] types;
20:
21: protected BulkAccessor() {
22: }
23:
24: /**
25: * Obtains the values of properties of a given bean.
26: *
27: * @param bean JavaBean.
28: * @param values the obtained values are stored in this array.
29: */
30: public abstract void getPropertyValues(Object bean, Object[] values);
31:
32: /**
33: * Sets properties of a given bean to specified values.
34: *
35: * @param bean JavaBean.
36: * @param values the values assinged to properties.
37: */
38: public abstract void setPropertyValues(Object bean, Object[] values);
39:
40: /**
41: * Returns the values of properties of a given bean.
42: *
43: * @param bean JavaBean.
44: */
45: public Object[] getPropertyValues(Object bean) {
46: Object[] values = new Object[getters.length];
47: getPropertyValues(bean, values);
48: return values;
49: }
50:
51: /**
52: * Returns the types of properties.
53: */
54: public Class[] getPropertyTypes() {
55: return (Class[]) types.clone();
56: }
57:
58: /**
59: * Returns the setter names of properties.
60: */
61: public String[] getGetters() {
62: return (String[]) getters.clone();
63: }
64:
65: /**
66: * Returns the getter names of the properties.
67: */
68: public String[] getSetters() {
69: return (String[]) setters.clone();
70: }
71:
72: /**
73: * Creates a new instance of <code>BulkAccessor</code>.
74: * The created instance provides methods for setting/getting
75: * specified properties at once.
76: *
77: * @param beanClass the class of the JavaBeans accessed
78: * through the created object.
79: * @param getters the names of setter methods for specified properties.
80: * @param setters the names of getter methods for specified properties.
81: * @param types the types of specified properties.
82: */
83: public static BulkAccessor create(Class beanClass,
84: String[] getters, String[] setters, Class[] types) {
85: BulkAccessorFactory factory = new BulkAccessorFactory(
86: beanClass, getters, setters, types);
87: return factory.create();
88: }
89: }
|