package com.koushikdutta.async.parser;
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.http.body.DocumentBody;
import com.koushikdutta.async.stream.ByteBufferListInputStream;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* Created by koush on 8/3/13.
*/
public class DocumentParser implements AsyncParser<Document> {
@Override
public Future<Document> parse(DataEmitter emitter) {
return new ByteBufferListParser().parse(emitter)
.then(new TransformFuture<Document, ByteBufferList>() {
@Override
protected void transform(ByteBufferList result) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
setComplete(db.parse(new ByteBufferListInputStream(result)));
}
});
}
@Override
public void write(DataSink sink, Document value, CompletedCallback completed) {
new DocumentBody(value).write(null, sink, completed);
}
}