Package org.eweb4j.orm.config

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

package org.eweb4j.orm.config;

import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.eweb4j.config.ConfigConstant;
import org.eweb4j.orm.annotation.Pk;
import org.eweb4j.orm.config.bean.ORMConfigBean;
import org.eweb4j.orm.config.bean.Property;
import org.eweb4j.util.ReflectUtil;
import org.eweb4j.util.xml.BeanXMLUtil;


/**
* 将ORM配置信息写入xml文件
*
* @author cfuture.aw
* @since v1.a.0
*/
public class ORMConfigBeanWriter {
  /**
   * 将Class集合写入到目标xml文件中
   *
   * @param filePath
   *            文件相对路径
   * @param list
   * @return
   */
  public static String write(String filePath, List<Class<?>> list) {
    String error = null;
    if (filePath != null && list != null && !list.isEmpty()) {
      Class<?>[] clss = new Class<?>[list.size()];
      for (int i = 0; i < list.size(); ++i) {
        clss[i] = list.get(i);
      }

      error = write(filePath, clss);
    }

    return error;
  }

  /**
   * 将某个Class写入到目标xml文件中
   *
   * @param filePath
   *            文件相对路径
   * @param clazzs
   * @return
   */
  public static String write(String filePath, Class<?>... clazzs) {
    String error = null;
    File file = new File(ConfigConstant.CONFIG_BASE_PATH + filePath);

    if (filePath != null && clazzs != null && clazzs.length > 0) {
      List<ORMConfigBean> ormList = new ArrayList<ORMConfigBean>();
      try {
        for (int i = 0; i < clazzs.length; ++i) {
          Class<?> clazz = clazzs[i];
          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;
          }
         
          Table tableAnn = clazz.getAnnotation(Table.class);
          String table = tableAnn == null ? "" :tableAnn.name();
          table = "".equals(table.trim()) ? clsName
              : table;
          ORMConfigBean ormBean = new ORMConfigBean();
          ormBean.setClazz(clazz.getName());
          ormBean.setId(clazz.getSimpleName());
          ormBean.setTable(table);
          ReflectUtil ru;

          ru = new ReflectUtil(clazz);
          List<Property> pList = new ArrayList<Property>();
          for (Field f : ru.getFields()) {
            String name = f.getName();
            Method getter = ru.getGetter(name);
            Column colAnn = getter.getAnnotation(Column.class);
            if (colAnn == null) {
              colAnn = f.getAnnotation(Column.class);
              if (colAnn == null)
                continue;
            }

            Id idAnn = f.getAnnotation(Id.class);
            if (idAnn == null){
              idAnn = getter.getAnnotation(Id.class);
              if (idAnn == null)
                continue;
            }
           
            Property p = new Property();
            p.setAutoIncrement("1");
            p.setPk("1");
           
            Pk pkAnn = f.getAnnotation(Pk.class);
           
            if (pkAnn != null) {
              p.setPk("1");
            }
           
            String column = colAnn.name();
            column = "".equals(column.trim()) ? name : column;
            p.setName(name);
            p.setColumn(column);
            p.setType(f.getType().getName());
            pList.add(p);
          }
          ormBean.setProperty(pList);
          ormList.add(ormBean);
        }

        BeanXMLUtil.getBeanXMLWriter(file, ormList).write();
      } catch (Exception e) {
        error = e.getMessage();
        e.printStackTrace();
      }

    } else {
      error = "Class参数不能为空";
    }

    return error;
  }

  /**
   * 将某个包下的所有Class类写入到目标xml文件中
   *
   * @param filePath
   *            文件相对路径
   * @param packageName
   *            包名
   * @return
   */
  public static String write(String filePath, String packageName) {
    String error = null;
    String result;
    List<Class<?>> list = new ArrayList<Class<?>>();
    StringBuilder sb = new StringBuilder(ConfigConstant.CONFIG_BASE_PATH);
    sb.append(File.separator).append("classes");
    for (String t : packageName.split("\\.")) {
      sb.append(new StringBuilder(File.separator).append(t).toString());
    }
    File file = new File(sb.toString());
    File listFile[] = file.listFiles();
    for (File f : listFile) {
      if (f.getName().endsWith(".class")) {
        result = new StringBuilder(packageName)
            .append(".")
            .append(f.getName())
            .toString()
            .substring(
                0,
                new StringBuilder(packageName).append(".")
                    .append(f.getName()).toString()
                    .lastIndexOf("."));
        try {
          list.add(Class.forName(result));
        } catch (ClassNotFoundException e) {
          e.printStackTrace();
        }
      }
    }
    error = write(filePath, list);
    return error;
  }
}
TOP

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

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.