Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 1997-2013, www.tinygroup.org (tinygroup@126.com). Licensed under the GPL, Version 3.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.gnu.org/licenses/gpl.html Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 package org.tinygroup.template.rumtime;
 
 
 import java.net.URI;
 import java.util.Map;

工具类,之所以起这么短是为了生成的代码短一些 Created by luoguo on 2014/6/4.
 
 public final class U {
     private static TemplateCache<MethodKeyMethodmethodCache = new TemplateCacheDefault<MethodKeyMethod>();
     private static TemplateCache<FieldKeyFieldfieldCache = new TemplateCacheDefault<FieldKeyField>();
     private static PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean();
     private static String[] tabCache = new String[31];
     private static boolean safeVariable = false;
 
     static {
         [0] = "";
         for (int i = 1; i < .i++) {
             [i] = String.format("%" + i * 4 + "s""");
         }
     }
 
     private U() {
     }
 
     public static boolean isSafeVariable() {
         return ;
     }
 
     public static void setSafeVariable(boolean safeVariable) {
         . = safeVariable;
     }

    
获取属性

Parameters:
object
name
Returns:
Throws:
org.tinygroup.template.TemplateException
 
     public static Object p(Object objectObject namethrows TemplateException {
         try {
             if (object instanceof Map) {
                 return ((Mapobject).get(name);
             }
             String fieldName = name.toString();
             MethodKey methodKey = getMethodKey(objectfieldName);
             if (.contains(methodKey)) {
                 return .get(methodKey).invoke(object);
             } else {
                 PropertyDescriptor descriptor =
                         .getPropertyDescriptor(objectfieldName);
                 if(descriptor!=null) {
                     Method method = MethodUtils.getAccessibleMethod(object.getClass(), descriptor.getReadMethod());
                     .put(methodKeymethod);
                     return method.invoke(object);
                 }
             }
             FieldKey fieldKey = getFieldKey(objectfieldName);
             if (.contains(fieldKey)) {
                 return .get(fieldKey).get(object);
             } else {
                 Field field=object.getClass().getField(fieldName);
                 if(field!=null) {
                      fieldobject.getClass().getField(fieldName);
                    .put(fieldKeyfield);
                    field.setAccessible(true);
                    return field.get(object);
                }
            }
            throw new TemplateException(object.getClass().getName()+"中不能找到"+fieldName+"的键值、属性。");
        } catch (Exception e) {
            throw new TemplateException(e);
        }
    }
    public static Object sp(Object objectObject namethrows TemplateException {
        if (object != null) {
            return p(objectname);
        }
        return null;
    }

    
获取

Parameters:
i18nVistor
key
Returns:
    public static String getI18n(I18nVisitor i18nVistorTemplateContext contextString key) {
        if (key == null) {
            return null;
        }
        if (i18nVistor == null) {
            return key;
        } else {
            return i18nVistor.getI18nMessage(contextkey);
        }
    }

    
进行方法调用

Parameters:
object
methodName
parameters
Returns:
Throws:
org.tinygroup.template.TemplateException
    public static Object c(Template templateTemplateContext contextObject objectString methodNameObject... parametersthrows TemplateException {
        try {
            TemplateFunction function = template.getTemplateEngine().getTemplateFunction(objectmethodName);
            if (function != null) {
                return executeExtendFunction(templatecontextobjectfunctionparameters);
            } else {
                //如果有缓冲,则用缓冲方式调用之
                return executeClassMethod(objectmethodNameparameters);
            }
        } catch (Exception e) {
            throw new TemplateException(e);
        }
    }
    private static Object executeClassMethod(Object objectString methodNameObject[] parametersthrows TemplateExceptionNoSuchMethodExceptionIllegalAccessExceptionInvocationTargetException {
        Method method = .get(getMethodKey(objectmethodName));
        //如果有缓冲,则用缓冲方式调用
        if (method != null) {
            return method.invoke(objectparameters);
        }
        return MethodUtils.invokeMethod(objectmethodNameparameters);
    }
    private static Object executeExtendFunction(Template templateTemplateContext contextObject objectTemplateFunction functionObject[] parametersthrows TemplateException {
        Object[] newParameters = new Object[(parameters == null ? 1 : parameters.length) + 1];
        newParameters[0] = object;
        if (parameters != null && parameters.length > 0) {
            System.arraycopy(parameters, 0, newParameters, 1, parameters.length);
        }
        return function.execute(templatecontextnewParameters);
    }

    
安全方法调用

Parameters:
object
methodName
parameters
Returns:
Throws:
org.tinygroup.template.TemplateException
    public static Object sc(Template templateTemplateContext contextObject objectString methodNameObject... parametersthrows TemplateException {
        if (object != null) {
            return c(templatecontextobjectmethodNameparameters);
        }
        return null;
    }
    public static Class<?>[] getParameterTypes(Class clazzString methodNamethrows TemplateException {
        for (Method method : clazz.getMethods()) {
            if (method.getName().equals(methodName)) {
                return method.getParameterTypes();
            }
        }
        throw new TemplateException(clazz.getName() + "中找不到方法:" + methodName);
    }

    
从上下文获取对应标识的值

Parameters:
context
key
Returns:
    public static Object v(Context contextObject key) {
            return context.get(key.toString());
    }


    
根据当前路径,计算新路径的绝对路径

Parameters:
currentPath
newPath
Returns:
    public static String getPath(String currentPathString newPath) {
        String path = newPath;
        URI uri = URI.create(currentPath);
        path = path.replaceAll("[\\\\]""/");
        URI newUri = uri.resolve(path);
        return newUri.getPath();
    }
    public static void dent(TemplateContext context) {
        Boolean compactMode = context.get("$compactMode");
        //如果没有设置或并且是紧凑模式
        if (compactMode != null && compactMode) {
            return;
        }
        Integer tab = context.get("$tab");
        if (tab != null) {
            context.put("$tab"tab + 1);
        } else {
            context.put("$tab", 1);
        }
    }
    public static void indent(TemplateContext context) {
        //如果没有设置或并且是紧凑模式
        Boolean compactMode = context.get("$compactMode");
        if (compactMode != null && compactMode) {
            return;
        }
        Integer tab = context.get("$tab");
        if (tab != null) {
            context.put("$tab"tab - 1);
        } else {
            context.put("$tab", 0);
        }
    }
    public static String getBlanks(TemplateContext context) {
        //如果没有设置或并且是紧凑模式
        Boolean compactMode = context.get("$compactMode");
        if (compactMode != null && compactMode) {
            return null;
        }
        Integer tab = context.get("$tab");
        if (tab != null) {
            if (tab < .) {
                return [tab];
            } else {
                return [. - 1];
            }
        }
        return null;
    }

    
进行Html转义

Parameters:
object
Returns:
    public static String escapeHtml(Object object) {
        if (object == null) {
            return null;
        }
        return StringUtils.replaceEach(object.toString(), new String[]{"&""\"""<"">"}, new String[]{"&amp;""&quot;""&lt;""&gt;"});
    }

    
判断布尔值是否成立

Parameters:
o
Returns:
    public static boolean b(Object o) {
        if (o == null) {
            return false;
        }
        if (o instanceof Boolean) {
            return ((Booleano).booleanValue();
        } else if (o instanceof String) {
            return ((Stringo).length() > 0;
        } else if (o instanceof Collection) {
            return ((Collectiono).size() > 0;
        } else if (o.getClass().isArray()) {
            return ArrayUtil.arrayLength(o) > 0;
        } else if (o instanceof Iterator) {
            return ((Iteratoro).hasNext();
        } else if (o instanceof Enumerator) {
            Enumerator e = (Enumeratoro;
            return e.hasMoreElements();
        } else if (o instanceof Map) {
            Map e = (Mapo;
            return e.size() > 0;
        }
        return true;
    }

    
访问数组类型的内容

Parameters:
object
indexObject 索引值
Returns:
Throws:
java.lang.Exception
    public static Object sa(Object objectObject indexObjectthrows TemplateException {
        if (object == null) {
            return null;
        } else {
            return a(objectindexObject);
        }
    }
    public static Object a(Object objectObject indexObjectthrows TemplateException {
        int index;
        if (object instanceof Map) {
            Map map = (Mapobject;
            return map.get(indexObject.toString());
        }
        if (indexObject instanceof Integer) {
            index = ((IntegerindexObject).intValue();
        } else if (indexObject instanceof Long) {
            index = ((LongindexObject).intValue();
        } else if (indexObject instanceof Double) {
            index = ((DoubleindexObject).intValue();
        } else if (indexObject instanceof Float) {
            index = ((FloatindexObject).intValue();
        } else if (indexObject instanceof Byte) {
            index = ((ByteindexObject).intValue();
        } else if (indexObject instanceof BigDecimal) {
            index = ((BigDecimalindexObject).intValue();
        } else {
            index = Integer.parseInt(indexObject.toString());
        }
        if (object.getClass().isArray()) {
            return Array.get(objectindex);
        } else if (object instanceof Collection) {
            Collection c = (Collectionobject;
            int i = 0;
            Iterator itc.iterator();
            while (i < c.size()) {
                Object o = it.next();
                if (i == index) {
                    return o;
                }
                i++;
            }
        } else {
            String o = object.toString();
            return o.charAt(index);
        }
        throw new TemplateException(object.getClass().getName() + "不可以用下标方式取值。");
    }
    Method getMethod(Object objectString methodName) {
        MethodKey key = getMethodKey(objectmethodName);
        if (.contains(key)) {
            return .get(key);
        }
        Method method = null;
        for (Method m : object.getClass().getMethods()) {
            if (m.getName().equals(methodName)) {
                if (method != null) {
                    //如果多次出现,则返回空,表示无法缓冲
                    method = null;
                    break;
                } else {
                    method = m;
                }
            }
        }
        .put(keymethod);
        return method;
    }
    private static MethodKey getMethodKey(Object objectString methodName) {
        return new MethodKey(object.getClass(), methodName);
    }
    private static FieldKey getFieldKey(Object objectString fieldName) {
        return new FieldKey(object.getClass(), fieldName);
    }
    static class FieldKey {
        FieldKey(Class clazzString fieldName) {
            this. = clazz;
            this. = fieldName;
        }
        private Class clazz;
        private String fieldName;
        public boolean equals(Object object) {
            if (!FieldKey.class.isInstance(object)) {
                return false;
            }
            FieldKey fieldKey = (FieldKeyobject;
            return fieldKey.clazz.equals() && fieldKey.fieldName.equals();
        }
        public int hashCode() {
            return .hashCode() + .hashCode();
        }
    }
    static class MethodKey {
        MethodKey(Class clazzString methodName) {
            this. = clazz;
            this. = methodName;
        }
        private Class clazz;
        private String methodName;
        public boolean equals(Object object) {
            if (!MethodKey.class.isInstance(object)) {
                return false;
            }
            MethodKey methodKey = (MethodKeyobject;
            return methodKey.clazz.equals() && methodKey.methodName.equals();
        }
        public int hashCode() {
            return .hashCode() + .hashCode();
        }
    }
New to GrepCode? Check out our FAQ X