01: package org.hibernate.bytecode.javassist;
02:
03: import org.hibernate.bytecode.ReflectionOptimizer;
04: import org.hibernate.PropertyAccessException;
05:
06: import java.io.Serializable;
07:
08: /**
09: * The {@link ReflectionOptimizer.AccessOptimizer} implementation for Javassist
10: * which simply acts as an adpater to the {@link BulkAccessor} class.
11: *
12: * @author Steve Ebersole
13: */
14: public class AccessOptimizerAdapter implements
15: ReflectionOptimizer.AccessOptimizer, Serializable {
16:
17: public static final String PROPERTY_GET_EXCEPTION = "exception getting property value with Javassist (set hibernate.bytecode.use_reflection_optimizer=false for more info)";
18:
19: public static final String PROPERTY_SET_EXCEPTION = "exception setting property value with Javassist (set hibernate.bytecode.use_reflection_optimizer=false for more info)";
20:
21: private final BulkAccessor bulkAccessor;
22: private final Class mappedClass;
23:
24: public AccessOptimizerAdapter(BulkAccessor bulkAccessor,
25: Class mappedClass) {
26: this .bulkAccessor = bulkAccessor;
27: this .mappedClass = mappedClass;
28: }
29:
30: public String[] getPropertyNames() {
31: return bulkAccessor.getGetters();
32: }
33:
34: public Object[] getPropertyValues(Object object) {
35: try {
36: return bulkAccessor.getPropertyValues(object);
37: } catch (Throwable t) {
38: throw new PropertyAccessException(t,
39: PROPERTY_GET_EXCEPTION, false, mappedClass,
40: getterName(t, bulkAccessor));
41: }
42: }
43:
44: public void setPropertyValues(Object object, Object[] values) {
45: try {
46: bulkAccessor.setPropertyValues(object, values);
47: } catch (Throwable t) {
48: throw new PropertyAccessException(t,
49: PROPERTY_SET_EXCEPTION, true, mappedClass,
50: setterName(t, bulkAccessor));
51: }
52: }
53:
54: private static String setterName(Throwable t, BulkAccessor accessor) {
55: if (t instanceof BulkAccessorException) {
56: return accessor.getSetters()[((BulkAccessorException) t)
57: .getIndex()];
58: } else {
59: return "?";
60: }
61: }
62:
63: private static String getterName(Throwable t, BulkAccessor accessor) {
64: if (t instanceof BulkAccessorException) {
65: return accessor.getGetters()[((BulkAccessorException) t)
66: .getIndex()];
67: } else {
68: return "?";
69: }
70: }
71: }
|