zoukankan      html  css  js  c++  java
  • 根据实体生成action文件

    package utils;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.lang.reflect.Field;
    import java.util.List;
    
    import entity.WorkExperience;
    
    /**
     * 生成action工具类
     * 
     * @author huang
     * 
     */
    public class FileCreateUtil {
    
        /**
         * 生成get方法
         * 
         * @param field
         * @return
         */
        public static StringBuffer get(Field field) {
            StringBuffer sb = new StringBuffer();
            String name = field.getName();
            String type = field.getType().getSimpleName();
            sb.append("public ");
            sb.append(type + " ");
            sb.append("get" + name.substring(0, 1).toUpperCase()
                    + name.substring(1));
            sb.append("()");
            sb.append("{\n ");
            sb.append("return ");
            sb.append("this.");
            sb.append(name + ";" + "\n");
            sb.append("}\n");
            return sb;
        }
    
        /**
         * 生成set方法
         * 
         * @param field
         * @return
         */
        public static StringBuffer set(Field field) {
            StringBuffer sb = new StringBuffer();
            String name = field.getName();
            String type = field.getType().getSimpleName();
            sb.append("public ");
            sb.append("void ");
            sb.append("set" + name.substring(0, 1).toUpperCase()
                    + name.substring(1));
            sb.append("(");
            sb.append(type + " " + name);
            sb.append(")");
            sb.append("{\n");
            sb.append("this." + name + "=" + name + ";" + "\n");
            sb.append("}\n");
            return sb;
        }
    
        /**
         * 生成私有属性
         * 
         * @param fields
         * @return
         */
        public static StringBuffer fields(List<Field> fields) {
            StringBuffer sb = new StringBuffer();
            if (fields != null && fields.size() > 0) {
                for (Field f : fields) {
                    String name = f.getName();
                    String type = f.getType().getSimpleName();
                    sb.append("private " + type + " " + name + ";" + "\n");
                }
            }
            return sb;
        }
    
        /**
         * 文件主体
         * 
         * @param clazz
         * @param absolutePackagePath
         * @return
         */
        public static StringBuffer classMain(Class clazz, String absolutePackagePath) {
            StringBuffer sb = new StringBuffer();
            sb.append("package " + absolutePackagePath + ";\n");
            List<Field> fields = EntityUtil.getCommonFields(clazz);
            if (fields != null && fields.size() > 0) {
                for (Field field : fields) {
                    if (field.getType().equals(java.util.Date.class)) {
                        sb.append("import java.util.Date;\n");
                        break;
                    }
                }
            }
            // sb.append("import " + clazz.getName() + ";\n");
            sb.append("import service.Service;\n");
            sb.append("import service.CriteriaService;\n");
            String simpleName = clazz.getSimpleName();
            sb
                    .append("public class " + simpleName
                            + "Action extends BaseAction{\n");
            sb.append(fields(fields));
            if (fields != null && fields.size() > 0) {
                for (Field field : fields) {
                    sb.append(get(field));
                    sb.append(set(field));
                }
            }
    
            sb.append("private Service service;\n");
            sb.append("private CriteriaService cservice;\n");
            sb.append("public Service getService(){\n return this.service;\n }\n");
            sb
                    .append("public CriteriaService getCservice(){\n return this.cservice;\n }\n");
            sb
                    .append("public void setService(Service service){\n this.service=service;\n }\n");
            sb
                    .append("public void setCservice(CriteriaService cservice){\n this.cservice=cservice;\n }\n");
            sb.append("}");
            System.out.println(sb.toString());
            return sb;
        }
    
        /**
         * 创建文件
         * 
         * @param clazz
         * @throws Exception
         * 
         */
        public static void makeFile(Class clazz, String genPackagepath,
                String absolutePackagePath) throws Exception {
            File file = new File("");
            String actionPackage = file.getAbsolutePath();
            String simpleName = clazz.getSimpleName();
            String dir = actionPackage + "/src/" + genPackagepath;
            /**
             * 生成文件夹
             */
            File dirFile = new File(dir + "/");
            if (!dirFile.exists()) {
                dirFile.mkdir();
            }
            /**
             * 生成文件
             */
            File f = new File(dir + simpleName + "Action.java");
            StringBuffer sb = classMain(clazz, absolutePackagePath);
            if (!f.exists()) {
                Writer writer = null;
                try {
                    writer = new OutputStreamWriter(new FileOutputStream(f),
                            "utf-8");
                    writer.write(sb.toString());
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                throw new Exception("对不起,文件已存在");
            }
        }
    
        /**
         * 使用方法
         * 
         * @param s
         */
        public static void main(String[] s) {
            try {
                makeFile(WorkExperience.class, "/action/", "action");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    package utils;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 实体的工具类
     * 
     * @author huang
     * 
     */
    public class EntityUtil {
    
        /**
         * 返回树节点含有指定注解的属性名称
         * 
         * @return
         */
        @SuppressWarnings("unchecked")
        private static String fieldName(Object object, Class anno, Boolean inhert) {
            String name = "";
            Class clazz = object.getClass();
            List<Field> fields = new ArrayList<Field>();
            Field[] fs1 = clazz.getDeclaredFields();
            if (inhert == true) {
                Field[] fs = clazz.getSuperclass().getDeclaredFields();
                if (fs != null && fs.length > 0) {
                    for (Field f : fs) {
                        fields.add(f);
                    }
                }
                for (Field f : fs1) {
                    fields.add(f);
                }
            } else {
                for (Field f : fs1) {
                    fields.add(f);
                }
            }
            if (fields.size() > 0) {
                for (Field f : fields) {
                    if (f.isAnnotationPresent(anno)) {
                        name = f.getName();
                        break;
                    }
                }
            }
            return name;
        }
    
        /**
         * 获取属性的方法
         * 
         * @return
         */
        @SuppressWarnings("unchecked")
        private static String fieldMethod(Object object, Class anno, Boolean inhert) {
            String methodName = "get"
                    + fieldName(object, anno, inhert).substring(0, 1).toUpperCase()
                    + fieldName(object, anno, inhert).substring(1);
            return methodName;
        }
    
        /**
         * 返回属性的值
         * 
         * @return
         * @throws SecurityException
         * @throws NoSuchMethodException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         * @throws InvocationTargetException
         */
        @SuppressWarnings("unchecked")
        public static Object fieldValue(Object object, Class anno, Boolean inhert)
                throws SecurityException, NoSuchMethodException,
                IllegalArgumentException, IllegalAccessException,
                InvocationTargetException {
            Class clazz = object.getClass();
            String idMethod = fieldMethod(object, anno, inhert);
            Method method = clazz.getMethod(idMethod);
            Object value = method.invoke(object) == null ? "" : method
                    .invoke(object);
            return value;
        }
    
        /**
         * 获取类中所有的属性
         * 
         * @param clazz
         * @return
         */
        public static List<Field> getClassFields(Class clazz) {
            List<Field> listFields = new ArrayList<Field>();
    
            Field[] fields = clazz.getDeclaredFields();
            Field[] fs = null;
            if (clazz.getSuperclass() != Object.class) {
                fs = clazz.getSuperclass().getDeclaredFields();
            }
            if (fs != null && fs.length > 0) {
                for (Field f : fs) {
                    listFields.add(f);
                }
            }
            for (Field f : fields) {
                listFields.add(f);
            }
            return listFields;
        }
    
        /**
         * 返回类中的基本数据类型的属性
         * 
         * @param clazz
         * @return
         */
        public static List<Field> getCommonFields(Class clazz) {
            List<Field> fs = getClassFields(clazz);
            List<Field> list = new ArrayList<Field>();
            if (fs != null && fs.size() > 0) {
                for (Field f : fs) {
                    if (f.getType().equals(java.lang.String.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(java.lang.Double.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(java.util.Date.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(java.lang.Long.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(java.lang.Integer.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(java.lang.Float.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(java.lang.Byte.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(int.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(float.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(double.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(float.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(boolean.class)) {
                        list.add(f);
                    }
                    if (f.getType().equals(byte.class)) {
                        list.add(f);
                    }
    
                }
            }
            return list;
        }
    }


    其主要是省去了手动生成action文件的麻烦,根据实体的相关属性,生成具有简单依赖关系的action

  • 相关阅读:
    bzoj3224
    [洛谷日报第62期]Splay简易教程 (转载)
    bzoj1588
    codeforces467C
    codeforces616B
    codeforces379C
    codeforces545C
    codeforces285C
    codeforces659C
    快读代码level.2
  • 原文地址:https://www.cnblogs.com/tatame/p/2567220.html
Copyright © 2011-2022 走看看