package com.blinkcoder.kit; import com.blinkcoder.common.myConstants; import com.jfinal.core.JFinal; import org.apache.commons.lang3.StringUtils; import java.io.File; import java.text.SimpleDateFormat; import java.util.*; /** * User: Michael Chen * Email: yidongnan@gmail.com * Date: 13-12-17 * Time: 下午11:22 */ public class VelocityKit { private final static String VM_EXT = ".vm"; private final static String VM_INDEX = "/index" + VM_EXT; private final static List<String> vm_cache = new Vector<String>(); private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static String _MakeQueryString(String[] paths, int idx_base) { StringBuilder params = new StringBuilder(); int idx = 1; for (int i = idx_base; i < paths.length; i++) { if (params.length() == 0) params.append('?'); if (i > idx_base) params.append('&'); params.append("p"); params.append(idx++); params.append('='); params.append(paths[i]); } if (JFinal.me().getConstants().getDevMode()) { StringBuilder sb = new StringBuilder(); if (StringUtils.isNotEmpty(params)) { sb.append("UrlPara : ").append(params.substring(1)).append("\n"); } sb.append("--------------------------------------------------------------------------------\n"); System.out.println(sb); } return params.toString(); } private static Map<String, String> _MakeQueryMap(String[] paths, int idx_base) { Map<String, String> paramMap = new HashMap<String, String>(); int idx = 1; for (int i = idx_base; i < paths.length; i++) { paramMap.put("p" + idx++, paths[i]); } return paramMap; } /** * 判断某个页面是否存在,如果存在则缓存此结果 * * @param path * @return */ public static boolean _IsVmExist(String path) { if (vm_cache.contains(path)) { if (JFinal.me().getConstants().getDevMode()) { StringBuilder sb = new StringBuilder("\nJFinal Velocity Template report -------- ") .append(sdf.format(new Date())).append(" ------------------------------\n") .append("Velocity Template File : ").append(path); System.out.println(sb); } return true; } File testFile = new File(JFinal.me().getServletContext().getRealPath(path)); boolean isVM = testFile.exists() && testFile.isFile(); if (isVM) { vm_cache.add(path); if (JFinal.me().getConstants().getDevMode()) { StringBuilder sb = new StringBuilder("\nJFinal Velocity Template report -------- ") .append(sdf.format(new Date())).append(" ------------------------------\n") .append("Velocity Template File : ").append(path); System.out.println(sb); } } return isVM; } public static String GetTemplate(String[] paths, int length) { StringBuilder vm = new StringBuilder(myConstants.VELOCITY_TEMPLETE_PATH); if (length == 0) { if (JFinal.me().getConstants().getDevMode()) { StringBuilder sb = new StringBuilder("\nJFinal Velocity Template report -------- ") .append(sdf.format(new Date())).append(" ------------------------------\n") .append("Velocity Template File : ").append(vm.toString()).append(VM_INDEX); System.out.println(sb); } return vm.toString() + VM_INDEX + _MakeQueryString(paths, length); } for (int i = 0; i < length; i++) { if (!"".equals(paths[i])) { vm.append('/'); vm.append(paths[i]); } } String vms = vm.toString(); String the_path = vms; if (_IsVmExist(the_path + VM_EXT)) return the_path + VM_EXT + _MakeQueryString(paths, length); the_path += VM_INDEX; if (_IsVmExist(the_path)) return the_path + _MakeQueryString(paths, length); vms += VM_EXT; if (_IsVmExist(vms)) return vms + _MakeQueryString(paths, length); String view = GetTemplate(paths, length - 1); return view; } public static Map GetUrlParam(String[] paths, int length) { StringBuilder vm = new StringBuilder(myConstants.VELOCITY_TEMPLETE_PATH); if (length == 0) { return null; } for (int i = 0; i < length; i++) { if (!"".equals(paths[i])) { vm.append('/'); vm.append(paths[i]); } } String vms = vm.toString(); String the_path = vms; if (_IsVmExist(the_path + VM_EXT)) return _MakeQueryMap(paths, length); the_path += VM_INDEX; if (_IsVmExist(the_path)) return _MakeQueryMap(paths, length); vms += VM_EXT; if (_IsVmExist(vms)) return _MakeQueryMap(paths, length); return GetUrlParam(paths, length - 1); } }