package org.qrone.r7.script.browser;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.arnx.jsonic.JSON;
import org.mozilla.javascript.xml.XMLObject;
import org.qrone.login.AccessToken;
import org.qrone.r7.parser.HTML5Deck;
import org.qrone.r7.parser.HTML5StreamWriter;
import org.qrone.r7.parser.HTML5Template;
import org.qrone.r7.script.Scriptables;
public class Document extends HTML5Template{
private HttpServletRequest request;
private Writer writer;
private HTML5StreamWriter streamWriter;
private User user;
public Document(HttpServletRequest request, HttpServletResponse response, HTML5Deck deck, String uri, User user) throws IOException{
super(deck, uri);
this.request = request;
this.writer = new BufferedWriter(response.getWriter());
this.streamWriter = new HTML5StreamWriter(writer);
this.user = user;
}
public String getCookie(){
return request.getHeader("Cookie");
}
public void write(Object out) throws IOException{
if(out instanceof String){
writer.append((String)out);
}else if(out instanceof HTML5Template){
HTML5Template t = (HTML5Template)out;
t.out(streamWriter, om.getDocument(), user.getTicket(AccessToken.WRITE));
}else if(out instanceof XMLObject){
XMLObject xo = (XMLObject)out;
String o = xo.callMethod(xo, "toXMLString", null).toString();
writer.append(o);
}else{
writer.append(JSON.encode(Scriptables.asMap(out)));
}
}
public void flush() throws IOException{
if(loaded){
super.out(streamWriter, om.getDocument(), user.getTicket(AccessToken.WRITE));
}
writer.flush();
}
public void close() throws IOException{
writer.close();
}
}