package rewards.internal.restaurant;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
/**
* iBATIS TypeHandlerCallback for mapping {@link BenefitAvailabilyPolicy} instances to and from the database as simple policy codes
*/
public class BenefitAvailabilityPolicyTypeHandler implements TypeHandler {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter,
JdbcType jdbcType) throws SQLException {
BenefitAvailabilityPolicy policy = (BenefitAvailabilityPolicy)parameter;
if(policy instanceof AlwaysAvailable)
ps.setString(i, "A");
else if(policy instanceof NeverAvailable)
ps.setString(i, "N");
else
throw new IllegalArgumentException("Not a supported benefit availability policy: " + policy.getClass().getName());
}
@Override
public Object getResult(ResultSet rs, String columnName)
throws SQLException {
String policyCode = rs.getString(columnName);
return valueOf(policyCode);
}
@Override
public Object getResult(CallableStatement cs, int columnIndex)
throws SQLException {
String policyCode = cs.getString(columnIndex);
return valueOf(policyCode);
}
public Object valueOf(String policyCode) {
if("A".equals(policyCode))
return new AlwaysAvailable();
else if("N".equals(policyCode))
return new NeverAvailable();
else
throw new IllegalArgumentException("Not a supported policy code " + policyCode);
}
}