/*
 * FindUniqのプロパティ
 * 
 * 2004/06/13 新規作成
 */

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;

/**
 * FindUniqのプロパティを表すクラスです。
 * 
 * @author 高木祐介
 */
public final class FindUniqProperties {

    /** 日時のフォーマット */
    private DateFormat dateFormat_ = DateFormat.getDateTimeInstance();

    /** 入力バッファのバイト数 */
    private int inputByteCount_ = 1024;

    /** 入出力のエンコーディング */
    private String encoding_ = "MS932";

    /**
     * プロパティファイルを読み込みます。
     */
    public FindUniqProperties() {
        load();
    }

    /**
     * 入力バッファサイズを取得します。
     * @return 入力バッファサイズ
     */
    public final int getInputByteCount() {
        return inputByteCount_;
    }

    /**
     * フォーマットに従って指定された日時を表す文字列を取得します。
     * @param date 日時
     * @return 指定された日時を表す文字列
     */
    public final String formatDate(Date date) {
        return dateFormat_.format(date);
    }

    /**
     * エンコーディングに従って入力ストリームを読み込むリーダを取得します。
     * @param in 入力ストリーム
     * @return リーダ
     * @throws UnsupportedEncodingException
     *  プロパティファイルで指定されたエンコーディングがサポートされていない場合
     */
    public final BufferedReader getReader(InputStream in) throws UnsupportedEncodingException {
        return new BufferedReader(new InputStreamReader(in, getEncoding()));
    }

    /**
     * エンコーディングに従って出力ストリームに書き込むライタを取得します。
     * @param out 出力ストリーム
     * @return ライタ
     * @throws UnsupportedEncodingException
     *  プロパティファイルで指定されたエンコーディングがサポートされていない場合
     */
    public final PrintWriter getWriter(OutputStream out) throws UnsupportedEncodingException {
        return new PrintWriter(new OutputStreamWriter(out, getEncoding()));
    }

    /**
     * 入出力エンコーディングを取得します。
     * @return 入出力エンコーディング
     */
    private final String getEncoding() {
        return encoding_;
    }

    /**
     * プロパティファイルを読み込みます。
     */
    private final void load() {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle("FindUniq");
            dateFormat_ = new SimpleDateFormat(bundle.getString("date.format"));
            inputByteCount_ = Integer.parseInt(bundle.getString("input.buffer.byte.count"));
            encoding_ = bundle.getString("encoding");
        } catch (Exception e) {
            e.printStackTrace();
        }
        Object[] messageParams = {new Integer(getInputByteCount())};
        System.out.println(MessageFormat.format("入力バッファサイズは{0}バイトです。", messageParams));
    }
}
