All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiongyingqi.util.PrintHelper Maven / Gradle / Ivy

The newest version!
package com.xiongyingqi.util;

import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.MessageFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by 瑛琪xiongyingqi.com on 2014/9/17 0017.
 */
public class PrintHelper {
    private Map commentMap;
    private Collection ignoreProperties;
    private String commentPattern = "{0}<{1}>";
    private String ignorePattern = "({0}=.*?,\\s*)|({0}=.*?])";
    private Pattern pattern = Pattern.compile("password=.*((,\\s)|])*");

    public static PrintHelper needComment() {
        PrintHelper printHelper = new PrintHelper();
        printHelper.commentMap = new HashMap();
        printHelper.ignoreProperties = new ArrayList();
        return printHelper;
    }

    public PrintHelper addComment(String word, String comment) {
        commentMap.put(word, comment);
        return this;
    }

    public PrintHelper ignoreProperty(String propertyName) {
        ignoreProperties.add(propertyName);
        return this;
    }

    private String buildContent(String content) {
        Set> entries = commentMap.entrySet();
        StringBuilder builder = new StringBuilder(content);

//        for (String ignoreProperty : ignoreProperties) {
//            handleIgnoreProperty(builder, ignoreProperty);
//        }

        for (Map.Entry entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            replaceWord(builder, key, value);
        }
        return builder.toString();
    }

    private void handleIgnoreProperty(StringBuilder builder, String propertyName) {
        String s = builder.toString();
        String patternStr = MessageFormat.format(ignorePattern, propertyName);
        Pattern pattern = Pattern.compile(patternStr);
        Matcher matcher = pattern.matcher(builder);
        while (matcher.find()) {
            s = matcher.replaceAll("");
        }

        builder.replace(0, builder.length(), s);
    }

    private String buildWordAndComment(String word, String comment) {
        String rs = MessageFormat.format(commentPattern, word, comment);
        return rs;
    }

    private void replaceWord(StringBuilder builder, String word, String comment) {
        String replacement = buildWordAndComment(word, comment);
        int fromIndex = 0;
        int index;
        while ((index = builder.indexOf(word, fromIndex)) > 0) {
            fromIndex = index + 1;
            builder.replace(index, index + word.length(), replacement);
        }
    }

    /**
     * 打印对象同时加入注释
     *
     * @param object
     */
    public void printC(Object object) {
        StackTraceElement[] stackTraceElements = StackTraceHelper.getStackTrace();
        StackTraceElement stackTraceElement = stackTraceElements[2]; // 调用本类的对象类型堆栈
        StringBuilder builder = new StringBuilder();
        builder.append(" ------------------------------------------------------------ ");
        builder.append(StringHelper.line());
        builder.append(StackTraceHelper
                .buildStackTrace(new StackTraceElement[]{stackTraceElement}));
        builder.append("    ");
        if (object == null) {
            builder.append("");
        } else {
            builder.append(object.getClass().getSimpleName());
            builder.append(" =============== ");
            String content = buildObjectToString(object);
            builder.append(buildContent(content));
        }
        builder.append(StringHelper.line());
        builder.append(" ------------------------------------------------------------ ");
        System.out.println(builder.toString());
    }

