package com.dotech.ibatis;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ResultSetToResultHandler implements TypeHandlerCallback {

    private static final Log LOG = LogFactory.getLog(ResultSetToResultHandler.class);

    public ResultSetToResultHandler() {
        super();
    }

    public Object getResult(ResultGetter getter) throws SQLException {
        Result result = null;
        ResultSet rs = null;
        try {
            rs = (ResultSet)getter.getObject();
            result = ResultSupport.toResult(rs);
        } finally {
            close(rs);
        }
        return result;
    }

    public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {
        throw new UnsupportedOperationException();
    }

    public Object valueOf(String s) {
        throw new UnsupportedOperationException();
    }

    protected void close(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException exc) {
                LOG.warn(exc.getMessage(), exc);
            }
        }
    }
}
