package com.taobao.easyweb.core.groovy.metamethod; import com.alibaba.fastjson.JSON; import com.taobao.easyweb.core.context.ThreadContext; import groovy.json.JsonBuilder; import javax.servlet.http.HttpServletRequest; import java.util.Map; /** * Created with IntelliJ IDEA. * User: jimmey * Date: 13-3-26 * Time: ����11:40 * To change this template use File | Settings | File Templates. */ public class MetaMethodImpl implements IMetaMethod { @Override public Object invoke(String methodName, Object[] arguments) { if ("putContext".equals(methodName)) { putContext((String) arguments[0], arguments[1]); return Void.TYPE; } if ("toJson".equals(methodName)) { ThreadContext.getContext().getResponse().setContentType("application/json"); return JSON.toJSONString(arguments[0]); } if ("putAll".equals(methodName)) { putAll((Map<String, Object>) arguments[0]); return Void.TYPE; } if ("request".equals(methodName)) { return request(); } if ("getString".equals(methodName)) { if (arguments.length == 1) { return getString((String) arguments[0]); } else if (arguments.length == 2) { return getString((String) arguments[0], (String) arguments[1]); } } if ("getInt".equals(methodName)) { if (arguments.length == 1) { return getInt((String) arguments[0]); } else if (arguments.length == 2) { return getInt((String) arguments[0], (Integer) arguments[1]); } } if ("getLong".equals(methodName)) { if (arguments.length == 1) { return getLong((String) arguments[0]); } else if (arguments.length == 2) { return getLong((String) arguments[0], (Long) arguments[1]); } } if ("getArray".equals(methodName)) { return getArray((String) arguments[0]); } if ("toInt".equals(methodName)) { return toInt((String) arguments[0]); } if ("toLong".equals(methodName)) { return toLong((String) arguments[0]); } if ("setLayout".equals(methodName)) { setLayout((String) arguments[0]); return Void.TYPE; } if ("redirect".equals(methodName)) { ThreadContext.getContext().setRedirectTo((String) arguments[0]); return Void.TYPE; } if("setDownload".equals(methodName)){ ThreadContext.getContext().setDownload(true); return Void.TYPE; } return null; } public void putContext(String key, Object value) { ThreadContext.getContext().putContext(key, value); } public void setLayout(String layout) { if (layout.endsWith(".vm")) { ThreadContext.getContext().setLayout(layout); } } public void putAll(Map<String, Object> map) { ThreadContext.getContext().putAll(map); } public HttpServletRequest request() { return ThreadContext.getContext().getRequest(); } public String getString(String key) { return request().getParameter(key); } public String getString(String key, String defVal) { String v = getString(key); return v == null ? defVal : v; } public int getInt(String key) { String v = request().getParameter(key); return v != null ? toInt(v) : 0; } public int getInt(String key, int defVal) { int v = getInt(key); return v > 0 ? v : defVal; } public long getLong(String key) { String v = request().getParameter(key); return v != null ? toLong(v) : 0; } public long getLong(String key, long defVal) { long v = getLong(key); return v > 0 ? v : defVal; } /** * ��ȡ������� * * @param key * @return */ public String[] getArray(String key) { return request().getParameterValues(key); } /* String����������ת�� */ public int toInt(String string) { try { return Integer.valueOf(string); } catch (Exception e) { return 0; } } public long toLong(String string) { try { return Long.valueOf(string); } catch (Exception e) { return 0; } } }