Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/hibernate/bytecode/cglib/AccessOptimizerAdapter.java


1   package org.hibernate.bytecode.cglib;
2   
3   import org.hibernate.bytecode.ReflectionOptimizer;
4   import org.hibernate.PropertyAccessException;
5   import net.sf.cglib.beans.BulkBean;
6   import net.sf.cglib.beans.BulkBeanException;
7   import net.sf.cglib.reflect.FastClass;
8   
9   import java.io.Serializable;
10  import java.io.ObjectOutputStream;
11  import java.io.IOException;
12  import java.io.ObjectInputStream;
13  
14  /**
15   * The {@link ReflectionOptimizer.AccessOptimizer} implementation for CGLIB
16   * which simply acts as an adpater to the {@link BulkBean} class.
17   *
18   * @author Steve Ebersole
19   */
20  public class AccessOptimizerAdapter implements ReflectionOptimizer.AccessOptimizer, Serializable {
21  
22    public static final String PROPERTY_GET_EXCEPTION =
23        "exception getting property value with CGLIB (set hibernate.bytecode.use_reflection_optimizer=false for more info)";
24  
25    public static final String PROPERTY_SET_EXCEPTION =
26        "exception setting property value with CGLIB (set hibernate.bytecode.use_reflection_optimizer=false for more info)";
27  
28    private Class mappedClass;
29    private BulkBean bulkBean;
30  
31    public AccessOptimizerAdapter(BulkBean bulkBean, Class mappedClass) {
32      this.bulkBean = bulkBean;
33      this.mappedClass = mappedClass;
34    }
35  
36    public String[] getPropertyNames() {
37      return bulkBean.getGetters();
38    }
39  
40    public Object[] getPropertyValues(Object object) {
41      try {
42        return bulkBean.getPropertyValues( object );
43      }
44      catch ( Throwable t ) {
45        throw new PropertyAccessException(
46            t,
47                PROPERTY_GET_EXCEPTION,
48                false,
49                mappedClass,
50                getterName( t, bulkBean )
51        );
52      }
53    }
54  
55    public void setPropertyValues(Object object, Object[] values) {
56      try {
57        bulkBean.setPropertyValues( object, values );
58      }
59      catch ( Throwable t ) {
60        throw new PropertyAccessException(
61            t,
62                PROPERTY_SET_EXCEPTION,
63                true,
64                mappedClass,
65                setterName( t, bulkBean )
66        );
67      }
68    }
69  
70    private static String setterName(Throwable t, BulkBean optimizer) {
71      if ( t instanceof BulkBeanException ) {
72        return optimizer.getSetters()[( ( BulkBeanException ) t ).getIndex()];
73      }
74      else {
75        return "?";
76      }
77    }
78  
79    private static String getterName(Throwable t, BulkBean optimizer) {
80      if ( t instanceof BulkBeanException ) {
81        return optimizer.getGetters()[( ( BulkBeanException ) t ).getIndex()];
82      }
83      else {
84        return "?";
85      }
86    }
87  
88    private void writeObject(ObjectOutputStream out) throws IOException {
89      out.writeObject( mappedClass );
90      out.writeObject( bulkBean.getGetters() );
91      out.writeObject( bulkBean.getSetters() );
92      out.writeObject( bulkBean.getPropertyTypes() );
93    }
94  
95    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
96      Class beanClass = ( Class ) in.readObject();
97      String[] getters = ( String[] ) in.readObject();
98      String[] setters = ( String[] ) in.readObject();
99      Class[] types = ( Class[] ) in.readObject();
100     bulkBean = BulkBean.create( beanClass, getters, setters, types );
101   }
102 }