Package net.hasor.core

Source Code of net.hasor.core.Hasor

/*
* Copyright 2008-2009 the original 赵永春(zyc@hasor.net).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.hasor.core;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import net.hasor.core.context.StandardAppContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Hasor 基础工具包。
* @version : 2013-4-3
* @author 赵永春 (zyc@hasor.net)
*/
public abstract class Hasor {
    //
    public static <T extends EventListener> T pushStartListener(EventContext env, T eventListener) {
        env.pushListener(EventContext.ContextEvent_Started, eventListener);
        return eventListener;
    }
    public static <T extends EventListener> T addStartListener(EventContext env, T eventListener) {
        env.addListener(EventContext.ContextEvent_Started, eventListener);
        return eventListener;
    }
    /**用简易的方式创建{@link AppContext}容器。*/
    public static AppContext createAppContext() {
        return Hasor.createAppContext(StandardAppContext.DefaultSettings, new Module[0]);
    }
    /**用简易的方式创建{@link AppContext}容器。*/
    public static AppContext createAppContext(final Module... modules) {
        return Hasor.createAppContext(StandardAppContext.DefaultSettings, modules);
    }
    //
    /**用简易的方式创建{@link AppContext}容器。*/
    public static AppContext createAppContext(final String config) {
        return Hasor.createAppContext(config, new Module[0]);
    }
    /**用简易的方式创建{@link AppContext}容器。*/
    public static AppContext createAppContext(final String config, final Module... modules) {
        try {
            StandardAppContext app = new StandardAppContext(config);
            app.start(modules);
            return app;
        } catch (Throwable e) {
            if (e instanceof RuntimeException) {
                throw (RuntimeException) e;
            } else {
                throw new RuntimeException(e);
            }
        }
    }
    //
    /*----------------------------------------------------------------------------------------Log*/
    private static StackTraceElement onTrace() {
        StackTraceElement[] stackElements = Thread.currentThread().getStackTrace();
        StackTraceElement onCode = stackElements[4];
        return onCode;
    }
    private static String callerTrace() {
        StackTraceElement onCode = Hasor.onTrace();
        String callerClass = onCode.getClassName();
        return callerClass.substring(callerClass.lastIndexOf(".") + 1) + ":" + onCode.getMethodName();
    }
    private static String callerInfo() {
        StackTraceElement onCode = Hasor.onTrace();
        String callerClass = onCode.getClassName();
        return callerClass.substring(callerClass.lastIndexOf(".") + 1) + ":" + onCode.getMethodName();
    }
    private static String callerWarn() {
        StackTraceElement onCode = Hasor.onTrace();
        String callerClass = onCode.getClassName();
        return callerClass.substring(callerClass.lastIndexOf(".") + 1) + ":" + onCode.getMethodName();
    }
    private static String callerErr() {
        StackTraceElement onCode = Hasor.onTrace();
        //String callerClass = onCode.getClassName();
        return onCode.getFileName() + ":" + onCode.getLineNumber() + " - " + onCode.getMethodName();
    }
    private static Class<?> callerClass() {
        StackTraceElement onCode = Hasor.onTrace();
        try {
            return Class.forName(onCode.getClassName());
        } catch (Exception e) {
            return Hasor.class;
        }
    }
    private static String[] getStringArray(final Object... objects) {
        ArrayList<String> returnData = new ArrayList<String>();
        for (Object obj : objects) {
            if (obj == null) {
                returnData.add("null");
            } else {
                returnData.add(Hasor.logString(obj));
            }
        }
        return returnData.toArray(new String[returnData.size()]);
    }
    /**
     * 输出 <i><b>调试</b></i> 日志信息。该方法使用:<code>String.format(String, Object[])</code>方式实现。
     * @param string 要输出的日志信息,或将要输出的格式化日志信息。
     * @param params 需要被格式化的内容。
     */
    public static void logDebug(final String string, final Object... params) {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        if (!log.isDebugEnabled()) {
            return;
        }
        Object[] paramsStr = Hasor.getStringArray(params);
        log.debug(Hasor.callerInfo() + " ->> " + String.format(string, paramsStr));
    }
    public static void logDebug(final Object e) {
        Hasor.logDebug("%s", e);
    }
    /**
   
   
    /**
     * 输出 <i><b>错误</b></i> 日志信息。该方法使用:<code>String.format(String, Object[])</code>方式实现。
     * @param string 要输出的日志信息,或将要输出的格式化日志信息。
     * @param params 需要被格式化的内容。
     */
    public static void logError(final String string, final Object... params) {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        if (!log.isErrorEnabled()) {
            return;
        }
        Object[] paramsStr = Hasor.getStringArray(params);
        log.error(Hasor.callerErr() + " ->> " + String.format(string, paramsStr));
    }
    public static void logError(final Object e) {
        Hasor.logError("%s", e);
    }
    /**
     * 输出 <i><b>警告</b></i> 日志信息。该方法使用:<code>String.format(String, Object[])</code>方式实现。
     * @param string 要输出的日志信息,或将要输出的格式化日志信息。
     * @param params 需要被格式化的内容。
     */
    public static void logWarn(final String string, final Object... params) {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        if (!log.isWarnEnabled()) {
            return;
        }
        Object[] paramsStr = Hasor.getStringArray(params);
        log.warn(Hasor.callerWarn() + " ->> " + String.format(string, paramsStr));
    }
    public static void logWarn(final Object e) {
        Hasor.logWarn("%s", e);
    }
    /**
     * 输出 <i><b>消息</b></i> 日志信息。该方法使用:<code>String.format(String, Object[])</code>方式实现。
     * @param string 要输出的日志信息,或将要输出的格式化日志信息。
     * @param params 需要被格式化的内容。
     */
    public static void logInfo(final String string, final Object... params) {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        if (!log.isInfoEnabled()) {
            return;
        }
        Object[] paramsStr = Hasor.getStringArray(params);
        log.info(Hasor.callerInfo() + " ->> " + String.format(string, paramsStr));
    }
    public static void logInfo(final Object e) {
        Hasor.logInfo("%s", e);
    }
    /**
     * 输出 <i><b>Trace</b></i> 日志信息。该方法使用:<code>String.format(String, Object[])</code>方式实现。
     * @param string 要输出的日志信息,或将要输出的格式化日志信息。
     * @param params 需要被格式化的内容。
     */
    public static void logTrace(final String string, final Object... params) {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        if (!log.isTraceEnabled()) {
            return;
        }
        Object[] paramsStr = Hasor.getStringArray(params);
        log.info(Hasor.callerTrace() + " ->> " + String.format(string, paramsStr));
    }
    public static void logTrace(final Object e) {
        Hasor.logTrace("%s", e);
    }
    /**使用日志的方式格式化。*/
    public static String formatString(final String formatString, final Object... args) {
        Object[] paramsStr = Hasor.getStringArray(args);
        return String.format(formatString, paramsStr);
    }
    /**
     * 转换对象为字符串内容,用以打印目的。
     * @param object 将参数对象转换为可以作为日志输出的字符串内容。
     */
    public static String logString(final Object object) {
        if (object == null) {
            return "null";
        }
        //
        StringBuilder logString = new StringBuilder("");
        if (object instanceof Collection) {
            //
            Collection<?> coll = (Collection<?>) object;
            for (Object obj : coll) {
                logString.append(Hasor.logString(obj) + " , ");
            }
            if (logString.length() > 1) {
                logString.delete(logString.length() - 3, logString.length() - 1);
            }
            logString.insert(0, "[ ");
            logString.append("]");
        } else if (object.getClass().isEnum() == true) {
            //
            Enum<?> enumObj = (Enum<?>) object;
            logString.append(enumObj.name());
        } else if (object.getClass().isArray() == true) {
            //
            Object[] array = (Object[]) object;
            logString.append(Hasor.logString(Arrays.asList(array)));
        } else {
            //
            if (object instanceof Class) {
                logString.append(((Class<?>) object).getName());
            } else if (object instanceof Throwable) {
                Throwable err = (Throwable) object;
                StringWriter sw = new StringWriter();
                sw.append('\n');
                err.printStackTrace(new PrintWriter(sw));
                logString.append(sw.getBuffer());
            } else if (object instanceof URL) {
                URL url = (URL) object;
                try {
                    logString.append(URLDecoder.decode(url.toString(), "utf-8"));
                } catch (UnsupportedEncodingException e) {
                    logString.append(url.toString());
                }
            } else if (object instanceof URI) {
                URI uri = (URI) object;
                try {
                    logString.append(URLDecoder.decode(uri.toString(), "utf-8"));
                } catch (UnsupportedEncodingException e) {
                    logString.append(uri.toString());
                }
            } else {
                logString.append(object.toString());
            }
        }
        return logString.toString();
    }
    //
    /**是否输出 Trace 级日志。*/
    public static boolean isTraceLogger() {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        return log.isTraceEnabled();
    }
    /**是否输出 Debug 级日志。*/
    public static boolean isDebugLogger() {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        return log.isDebugEnabled();
    }
    /**是否输出 Error 级日志。*/
    public static boolean isErrorLogger() {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        return log.isErrorEnabled();
    }
    /**是否输出 Warning 级日志。*/
    public static boolean isWarningLogger() {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        return log.isWarnEnabled();
    }
    /**是否输出 Info 级日志。*/
    public static boolean isInfoLogger() {
        Logger log = LoggerFactory.getLogger(Hasor.callerClass());
        return log.isInfoEnabled();
    }
    //
    /*---------------------------------------------------------------------------------------Util*/
    /**如果参数为空会抛出 NullPointerException 异常。*/
    public static <T> T assertIsNotNull(final T object) {
        return Hasor.assertIsNotNull(object, ""); //$NON-NLS-1$
    }
    /**如果参数为空会抛出 NullPointerException 异常。*/
    public static <T> T assertIsNotNull(final T object, final String message) {
        if (object == null) {
            throw new NullPointerException("null argument:" + message); //$NON-NLS-1$
        }
        return object;
    }
}
TOP

Related Classes of net.hasor.core.Hasor

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.