    private String buildObjectToString(Object object) {
        if (object == null) {
            return null;
        }

        Class clazz = object.getClass();

        StringBuilder builder = new StringBuilder();
        if (clazz.isArray()) {
            builder.append("[");
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++) {
                Object one = Array.get(object, i);
                builder.append(buildObjectToString(one));
                if (i < length - 1) {
                    builder.append(", ");
                }
            }
            builder.append("]");
//        } else if (clazz.getSuperclass() == Collection.class) {
//            builder.append("[");
//            Collection collection = (Collection) object;
//
//            int i = 0;
//            int length = collection.size();
//            for (Object o : collection) {
//                builder.append(buildObjectToString(o));
//                if (i < length - 1) {
//                    builder.append(", ");
//                }
//            }
//            builder.append("]");
        } else {
            builder.append(reflectToString(object));
        }
        return builder.toString();
    }


    /**
     * 使用反射机制自动ToString 
* 2013-8-28 下午3:16:40 * * @param object * @return */ public String reflectToString(Object object) { if (object == null) { return null; } Class clazz = object.getClass(); StringBuilder builder = new StringBuilder(clazz.getName()); builder.append("@"); builder.append(Integer.toHexString(object.hashCode())); builder.append("["); Set methods = new LinkedHashSet(); Collection classes = EntityHelper.getAllSuperClassesOfClass(clazz); for (Iterator iterator = classes.iterator(); iterator.hasNext(); ) { Class claxx = (Class) iterator.next(); Method[] clazzMethods = claxx.getDeclaredMethods(); for (int i = 0; i < clazzMethods.length; i++) { Method method = clazzMethods[i]; methods.add(method); } } // for (int i = 0; i < methods.length; i++) { // Method method = methods[i]; for (Iterator iterator = methods.iterator(); iterator.hasNext(); ) { Method method = (Method) iterator.next(); String methodName = method.getName(); if (methodName.startsWith("get") && !Modifier.isStatic(method.getModifiers()) && Modifier.isPublic(method.getModifiers())) { try { Object value = method.invoke(object); String propertyName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4); if (propertyName.equals("class") || ignoreProperties.contains(propertyName)) {// 忽略getClass方法 continue; } builder.append(propertyName); builder.append("="); if (value == null) { builder.append(""); } else { if (value.getClass().isArray()) { int arraySuperLength = Array.getLength(value); builder.append("{"); for (int j = 0; j < arraySuperLength; j++) { Object object2 = Array.get(value, j); builder.append(object2.toString()); if (j < arraySuperLength - 1) { builder.append(", "); } } builder.append("}"); } else { builder.append(value.toString()); } } builder.append(", "); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } } if (builder.toString().contains(", ")) { builder.replace(builder.length() - 2, builder.length(), ""); } builder.append("]"); return builder.toString(); } /** * 打印对象详情
* 2013-8-26 下午2:45:02 * * @param object */ public static void printDetail(Object object) { StackTraceElement[] stackTraceElements = StackTraceHelper.getStackTrace(); StackTraceElement stackTraceElement = stackTraceElements[2]; // 调用本类的对象类型堆栈 StringBuilder builder = new StringBuilder(); builder.append(" ------------------------------------------------------------ "); builder.append(StringHelper.line()); builder.append(StackTraceHelper .buildStackTrace(new StackTraceElement[]{stackTraceElement})); builder.append(" "); if (object == null) { builder.append(""); } else { builder.append(object.getClass().getSimpleName()); builder.append(" =============== "); builder.append(EntityHelper.reflectToString(object)); } builder.append(StringHelper.line()); builder.append(" ------------------------------------------------------------ "); System.out.println(builder.toString()); } /** * 打印对象,
* 2013-8-26 下午2:45:02 * * @param object */ public static void print(Object object) { StackTraceElement[] stackTraceElements = StackTraceHelper.getStackTrace(); StackTraceElement stackTraceElement = stackTraceElements[2]; // 调用本类的对象类型堆栈 StringBuilder builder = new StringBuilder(); builder.append(" ------------------------------------------------------------ "); builder.append(StringHelper.line()); builder.append(StackTraceHelper .buildStackTrace(new StackTraceElement[]{stackTraceElement})); builder.append(" "); if (object == null) { builder.append(""); } else { builder.append(object.getClass().getSimpleName()); builder.append(" =============== "); builder.append(EntityHelper.buildObjectToString(object)); } builder.append(StringHelper.line()); builder.append(" ------------------------------------------------------------ "); System.out.println(builder.toString()); } public static void print() { StackTraceElement[] stackTraceElements = StackTraceHelper.getStackTrace(); StackTraceElement stackTraceElement = stackTraceElements[2]; // 调用本类的对象类型堆栈 StringBuilder builder = new StringBuilder(); builder.append(" ------------------------------------------------------------ "); builder.append(StringHelper.line()); builder.append(StackTraceHelper .buildStackTrace(new StackTraceElement[]{stackTraceElement})); builder.append(" "); builder.append(StringHelper.line()); builder.append(" ------------------------------------------------------------ "); System.out.println(builder.toString()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy