Package org.eweb4j.mvc.config.creator

Source Code of org.eweb4j.mvc.config.creator.ValidatorUtil

package org.eweb4j.mvc.config.creator;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eweb4j.mvc.action.annotation.ValField;
import org.eweb4j.mvc.action.annotation.ValMess;
import org.eweb4j.mvc.action.annotation.ValParam;
import org.eweb4j.mvc.action.annotation.ValParamName;
import org.eweb4j.mvc.action.annotation.Validator;
import org.eweb4j.mvc.config.bean.FieldConfigBean;
import org.eweb4j.mvc.config.bean.ParamConfigBean;
import org.eweb4j.mvc.config.bean.ValidatorConfigBean;
import org.eweb4j.mvc.validator.annotation.IgnoreVal;
import org.eweb4j.util.ClassUtil;
import org.eweb4j.util.ReflectUtil;
import org.eweb4j.util.StringUtil;


public class ValidatorUtil {
  /**
   * 读取注解中验证器部分
   *
   * @param actionIndex
   * @param validatorAnn
   * @param fieldAnn
   * @param paramAnn
   * @return
   */
  public static List<ValidatorConfigBean> readValidator(
      Validator validatorAnn, ValField valFieldAnn, ValMess valMessAnn,
      ValParamName paramName, ValParam paramAnn) {
    List<ValidatorConfigBean> vList = new ArrayList<ValidatorConfigBean>();
    String[] name = validatorAnn.value();
    String[] clsName = validatorAnn.clazz();

    for (int a = 0; a < name.length; ++a) {
      ValidatorConfigBean v = new ValidatorConfigBean();
      if (name != null && name.length > a)
        v.setName(StringUtil.parsePropValue(name[a]));

      if (clsName != null && clsName.length > a)
        v.setClazz(StringUtil.parsePropValue(clsName[a]));

      if (valMessAnn == null || valFieldAnn == null)
        continue;

      // 验证器数组下标
      int[] valIndex = valMessAnn.validator();
      // 需要验证的属性域数组下标
      int[] fieldIndex = valMessAnn.field();

      String[] valField = valFieldAnn.value();
      String[] mess = valMessAnn.value();

      List<String> fnamelist = new ArrayList<String>();
      for (int in : fieldIndex)
        fnamelist.add(StringUtil.parsePropValue(valField[in]));

      String[] fname = fnamelist.toArray(new String[] {});

      List<FieldConfigBean> fList = new ArrayList<FieldConfigBean>();
      for (int b = 0; b < valIndex.length; ++b) {
        if (valIndex[b] == a) {
          FieldConfigBean f = new FieldConfigBean();
          fList.add(f);
          f.setName(StringUtil.parsePropValue(fname[b]));
          f.setMessage(StringUtil.parsePropValue(mess[b]));

          if (paramAnn == null || paramName == null)
            continue;

          int[] pindex = paramAnn.valMess();
          int[] pnameIndex = paramAnn.name();
          String[] pnames = paramName.value();

          List<String> pnamelist = new ArrayList<String>();
          for (int in : pnameIndex)
            pnamelist.add(StringUtil.parsePropValue(pnames[in]));

          String[] pname = pnamelist.toArray(new String[] {});
          String[] pvalue = paramAnn.value();

          List<ParamConfigBean> pList = new ArrayList<ParamConfigBean>();
          for (int c = 0; c < pindex.length; ++c) {
            if (pindex[c] == b) {
              ParamConfigBean p = new ParamConfigBean();
              p.setName(StringUtil.parsePropValue(pname[c]));
              p.setValue(StringUtil.parsePropValue(pvalue[c]));
              pList.add(p);
            }
          }

          f.setParam(pList);

        }
      }

      v.setField(fList);
      vList.add(v);
    }

    return vList;
  }

  /**
   * 从Action属性中读取验证器配置
   *
   * @param <T>
   * @param fs
   * @return
   */
  public static <T> List<ValidatorConfigBean> readValidator(String scopeName,
      ReflectUtil ru, List<ValidatorConfigBean> vList,
      Set<Class<?>> hasCls) {
    if (ru == null)
      return null;

    Field[] fs = ru.getFields();
    if (fs == null)
      return null;

    if (vList == null)
      vList = new ArrayList<ValidatorConfigBean>();

    ValidatorConfigBean val = null;
    for (Field f : fs) {
      Method m = ru.getGetter(f.getName());
      if (m == null)
        continue;

      IgnoreVal iv = f.getAnnotation(IgnoreVal.class);
      if (iv != null)
        continue;

      if (ClassUtil.isPojo(f.getType())) {
        // 解决无限递归问题
        if (hasCls == null)
          hasCls = new HashSet<Class<?>>();

        if (!hasCls.contains(f.getType())) {
          hasCls.add(f.getType());
          scopeName = f.getName();
          try {
            readValidator(scopeName, new ReflectUtil(f.getType()),
                vList, hasCls);
            scopeName = null;
          } catch (Exception e) {
            continue;
          }
        }

        continue;
      }

      for (Annotation ann : f.getAnnotations()) {
        ValidatorCreator valCreator = ValidatorFactory.get(ann);
        if (valCreator == null)
          continue;
        String name = f.getName();
        if (scopeName != null && scopeName.length() > 0)
          name = scopeName + "." + name;

        val = valCreator.create(name, val);
        if (val != null) {
          vList.add(val);
        }
      }
    }

    scopeName = null;
    if (vList.size() > 0)
      return vList;

    return null;
  }
}
TOP

Related Classes of org.eweb4j.mvc.config.creator.ValidatorUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.