/*
 * Copyright (C) 2005 NTT DATA Corporation
 * 
 */
package org.postgresforest.tool.util;

import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;

/**
 * コンソール出力クラス
 *
 * コンソールビューにログ及び、スタックトレースを出力する
 */
public class ConsoleLog {
	
    static MessageConsoleStream m_stream = getMessageConsoleStream();

    /**
     * @param message
     * @since 
     */
    public static void print(String message) {
        m_stream.print(message);
    }
    /**
     * 
     * @since 
     */
    public static void println() {
        m_stream.println();
    }
    /**
     * @param message
     * @since 
     */
    public static void println(String message) {
        m_stream.println(message);
    }
	
	/**
	 * コンソールビューにスタックトレースを出力する
	 * 
	 * @param e
	 */
	public static void printStackTrace(Throwable e){
		//コンソールストリームを取得
	    MessageConsoleStream stream = getMessageConsoleStream();
	    
	    //短い記述を出力
	    String message = e.toString();
	    
	    //スタックトレースを出力
        StackTraceElement[] trace = e.getStackTrace();
        for (int i=0; i < trace.length; i++){
        	message = message + "\n\tat " + trace[i];
        }

        stream.print(message + "\n");
	}
	
	/**
	 * コンソールストリーム取得処理
	 * 
	 * @return
	 */
	public static MessageConsoleStream getMessageConsoleStream(){
		//セッション･プロパティからコンソールを取得
		MessageConsole console = (MessageConsole)SessionProperty.get("console");
		if(console == null){
		    //コンソールマネージャにコンソールを追加
		    IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager(); 
		    console = new MessageConsole(Messages.getString("title.name"), null);
		    consoleManager.addConsoles(new IConsole[] {console});
		    
			//セッション･プロパティにコンソールを設定
		    SessionProperty.set("console", console);
		}
	    MessageConsoleStream stream = console.newMessageStream();

	    return stream;
	}
}
