package foundation.route; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import foundation.translator.Translator; public abstract class RouteNavigator { protected static Logger logger; protected HttpServletRequest request; protected ClientAcceptType clientAcceptType; protected String uri; protected String path; protected Route route; protected Route redirectTo; protected boolean authorizeSensitive; protected boolean debugEnabled; static { logger = LogManager.getLogger(); } public RouteNavigator(HttpServletRequest request, String uri, String path, Route route, boolean authorizeSensitive) { this.request = request; this.clientAcceptType = ClientAcceptType.getInstance(request); this.uri = uri; this.path = path; this.route = route; this.authorizeSensitive = authorizeSensitive; debugEnabled = !Translator.toBoolean(request.getParameter("silent"), false); } public abstract void sendTo(HttpServletResponse response, Object... args); public void onSendToError(Exception e) { // TODO Auto-generated method stub } public ClientAcceptType getClientAcceptType() { return clientAcceptType; } public void redirectToTimeOut(HttpServletResponse response, ClientAcceptType acceptType) { redirectTo = RouteTable.getTimeOutRoute(); redirectTo(response, redirectTo, acceptType); } public void redirectToInvalidUserRight(HttpServletResponse response, ClientAcceptType acceptType) { redirectTo = RouteTable.getInvalidUserRightRoute(); redirectTo(response, redirectTo, acceptType); } private void redirectTo(HttpServletResponse response, Route route, ClientAcceptType acceptType) { if (ClientAcceptType.Ajax == clientAcceptType) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); response.setHeader("Access-Control-Max-Age", "0"); response.setHeader("Cache-Control","no-cache"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("XDomainRequestAllowed","1"); response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token"); response.setHeader("access-control-expose-headers", "Authorization"); } PrintWriter writer; try { writer = response.getWriter(); ((WriterRoute)route).write(writer, acceptType); } catch (Exception e) { } } public Route getRoute() { return route; } public boolean isAuthorizeSensitive() { return authorizeSensitive; } public String getUri() { return uri; } @Override public String toString() { return uri + " >> " + path + " : " + route.toString(); } public boolean isDebugEnabled() { return debugEnabled; } public void setDebugEnabled(boolean debugEnabled) { this.debugEnabled = debugEnabled; } }