001    package railo.runtime.orm.hibernate.tuplizer.proxy;
002    
003    import java.io.Serializable;
004    import java.lang.reflect.Method;
005    import java.util.Set;
006    
007    import org.hibernate.HibernateException;
008    import org.hibernate.engine.SessionImplementor;
009    import org.hibernate.mapping.PersistentClass;
010    import org.hibernate.proxy.HibernateProxy;
011    import org.hibernate.proxy.ProxyFactory;
012    import org.hibernate.type.AbstractComponentType;
013    
014    import railo.runtime.CFCProxy;
015    
016    /**
017     * @author Gavin King
018     */
019    public class CFCProxyFactory implements ProxyFactory {
020            private String entityName;
021            private String nodeName;
022    
023            public void postInstantiate(
024                    final String entityName, 
025                    final Class persistentClass,
026                    final Set interfaces, 
027                    final Method getIdentifierMethod,
028                    final Method setIdentifierMethod,
029                    AbstractComponentType componentIdType) throws HibernateException {
030                    int index=entityName.indexOf('.');
031                    this.nodeName = entityName;
032                    this.entityName = entityName.substring(index+1);
033            }
034    
035            public void postInstantiate(PersistentClass pc) {
036                    this.nodeName =pc.getNodeName();
037                    this.entityName =pc.getEntityName();
038            }
039    
040            public HibernateProxy getProxy(final Serializable id,  final SessionImplementor session) {
041                    try {
042                            return new CFCProxy(new CFCLazyInitializer(entityName, id, session));
043                    }
044                    catch(Throwable t){
045                            return new CFCProxy(new CFCLazyInitializer(nodeName, id, session));
046                    }
047            }
048    }