package com.jspxcms.core.generatepage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import com.jspxcms.common.freemarker.Freemarkers; import com.jspxcms.common.web.PathResolver; import com.jspxcms.core.domain.Info; import com.jspxcms.core.domain.Node; import com.jspxcms.core.domain.Site; import com.jspxcms.core.support.ForeContext; import com.jspxcms.core.support.TitleText; import freemarker.ext.servlet.FreemarkerServlet; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; /** * PInfo * * @author liufang * */ public abstract class PInfo { public static void generate(Info info, Configuration config, PathResolver resolver) throws IOException, TemplateException { if (info == null || !info.getGenerate()) { return; } Site site = info.getSite(); Node node = info.getNode(); List<TitleText> textList = info.getTextList(); Template template = config.getTemplate(info.getTemplate()); Map<String, Object> rootMap = new HashMap<String, Object>(); rootMap.put(FreemarkerServlet.KEY_APPLICATION, Collections.EMPTY_MAP); rootMap.put(FreemarkerServlet.KEY_SESSION, Collections.EMPTY_MAP); rootMap.put(FreemarkerServlet.KEY_REQUEST, Collections.EMPTY_MAP); rootMap.put(Freemarkers.KEY_PARAMETERS, Collections.EMPTY_MAP); rootMap.put(Freemarkers.KEY_PARAMETER_VALUES, Collections.EMPTY_MAP); rootMap.put("info", info); rootMap.put("node", node); TitleText titleText; List<String> items = new ArrayList<String>(1); items.add(null); Pageable pa; int total = textList.size(); for (int page = 1; page <= total; page++) { titleText = textList.get(page - 1); String path = info.getUrlStatic(page, false, true); String filename = resolver.getPath(path); File file = new File(filename); file.getParentFile().mkdirs(); rootMap.put("title", titleText.getTitle()); rootMap.put("text", titleText.getText()); items.set(0, titleText.getText()); pa = new PageRequest(page, 1); Page<String> pagedList = new PageImpl<String>(items, pa, total); String url = info.getUrlStatic(page); ForeContext.setData(rootMap, null, site, url); ForeContext.setPage(rootMap, page, info, pagedList); FileOutputStream fos = null; Writer out = null; try { fos = new FileOutputStream(file); out = new OutputStreamWriter(fos, "UTF-8"); template.process(rootMap, out); } finally { if (out != null) { out.flush(); out.close(); } if (fos != null) { fos.close(); } } } } }