/*
 * Copyright (c) 2011 NTT DATA Corporation
 */

package jp.terasoluna.batch.functionsample.b005;

import java.lang.reflect.Method;

/**
 * 操作ログ出力インタフェース。
 * 
 * 業務ロジックの実行直前と直後にBLogicLoggingInterceptorより logXxxBLogicメソッドが呼び出される。
 * 
 * DAOの実行直前と直後にBLogicLoggingInterceptorより logXxxDAOメソッドが呼び出される。
 * 
 * 
 */
public interface OperationLogger {

    /**
     * DAOの開始直前にログを出力する。
     * 
     * @param clazz DAOのクラス名
     * @param method DAOのメソッド名
     * @param argument DAOの引き数の配列
     */
    void logStartDAO(Class<?> clazz, Method method, Object[] argument);

    /**
     * DAOの正常終了直後にログを出力する。
     * 
     * @param clazz DAOのクラス名
     * @param method DAOのメソッド名
     * @param argument DAOの引き数の配列
     * @param ret DAOの戻り値
     */
    void logEndDAO(Class<?> clazz, Method method, Object[] argument, Object ret);

    /**
     * DAOからの例外キャッチ時にログを出力する。
     * 
     * @param clazz DAOのクラス名
     * @param method DAOのメソッド名
     * @param argument DAOの引き数の配列
     * @param exception DAOからスローされた例外
     */
    void logExceptionDAO(Class<?> clazz, Method method, Object[] argument,
            Throwable exception);

    /**
     * BLogicの開始直前にログを出力する。
     * 
     * @param clazz BLogicのクラス名
     * @param method BLogicのメソッド名
     * @param argument BLogicの引き数の配列
     */
    void logStartBLogic(Class<?> clazz, Method method, Object[] argument);

    /**
     * BLogicの正常終了直後にログを出力する。
     * 
     * @param clazz BLogicのクラス名
     * @param method BLogicのメソッド名
     * @param argument BLogicの引き数の配列
     * @param ret BLogicの戻り値
     */
    void logEndBLogic(Class<?> clazz, Method method, Object[] argument,
            Object ret);

    /**
     * BLogicからの例外キャッチ時にログを出力する。
     * 
     * @param clazz BLogicのクラス名
     * @param method BLogicのメソッド名
     * @param argument BLogicの引き数の配列
     * @param exception BLogicからスローされた例外
     */
    void logExceptionBLogic(Class<?> clazz, Method method, Object[] argument,
            Throwable exception);
}
