package org.jboss.ejb.plugins.cmp.ejbql; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader; import org.jboss.ejb.plugins.cmp.jdbc.JDBCType; import org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil; import org.jboss.logging.Logger; /** * A AbstractMappedTypeFunction. * * @author <a href="alex@jboss.com">Alexey Loubyansky</a> * @version $Revision: 1.1 $ */ public abstract class AbstractMappedTypeFunction extends SimpleNode implements SelectFunction { protected final Logger log; protected Class resultType; protected JDBCResultSetReader resultReader; public AbstractMappedTypeFunction(int i) { super(i); log = Logger.getLogger(getClass()); } public void setResultType(Class type) { if(Collection.class.isAssignableFrom(type)) { resultType = getDefaultResultType(); } else { this.resultType = type; } this.resultReader = JDBCUtil.getResultReaderByType(resultType); } protected Class getDefaultResultType() { return Double.class; } public void setJDBCType(final JDBCType jdbcType) { if(resultReader != null) { final JDBCResultSetReader jdbcResultReader = this.resultReader; resultReader = new JDBCResultSetReader() { public Object get(ResultSet rs, int index, Class destination, Logger log) throws SQLException { Object jdbcResult = jdbcResultReader.get(rs, index, destination, log); return jdbcType.setColumnValue(0, null, jdbcResult); } }; } } // SelectFunction implementation public Object readResult(ResultSet rs) throws SQLException { return resultReader.get(rs, 1, resultType, log); } }