package com.jspxcms.core.support; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import com.jspxcms.common.freemarker.Freemarkers; import com.jspxcms.common.web.PageUrlResolver; import com.jspxcms.core.domain.Site; import com.jspxcms.core.domain.User; import freemarker.core.Environment; import freemarker.template.AdapterTemplateModel; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; /** * ForeContext * * @author liufang * */ public abstract class ForeContext { /** * 用户资源路径名 */ public static final String FILES = "_files"; /** * 用户资源路径 */ public static final String FILES_PATH = "/files"; /** * 前台资源路径名 */ public static final String FORE = "fore"; /** * 前台资源路径 */ public static final String FORE_PATH = "/fore"; /** * 站点 */ public static final String SITE = "site"; /** * 全局 */ public static final String GLOBAL = "global"; /** * 用户 */ public static final String USER = "user"; /** * 分页对象 */ public static final String PAGED_LIST = "pagedList"; public static void setData(Map<String, Object> data, User user, Site site, String url) { String ctx = site.getContextPath(); data.put(Constants.CTX, ctx != null ? ctx : ""); data.put(FILES, site.getFilesPath()); data.put(FORE, ctx != null ? ctx + FORE_PATH : FORE_PATH); data.put(USER, user); data.put(SITE, site); data.put(GLOBAL, site.getGlobal()); data.put(Freemarkers.URL, url); } public static void setData(Map<String, Object> data, HttpServletRequest request) { String url = getCurrentUrl(request); User user = Context.getCurrentUser(request); Site site = Context.getCurrentSite(request); setData(data, user, site, url); } public static void setPage(Map<String, Object> data, Integer page, PageUrlResolver pageUrlResolver, Page<?> pagedList) { if (page == null || page < 1) { page = 1; } data.put(Freemarkers.PAGE, page); if (pageUrlResolver != null) { data.put(Freemarkers.PAGE_URL_RESOLVER, pageUrlResolver); } if (pagedList != null) { data.put(PAGED_LIST, pagedList); } } public static void setPage(Map<String, Object> data, Integer page, PageUrlResolver pageUrlResolver) { setPage(data, page, pageUrlResolver, null); } public static void setPage(Map<String, Object> data, Integer page) { setPage(data, page, null, null); } public static String getCurrentUrl(HttpServletRequest request) { String uri = request.getRequestURI(); String queryString = request.getQueryString(); if (StringUtils.isNotBlank(queryString)) { uri += "?" + queryString; } return uri; } public static Site getSite(Environment env) throws TemplateModelException { TemplateModel model = env.getDataModel().get(SITE); if (model instanceof AdapterTemplateModel) { return (Site) ((AdapterTemplateModel) model) .getAdaptedObject(Site.class); } else { throw new TemplateModelException("\"" + SITE + "\" not found in DataModel"); } } public static Integer getSiteId(Environment env) throws TemplateModelException { return getSite(env).getId(); } /** * 页数线程变量 */ private static ThreadLocal<Integer> totalPagesHolder = new ThreadLocal<Integer>(); public static void setTotalPages(Integer totalPages) { totalPagesHolder.set(totalPages); } public static Integer getTotalPages() { return totalPagesHolder.get(); } public static void resetTotalPages() { totalPagesHolder.remove(); } }