package com.blinkcoder.kit; import com.blinkcoder.common.myConstants; import com.jfinal.core.JFinal; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.velocity.VelocityContext; import org.apache.velocity.tools.struts.StrutsLinkTool; import org.apache.velocity.tools.view.context.ViewContext; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * User: Michael Chen * Email: yidongnan@gmail.com * Date: 13-10-23 * Time: 下午6:25 */ public class LinkKit extends StrutsLinkTool { private VelocityContext velocity; public static String root() { return root("/"); } public static String root(String uri) { StringBuilder root = new StringBuilder(JFinal.me().getContextPath()); if (uri.length() > 0 && uri.charAt(0) != '/') root.append('/'); root.append(uri); return root.toString(); } public static String action(String uri) { if (uri.length() > 0 && uri.charAt(0) != '/') return root("/action/" + uri); return root("/action" + uri); } public static String cloud_res(String name) { if (name == null) return null; if (StringUtils.isNotEmpty(myConstants.STATIC_RESOURCE_PATH)) { StringBuilder sb; sb = new StringBuilder(myConstants.STATIC_RESOURCE_PATH); if (!name.startsWith("/")) sb.append('/'); sb.append(name); return sb.toString(); } else { return local_res(name); } } public static String local_res(String name) { return root(name); } public void init(Object obj) { super.init(obj); if (obj instanceof ViewContext) { ViewContext viewContext = (ViewContext) obj; velocity = (VelocityContext) viewContext.getVelocityContext(); } } public String param(String name, String... def_value) { String v = request.getParameter(name); if (v == null) { String target = request.getRequestURI(); String contextPath = request.getContextPath(); int contextPathLength = (contextPath == null || "/".equals (contextPath) ? 0 : contextPath.length()); if (contextPathLength != 0) target = target.substring(contextPathLength); String[] paths = target.split("/"); Map paramMap = VelocityKit.GetUrlParam(paths, paths.length); if (MapUtils.isNotEmpty(paramMap)) { v = (String) paramMap.get(name); } } return (v != null) ? v : ((def_value.length > 0) ? def_value[0] : null); } public long param(String name, long def_value) { return NumberUtils.toLong(param(name), def_value); } public int param(String name, int def_value) { return NumberUtils.toInt(param(name), def_value); } public byte param(String name, byte def_value) { return (byte) NumberUtils.toInt(param(name), def_value); } public String[] params(String name) { return request.getParameterValues(name); } public long[] lparams(String name) { String[] values = params(name); if (values == null) return null; List<Long> lvs = new ArrayList<Long>(); for (String v : values) { long lv = NumberUtils.toLong(v, Long.MIN_VALUE); if (lv != Long.MIN_VALUE && !lvs.contains(lvs)) lvs.add(lv); } long[] llvs = new long[lvs.size()]; for (int i = 0; i < lvs.size(); i++) llvs[i] = lvs.get(i); return llvs; } public String urlPara() { String[] urlPara = new String[1]; JFinal.me().getAction(request.getRequestURI(), urlPara); return urlPara[0] == null ? "" : urlPara[0]; } public String this_vm() { return velocity.getCurrentTemplateName(); } public boolean is_catalog_list() { return request.getRequestURI().startsWith("/catalog/"); } public boolean is_tag_list() { return request.getRequestURI().startsWith("/tag/"); } public boolean is_blog_detail() { return !is_catalog_list() && !is_tag_list() && param("p1") != null; } public boolean startWith(String str, String prefix) { return str.startsWith(prefix); } public void redirect(String url) throws IOException { response.sendRedirect(url); } }