package com.w11k.lsql.converter.predefined;
import com.w11k.lsql.LSql;
import com.w11k.lsql.converter.Converter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import static com.google.common.base.Preconditions.checkArgument;
public class JavaBoolToSqlStringConverter extends Converter {
private final String sqlStringValueForTrue;
private final String sqlStringValueForFalse;
public JavaBoolToSqlStringConverter(String sqlStringValueForTrue,
String sqlStringValueForFalse) {
super(
Boolean.class,
new int[]{Types.VARCHAR},
Types.VARCHAR
);
checkArgument(!sqlStringValueForTrue.equals(sqlStringValueForFalse));
this.sqlStringValueForTrue = sqlStringValueForTrue;
this.sqlStringValueForFalse = sqlStringValueForFalse;
}
@Override
public Object getValue(LSql lSql, ResultSet rs, int index) throws SQLException {
String val = rs.getString(index);
if (val.equals(sqlStringValueForTrue)) {
return true;
} else if (val.equals(sqlStringValueForFalse)) {
return false;
} else {
throw new IllegalArgumentException("Value must be "
+ "'" + sqlStringValueForTrue + "' for yes and "
+ "'" + sqlStringValueForFalse + "' for false.");
}
}
@Override
public void setValue(LSql lSql, PreparedStatement ps, int index,
Object val) throws SQLException {
String yesOrNo = ((Boolean) val) ? sqlStringValueForTrue : sqlStringValueForFalse;
ps.setString(index, yesOrNo);
}
}