Package org.eweb4j.orm.config

Source Code of org.eweb4j.orm.config.ORMConfigBeanUtil

package org.eweb4j.orm.config;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.OneToOne;

import org.eweb4j.cache.ORMConfigBeanCache;
import org.eweb4j.orm.config.bean.ORMConfigBean;
import org.eweb4j.orm.config.bean.Property;
import org.eweb4j.util.ReflectUtil;


public class ORMConfigBeanUtil {

  public static <T> Object getIdVal(T _t) throws IllegalArgumentException,
      IllegalAccessException, InvocationTargetException {
    String _idField = ORMConfigBeanUtil.getIdField(_t.getClass());
    ReflectUtil _ru = new ReflectUtil(_t);
    Method _idGetter = _ru.getGetter(_idField);
    return _idGetter.invoke(_t);
  }

  public static List<String> getFkColumn(Class<?> clazz, Class<?> fkClass) {

    String clsName = clazz.getSimpleName();
    Entity entity = clazz.getAnnotation(Entity.class);
    if (entity == null && !clsName.endsWith("PO")
        && !clsName.endsWith("POJO") && !clsName.endsWith("Entity")
        && !clsName.endsWith("Model")) {

      return null;
    }

    List<String> result = new ArrayList<String>();

    ReflectUtil ru;
    try {
      ru = new ReflectUtil(clazz);
      Field[] fields = ru.getFields();
      for (Field f : fields) {

        Method getter = ru.getGetter(f.getName());
        if (getter == null)
          continue;

        OneToOne oneAnn = getter.getAnnotation(OneToOne.class);
        if (oneAnn == null) {
          oneAnn = f.getAnnotation(OneToOne.class);
          if (oneAnn == null)
            continue;
        }
        Class<?> cls = f.getType();
        if (fkClass != null) {
          if (fkClass.isAssignableFrom(cls)) {
            String fk = oneAnn.mappedBy();
            result.add(fk);
            break;
          }
        } else {
          String fk = oneAnn.mappedBy();
          result.add(fk);
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

    return result.isEmpty() ? null : result;
  }

  public static String getIdColumn(Class<?> clazz) {
    return getId(clazz, 1);
  }

  public static String getIdField(Class<?> clazz) {
    return getId(clazz, 2);
  }

  /**
   * 获取自增长的主键名字
   *
   * @param clazz
   * @param type
   *            1的时候获取的是数据库字段名,2的时候获取的是java类的属性名
   * @return
   */
  public static String getId(Class<?> clazz, int type) {
    String pk = "id";
    ORMConfigBean ormBean = ORMConfigBeanCache.get(clazz);
    if (ormBean == null)
      return pk;
   
    for (Property property : ormBean.getProperty()) {
      if (("true".equals(property.getPk()) || "1"
          .equals(property.getPk()))
          && ("true".equals(property.getAutoIncrement()) || "1"
              .equals(property.getAutoIncrement()))) {
        if (1 == type)
          pk = property.getColumn();
        else if (2 == type)
          pk = property.getName();

        break;
      }
    }

    return pk;
  }

  /**
   * get table name
   *
   * @param clazz
   * @return
   */
  public static String getTable(Class<?> clazz) {
    ORMConfigBean ormBean = ORMConfigBeanCache.get(clazz);
    String table = ormBean == null ? clazz.getSimpleName() : ormBean
        .getTable();
    return table;
  }

  public static String[] getColumns(Class<?> clazz) {
    return getColumnsOrFields(clazz, null, 3);
  }

  public static String[] getFields(Class<?> clazz) {
    return getColumnsOrFields(clazz, null, 4);
  }

  public static String[] getColumns(Class<?> clazz, String[] fields) {
    return getColumnsOrFields(clazz, fields, 1);
  }

  public static String getColumn(Class<?> clazz, String field) {
    return getColumns(clazz, new String[] { field })[0];
  }

  public static String[] getFields(Class<?> clazz, String[] columns) {
    return getColumnsOrFields(clazz, columns, 2);
  }

  public static String getField(Class<?> clazz, String column) {
    return getColumnsOrFields(clazz, new String[] { column }, 2)[0];
  }

  public static <T> String[] getValues(T _t) throws Exception {
    String[] fields = ORMConfigBeanUtil.getFields(_t.getClass());
    String[] values = new String[fields.length];
    ReflectUtil _ru = new ReflectUtil(_t);
    for (int i = 0; i < fields.length; i++) {
      Method getter = _ru.getGetter(fields[i]);
      Object val = getter.invoke(_t);
      if (val == null)
        continue;
      values[i] = String.valueOf(val);
    }

    return values;
  }

  public static <T> Object getValue(T _t, String field) throws Exception {
    String value = null;
    ReflectUtil _ru = new ReflectUtil(_t);
    Method getter = _ru.getGetter(field);
    Object val = getter.invoke(_t);
    if (val == null)
      return null;

    value = String.valueOf(val);

    return value;
  }

  /**
   * get columns through fields
   *
   * @param clazz
   * @param fields
   * @param type
   *            1.getColumns 2.getFields 3.allColumns 4.allFields
   *
   * @return
   */
  private static String[] getColumnsOrFields(Class<?> clazz, String[] strs,
      int type) {
    if (strs == null)
      strs = new String[] { "" };
    String[] result = strs.clone();
    List<String> list = new ArrayList<String>();
    ORMConfigBean ormBean = ORMConfigBeanCache.get(clazz);
    if (ormBean != null) {
      // String idColumn = getIdColumn(clazz);
      for (int i = 0; i < strs.length; i++) {
        boolean finished = false;
        List<Property> properties = ormBean.getProperty();
        for (Property p : properties) {
          if (finished)
            break;
          // if ((3 == type || 4 == type)
          // && idColumn.equals(p.getColumn()))
          // continue;
          switch (type) {
          case 1:
            if (p.getName().equals(strs[i])) {
              result[i] = p.getColumn();
              finished = true;
            }
            break;
          case 2:
            if (p.getColumn().equals(strs[i])) {
              result[i] = p.getName();
              finished = true;
            }
            break;
          case 3:
            list.add(p.getColumn());
            break;
          case 4:
            list.add(p.getName());
          }
        }
      }
    }

    return list.isEmpty() ? result : list.toArray(new String[] {});
  }
}
TOP

Related Classes of org.eweb4j.orm.config.ORMConfigBeanUtil

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.