/*
 * @(#)ZMessage.java
 *
 * Copyright 2000 by Intelligent Technology Inc. All rights reserved.
 */
package jp.co.iti.fagot.util;

import java.awt.Window;
import java.awt.Component;

import javax.swing.JOptionPane;

import jp.co.iti.fagot.IZApp;
import jp.co.iti.fagot.ZApp;
import jp.co.iti.fagot.util.ZResource;
import jp.co.iti.fagot.util.ZUIUtil;
/**
 * メッセージボックスを表示します。
 *
 * @author  福島康治
 * @version 1.01 2000/12/01
 */
public class ZMessage {
	/**
	 * 確認メッセージを表示します
	 * @param parent 親コンポーネント
	 * @param szKey  メッセージキー
	 */
	static public void showMessage(Component parent,String szKey) {
	String szMsg   = getMessage(szKey);
	String szTitle = getTitle(szKey);
	int    nType   = getType(szKey);
	Window win     = ZUIUtil.getParentWindow(parent);
	JOptionPane.showMessageDialog(win,szMsg,szTitle,nType);
	}

	/**
	 * 確認メッセージを表示します
	 * @param parent 親コンポーネント
	 * @param szKey  メッセージキー
	 * @param szMessage  追加メッセージ
	 */
	static public void showMessage(
		Component parent,String szKey,String szMessage) {
	String szMsg   = getMessage(szKey)+"\n"+szMessage;
	String szTitle = getTitle(szKey);
	int    nType   = getType(szKey);
	Window win     = ZUIUtil.getParentWindow(parent);
	JOptionPane.showMessageDialog(win,szMsg,szTitle,nType);
	}

	/**
	 * 確認メッセージを表示します(yes/no)を問い合わせます
	 * @param parent 親コンポーネント
	 * @param szKey  メッセージキー
	 */
	static public boolean showConfirmDialog(Component parent,String szKey) {
	String szMsg   = getMessage(szKey);
	String szTitle = getTitle(szKey);
	int    nType   = getType(szKey);
	Window win     = ZUIUtil.getParentWindow(parent);
	int result = JOptionPane.showConfirmDialog(win,szMsg,szTitle,nType);
	return (result==JOptionPane.YES_OPTION);
	}

	/**
	 * 確認メッセージを表示します(yes/no/cancel)を問い合わせます
	 * @param parent 親コンポーネント
	 * @param szKey  メッセージキー
	 */
	static public int showConfirmDialog3(Component parent,String szKey) {
	String szMsg   = getMessage(szKey);
	String szTitle = getTitle(szKey);
	int    nType   = getType(szKey);
	Window win     = ZUIUtil.getParentWindow(parent);
	return JOptionPane.showConfirmDialog(win,szMsg,szTitle,nType);
	}

	/**
	 * 文字列入力を促進します
	 * @param parent 親コンポーネント
	 * @param szKey  メッセージキー
	 */
	static public String showInputDialog(Component parent,String szKey) {
	String szMsg   = getMessage(szKey);
	String szTitle = getTitle(szKey);
	int    nType   = getType(szKey);
	Window win     = ZUIUtil.getParentWindow(parent);
	return JOptionPane.showInputDialog(win,szMsg,szTitle,nType);
	}

	//## 内部関数 #####################################################
	/**
	 * メッセージを取得する内部関数
	 * @param szKey メッセージキー
	 */
	static protected String getMessage(String szKey) {
	String szRet = szKey;
	ZResource res = getResource();
	if ( res != null ) {
		szRet = res.getString(PFX_MSG+szKey+SFX_MSG);
		if ( szRet == null ) {
			szRet = "message is not specified("+szKey+")";
		}
	}
	return szRet;
	}

	/**
	 * タイトルを取得する内部関数
	 * @param szKey メッセージキー
	 */
	static protected String getTitle(String szKey) {
	String szRet = szKey;
	ZResource res = getResource();
	if ( res != null ) {
		szRet = res.getString(PFX_MSG+szKey+SFX_TTL);
		if ( szRet == null ) {
			szRet = "title is not specified("+szKey+")";
		}
	}
	return szRet;
	}

	/**
	 * タイプを取得する内部関数
	 * @param szKey メッセージキー
	 */
	static protected int getType(String szKey) {
	int nType = JOptionPane.INFORMATION_MESSAGE;
	ZResource res = getResource();
	if ( res != null ) {
		String szType = res.getString(PFX_MSG+szKey+SFX_TYPE);
		if ( szType != null ) {
			if ( szType.equals("ERROR") ) {
				nType = JOptionPane.ERROR_MESSAGE;
			} else if ( szType.equals("INFORMATION") ) {
				nType = JOptionPane.INFORMATION_MESSAGE;
			} else if ( szType.equals("WARNING") ) {
				nType = JOptionPane.WARNING_MESSAGE;
			} else if ( szType.equals("QUESTION") ) {
				nType = JOptionPane.QUESTION_MESSAGE;
			} else if ( szType.equals("PLAIN") ) {
				nType = JOptionPane.PLAIN_MESSAGE;

			} else if ( szType.equals("YES_NO_OPTION") ) {
				nType = JOptionPane.YES_NO_OPTION;
			}
		}
	}
	return nType;
	}


	/**
	 * リソースを取得する内部関数
	 */
	static protected ZResource getResource() {
	ZResource res = null;
	IZApp app = ZApp.getTheApp();
	if ( app != null ) {
		res = app.getResource();
	}
	return res;
	}

	//## アトリビュート ###############################################
	/**
	 * メッセージプレフィックス
	 */
    private static final String PFX_MSG    = "msg.";

    private static final String SFX_MSG    = ".message";
    private static final String SFX_TTL    = ".title";
    private static final String SFX_TYPE   = ".type";
}
