/*
 * @(#)MessageDialog.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * メッセージダイアログ
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2001/02/21
 */
package jp.co.nri.rid.environment;

import java.io.*;
import java.util.*;

import java.awt.Component;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;

import jp.co.iti.fagot.ZApp;
import jp.co.iti.fagot.util.ZResource;
import jp.co.iti.fagot.util.ZDebug;
import jp.co.iti.fagot.util.ZInstance;


/**
 * メッセージダイアログ
 */

public class MessageDialog {

    /**
      * デフォルトコンストラクタ
      */
      public MessageDialog() {}

    /**
      * メッセージダイアログ
      *   表示するメッセージが１０行以上の場合はスクロールバー付きで表示する
      * 
      * @param  String      message         表示メッセージ
      * @param  String      content         内容
      * @param  int         type            メッセージタイプ<br>
      *                                     情報  ：JOptionPane.INFORMATION_MESSAGE<br>
      *                                     エラー：JOptionPane.ERROR_MESSAGE<br>
      *                                     警告　：JOptionPane.WARNING_MESSAGE<br>
      * @return void
      */
    public  static void showMessage(String message, String content, int type) {

        //メッセージをObjectに設定
        Object[]  obj = new Object[2];

        //表示メッセージ
        obj[0] = message;

		// *** fuku(STA) *** 20020927
		// メッセージ表示中フラグの設定
		// プロパティパネルや、表においてメッセージ表示中に再度メッセージを表示しないよう
		// 表示中フラグを設定する
		ZInstance.prop().putBoolean("messagedialog.isShowing",true);
		// *** fuku(END) *** 20020927


        //表示メッセージの内容
        //行数を求める [\n]改行数か10以上の場合は10固定とする
        StringTokenizer st = new StringTokenizer(content, "\n");
        if (st.countTokens() > 10) {
          // テキストエリアの生成
          JTextArea ta = new JTextArea(content);
          ta.setEditable(false); //編集不可
          ta.setRows(10);
          obj[1] = new JScrollPane(ta);
        } else {
          obj[1] =content;
        }

        //メッセージの表示
        JOptionPane.showMessageDialog(ZApp.getTheApp().getFrame(), obj, "Ridual", type);

		// *** fuku(STA) *** 20020927
		ZInstance.prop().putBoolean("messagedialog.isShowing",false);
		// *** fuku(END) *** 20020927

    }

    /**
      * 情報メッセージダイアログ
      *
      * @param  String      message         表示メッセージ
      * @param  String      content         内容
      * @return void
      */
    public  static void showInfo(String message, String content) {
        showMessage(message, content, JOptionPane.INFORMATION_MESSAGE);
    }

    /**
      * 情報メッセージダイアログ
      *
      * @param  String      message         表示メッセージ
      * @return void
      */
    public  static void showInfo(String message) {
        showMessage(message, "", JOptionPane.INFORMATION_MESSAGE);
    }

    /**
      * エラーメッセージダイアログ
      *
      * @param  String      message         表示メッセージ
      * @param  String      content         内容
      * @return void
      */
    public  static void showError(String message, String content) {
        showMessage(message, content, JOptionPane.ERROR_MESSAGE);
    }

    /**
      * エラーメッセージダイアログ
      *
      * @param  String      message         表示メッセージ
      * @return void
      */
    public  static void showError(String message) {
        showMessage(message, "", JOptionPane.ERROR_MESSAGE);
    }

    /**
      * 警告メッセージダイアログ
      *
      * @param  String      message         表示メッセージ
      * @param  String      content         内容
      * @return void
      */
    public  static void showWarning(String message, String content) {
        showMessage(message, content, JOptionPane.WARNING_MESSAGE);
    }
    /**
      * 警告メッセージダイアログ
      *
      * @param  String      message         表示メッセージ
      * @return void
      */
    public  static void showWarning(String message ) {
        showMessage(message, "", JOptionPane.WARNING_MESSAGE);
    }


    /**
      * 例外ダイアログ
      *
      * @param  String      message         表示メッセージ
      * @param  Throwable   status          例外クラス
      * @return void
      */
    public static void showException(String message, Throwable status) {

        ZResource res = ZApp.getTheApp().getResource();

        //ThrowableクラスがNULLの場合は成功
        if ( status == null) {
            showInfo(message,res.getString("msg.completed"));
        } else {
            String msg = "";

            if ((message == null) || (message == "")) {
                // 表示メッセージがnullの場合は、例外のメッセージを設定
                message = status.getMessage();
            } else {
                if ( (status.getMessage() == null) || (status.getMessage() == "")) {
                    // キャンセルボタンの場合
                    String cStr = status.toString();
                    if (cStr.indexOf("ThreadDeath") != -1) {
                        //「キャンセルされました」を設定
                        msg = res.getString("msg.cancel");
                    } else {
                        msg = status.toString();
                    }
                } else {
                    msg = status.getMessage();
                }
            }
            ZDebug.trace("showException >> " + message+res.getString("msg.mistake") + msg);
            showError(message+res.getString("msg.mistake"), msg);
        }
    }
}
