/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2011, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.data.teradata;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import org.geotools.factory.Hints;
import org.geotools.util.Converter;
import org.geotools.util.ConverterFactory;
public class LobConverterFactory implements ConverterFactory {
public Converter createConverter(Class<?> source, Class<?> target, Hints hints) {
if (Blob.class.isAssignableFrom(source) && byte[].class.isAssignableFrom(target)) {
return new Converter() {
public <T> T convert(Object source, Class<T> target) throws Exception {
if (source instanceof Blob && byte[].class.isAssignableFrom(target)) {
Blob blob = (Blob) source;
InputStream blobIS = blob.getBinaryStream();
byte[] blobBA = new byte[blobIS.available()];
blobIS.read(blobBA);
blobIS.close();
return (T) blobBA;
}
return null;
}
};
}
if (Clob.class.isAssignableFrom(source) && String.class.isAssignableFrom(target)) {
return new Converter() {
public <T> T convert(Object source, Class<T> target) throws Exception {
if (source instanceof Clob && String.class.isAssignableFrom(target)) {
Clob clob = (Clob) source;
Reader clobReader = clob.getCharacterStream();
char[] clobChars = new char[(int) clob.length()];
clobReader.read(clobChars);
String clobString = new String(clobChars);
return (T) clobString;
}
return null;
}
};
}
return null;
}
}