package org.qrone.r7.handler;
import java.io.BufferedWriter;
import java.io.Writer;
import java.net.URI;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.qrone.login.AccessToken;
import org.qrone.r7.PortingService;
import org.qrone.r7.parser.HTML5Deck;
import org.qrone.r7.parser.HTML5OM;
import org.qrone.r7.parser.HTML5StreamWriter;
import org.qrone.r7.parser.HTML5StringWriter;
import org.qrone.r7.parser.HTML5Template;
import org.qrone.r7.resolver.URIResolver;
import org.qrone.r7.script.browser.User;
public class HTML5Handler implements URIHandler{
private URIResolver resolver;
private HTML5Deck deck;
public HTML5Handler(PortingService services, HTML5Deck deck) {
this.resolver = services.getURIResolver();
this.deck = deck;
}
@Override
public boolean handle(HttpServletRequest request, HttpServletResponse response,
String uri, String path, String leftpath, List<String> arg) {
try {
if(resolver.exist(uri)){
URI urio = new URI(uri);
HTML5OM om = deck.compile(urio);
if(om != null){
response.setContentType("text/html; charset=utf8");
Writer out = response.getWriter();
User user = (User)request.getAttribute("User");
Writer bufw = new BufferedWriter(out);
HTML5StreamWriter w = new HTML5StreamWriter(bufw);
HTML5Template t = new HTML5Template(om, urio);
t.out(w, om.getDocument(), user.getTicket(AccessToken.WRITE));
bufw.flush();
out.flush();
out.close();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}