package org.qrone.r7.handler; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.qrone.r7.Extendable; import org.qrone.r7.PortingService; import org.qrone.r7.parser.HTML5Deck; import org.qrone.r7.resolver.URIResolver; import org.qrone.r7.script.ServerJSDeck; public class DefaultHandler implements URIHandler, Extendable{ private URIResolver resolver; private HTML5Deck deck; private ServerJSDeck vm; private URIHandler pathFinderHandler; private URIHandler html5Handler; private URIHandler html5partsHandler; private URIHandler jsHandler; private URIHandler resolverHandler; private URIHandler handler; public DefaultHandler(PortingService services) { this.resolver = services.getURIResolver(); deck = new HTML5Deck(services); vm = new ServerJSDeck(resolver, deck); html5Handler = new HTML5Handler(services, deck); html5partsHandler = new HTML5PartsHandler(services, deck); jsHandler = new JavaScriptHandler(services, vm, deck); resolverHandler = new ResolverHandler(resolver); handler = new URIHandler() { @Override public boolean handle(HttpServletRequest request, HttpServletResponse response, String uri, String path, String pathArg, List<String> arg) { return mainHandle(request, response, uri, path, pathArg, arg); } }; pathFinderHandler = new PathFinderHandler(handler, resolver); } public void addExtension(Class c){ vm.addExtension(c); } public boolean mainHandle(HttpServletRequest request, HttpServletResponse response, String uri, String path, String leftpath, List<String> arg) { try { response.setCharacterEncoding("utf8"); if(uri.endsWith(".server.js") && jsHandler.handle(request, response, uri, path, leftpath, arg)){ return true; } if(jsHandler.handle(request, response, uri + ".server.js", path, leftpath, arg)){ return true; } if(uri.endsWith(".html") && html5Handler.handle(request, response, uri, path, leftpath, arg)){ return true; } if(html5Handler.handle(request, response, uri + ".html", path, leftpath, arg)){ return true; } if(uri.endsWith(".js") && html5partsHandler.handle(request, response, uri.substring(0, uri.length()-3) + ".html", path, leftpath, arg)){ return true; } } catch (Exception e) { e.printStackTrace(); } if(!uri.endsWith(".server.js") && resolverHandler.handle(request, response, uri, path, leftpath, arg)){ return true; } return false; } @Override public boolean handle(HttpServletRequest request, HttpServletResponse response, String uri, String path, String pathArg, List<String> arg) { if(pathFinderHandler.handle(request, response, uri, path, pathArg, arg)){ return true; } if(jsHandler.handle(request, response, "/404.server.js", path, pathArg, arg)){ return true; } if(html5Handler.handle(request, response, "/404.html", path, pathArg, arg)){ return true; } response.setStatus(404); return false; } }