Source code: org/hibernate/test/dynamicentity/tuplizer/MyEntityInstantiator.java
1 package org.hibernate.test.dynamicentity.tuplizer;
2
3 import org.hibernate.tuple.Instantiator;
4 import org.hibernate.test.dynamicentity.Customer;
5 import org.hibernate.test.dynamicentity.ProxyHelper;
6 import org.hibernate.test.dynamicentity.Company;
7 import org.hibernate.test.dynamicentity.DataProxyHandler;
8 import org.hibernate.test.dynamicentity.Address;
9 import org.hibernate.test.dynamicentity.Person;
10 import org.hibernate.util.ReflectHelper;
11 import org.hibernate.HibernateException;
12
13 import java.io.Serializable;
14 import java.lang.reflect.Proxy;
15 import java.lang.reflect.InvocationHandler;
16
17 /**
18 * @author <a href="mailto:steve@hibernate.org">Steve Ebersole </a>
19 */
20 public class MyEntityInstantiator implements Instantiator {
21 private final String entityName;
22
23 public MyEntityInstantiator(String entityName) {
24 this.entityName = entityName;
25 }
26
27 public Object instantiate(Serializable id) {
28 if ( Person.class.getName().equals( entityName ) ) {
29 return ProxyHelper.newPersonProxy( id );
30 }
31 if ( Customer.class.getName().equals( entityName ) ) {
32 return ProxyHelper.newCustomerProxy( id );
33 }
34 else if ( Company.class.getName().equals( entityName ) ) {
35 return ProxyHelper.newCompanyProxy( id );
36 }
37 else if ( Address.class.getName().equals( entityName ) ) {
38 return ProxyHelper.newAddressProxy( id );
39 }
40 else {
41 throw new IllegalArgumentException( "unknown entity for instantiation [" + entityName + "]" );
42 }
43 }
44
45 public Object instantiate() {
46 return instantiate( null );
47 }
48
49 public boolean isInstance(Object object) {
50 String resolvedEntityName = null;
51 if ( Proxy.isProxyClass( object.getClass() ) ) {
52 InvocationHandler handler = Proxy.getInvocationHandler( object );
53 if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
54 DataProxyHandler myHandler = ( DataProxyHandler ) handler;
55 resolvedEntityName = myHandler.getEntityName();
56 }
57 }
58 try {
59 return ReflectHelper.classForName( entityName ).isInstance( object );
60 }
61 catch( Throwable t ) {
62 throw new HibernateException( "could not get handle to entity-name as interface : " + t );
63 }
64
65 // return entityName.equals( resolvedEntityName );
66 }
67 }