package net.varkhan.serv.http.servlet;
import net.varkhan.base.containers.array.CharArrays;
import net.varkhan.core.pres.format.HtmlDocFormatter;
import net.varkhan.core.pres.format.HtmlFormatter;
import net.varkhan.core.pres.widget.page.Page;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 3/17/12
* @time 6:30 PM
*/
public class HtmlPageServlet extends HttpServlet {
protected Page<HtmlFormatter,String[],Map<String,String[]>> page;
public HtmlPageServlet() {
}
public HtmlPageServlet(Page<HtmlFormatter,String[],Map<String,String[]>> page) {
this.page=page;
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
render(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
render(req, resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
render(req, resp);
}
@SuppressWarnings({ "unchecked" })
protected void render(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HtmlDocFormatter fmt = new HtmlDocFormatter(resp.getWriter());
fmt.setBaseUrl(req.getServletPath());
String path=req.getPathInfo();
String[] loc;
if(path==null) loc = new String[0];
else {
if(path.startsWith("/")) path=path.substring(1);
if(path.endsWith("/")) path=path.substring(0,path.length()-1);
loc = CharArrays.split(path,'/',Integer.MAX_VALUE);
}
Map<String,String[]> par=(Map<String,String[]>) req.getParameterMap();
fmt.setTitle(page.title(loc,par));
Collection<String> cssurls = page.getLinks("cssurl", loc, par);
if(cssurls!=null) for(String url: cssurls) fmt.addCssUrl(url);
Collection<String> cssdefs = page.getLinks("cssdef", loc, par);
if(cssdefs!=null) for(String def: cssdefs) fmt.addCssDef(def);
fmt.open();
fmt.append("\n");
page.render(fmt, loc, par);
fmt.append("\n");
fmt.close();
}
}