package ameba.message.internal.streaming; import ameba.message.internal.StreamingProcess; import org.apache.commons.io.IOUtils; import org.glassfish.jersey.message.internal.ReaderWriter; import javax.inject.Singleton; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.sql.Clob; import java.sql.SQLException; /** * <p>ClobStreamingProcess class.</p> * * @author icode * */ @Singleton public class ClobStreamingProcess implements StreamingProcess<Clob> { /** * {@inheritDoc} */ @Override public boolean isSupported(Object entity) { return entity instanceof Clob; } /** {@inheritDoc} */ @Override public long length(Clob entity) throws IOException { try { return entity.length(); } catch (SQLException e) { throw new IOException(e); } } /** {@inheritDoc} */ @Override public void write(Clob entity, OutputStream output, Long pos, Long length) throws IOException { Reader reader; try { reader = entity.getCharacterStream(pos, length); } catch (SQLException e) { throw new IOException(e); } try { ReaderWriter.writeTo(reader, new OutputStreamWriter(output)); } finally { IOUtils.closeQuietly(reader); } } }