package com.taobao.tddl.common.utils.convertor;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.sql.Clob;
import java.sql.SQLException;
/**
* object <-> String 之间的转化器,目前只实现object -> String的转化
*
* @author jianghang 2011-5-25 下午10:26:30
*/
public class StringAndObjectConvertor {
/**
* object -> string 转化
*/
public static class ObjectToString extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (String.class.isInstance(Clob.class) && destClass.equals(String.class)) {
if (src == null) {
return null;
} else {
Clob clob = (Clob) src;
try {
InputStream input = clob.getAsciiStream();
byte[] bb = new byte[(int) clob.length()];
input.read(bb);
return bb;
} catch (SQLException e) {
throw new ConvertorException(e);
} catch (IOException e) {
throw new ConvertorException(e);
}
}
} else {
return src != null ? src.toString() : null;
}
}
}
/**
* string -> bytes 转化
*/
public static class StringToBytes extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (String.class.isInstance(src) && destClass.equals(byte[].class)) {
return src != null ? ((String) src).getBytes() : null;
}
throw new ConvertorException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* bytes -> String 转化
*/
public static class BytesToString extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (byte[].class.isInstance(src) && destClass.equals(String.class)) {
try {
return new String((byte[]) src, "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
throw new ConvertorException(e);
}
}
throw new ConvertorException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
}