package com.ioabsoftware.gameraven.util; import com.koushikdutta.async.ByteBufferList; import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.DataSink; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.future.Future; import com.koushikdutta.async.future.TransformFuture; import com.koushikdutta.async.parser.AsyncParser; import com.koushikdutta.async.parser.ByteBufferListParser; import org.jsoup.Jsoup; import java.lang.reflect.Type; import java.nio.charset.Charset; public class DocumentParser implements AsyncParser<FinalDoc> { public static final String CHARSET_NAME = "ISO-8859-1"; public static final Charset CHARSET = Charset.forName(CHARSET_NAME); @Override public Future<FinalDoc> parse(DataEmitter emitter) { return new ByteBufferListParser().parse(emitter) .then(new TransformFuture<FinalDoc, ByteBufferList>() { @Override protected void transform(ByteBufferList result) throws Exception { byte[] bytes = result.getAllByteArray(); setComplete(new FinalDoc(bytes, Jsoup.parse(new String(bytes, CHARSET)))); } }); } @Override public void write(DataSink sink, FinalDoc value, CompletedCallback completed) { new ByteBufferListParser().write(sink, new ByteBufferList(value.bytes), completed); } @Override public Type getType() { return (getClass().getGenericSuperclass()); } }