package railo.runtime.orm.hibernate.tuplizer.accessors; import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.engine.SessionImplementor; import org.hibernate.metadata.ClassMetadata; import org.hibernate.property.Getter; import org.hibernate.type.Type; import railo.runtime.Component; import railo.runtime.PageContext; import railo.runtime.exp.PageException; import railo.runtime.orm.hibernate.CommonUtil; import railo.runtime.orm.hibernate.HibernateCaster; import railo.runtime.orm.hibernate.HibernateORMEngine; import railo.runtime.orm.hibernate.HibernatePageException; import railo.runtime.orm.hibernate.HibernateUtil; import railo.runtime.type.Collection; import railo.runtime.type.Collection.Key; public class CFCGetter implements Getter { private Key key; /** * Constructor of the class * @param key */ public CFCGetter(String key){ this(CommonUtil.createKey(key)); } /** * Constructor of the class * @param engine * @param key */ public CFCGetter( Collection.Key key){ this.key=key; } @Override public Object get(Object trg) throws HibernateException { try { // MUST cache this, perhaps when building xml HibernateORMEngine engine = getHibernateORMEngine(); PageContext pc = CommonUtil.pc(); Component cfc = CommonUtil.toComponent(trg); String name = HibernateCaster.getEntityName(cfc); ClassMetadata metaData = engine.getSessionFactory(pc).getClassMetadata(name); Type type = HibernateUtil.getPropertyType(metaData, key.getString()); Object rtn = cfc.getComponentScope().get(key,null); return HibernateCaster.toSQL(type, rtn,null); } catch (PageException pe) { throw new HibernatePageException(pe); } } public HibernateORMEngine getHibernateORMEngine(){ try { // TODO better impl return HibernateUtil.getORMEngine(CommonUtil.pc()); } catch (PageException e) {} return null; } @Override public Object getForInsert(Object trg, Map arg1, SessionImplementor arg2)throws HibernateException { return get(trg);// MUST better solution? this is from MapGetter } @Override public Member getMember() { return null; } @Override public Method getMethod() { return null; } public String getMethodName() { return null;// MUST macht es sinn den namen zur�ck zu geben? } public Class getReturnType() { return Object.class;// MUST more concrete? } }