パッケージ org.seasar.aptina.commons.message

プロパティファイルの代わりに列挙に記述されたメッセージを使用する ResourceBundle を提供します.

参照先:
          説明

インタフェースの概要
EnumMessageCode メッセージコードを定義した列挙が実装するインタフェースです.
 

クラスの概要
EnumMessageFormatter<T extends Enum<T> & EnumMessageCode> 列挙に定義された Formatter のパターンを使用してメッセージを組み立てるクラスです.
EnumMessageResourceBundle<T extends Enum<T> & EnumMessageCode> メッセージを定義した列挙を使用するリソースバンドルです.
EnumMessageTextFormatter<T extends Enum<T> & EnumMessageCode> 列挙に定義された MessageFormat のパターンを使用してメッセージを組み立てるクラスです.
 

パッケージ org.seasar.aptina.commons.message の説明

プロパティファイルの代わりに列挙に記述されたメッセージを使用する ResourceBundle を提供します.

メッセージコードを記述した列挙は, EnumMessageCode を実装し, 列挙定数ごとに 診断レベル と, ロケールごとのメッセージを持ちます. 列挙がサポートするメッセージのロケールは SUPORTED_LOCALES という名前の static フィールドに Locale の配列として定義します. SUPPORTED_LOCALES 配列には Locale.ROOT を含めるべきです. EnumMessageCode.getMessageFormat(int) の引数には, SUPPORTED_LOCALES 配列のインデックスがロケールとして渡されます.

メッセージを定義した列挙は次のようになります.

 public enum TestMessageCode implements EnumMessageCode {
     // 第 2 引数はルートロケールのメッセージ,第 3 引数は日本語ロケールのメッセージ
     XXXX(Kind.ERROR,   "Error",   "エラー"),
     YYYY(Kind.WARNING, "Warning", "警告"),
     ...
     ;
 
     /** サポートするロケールの配列 */
     public static final Locale[] SUPPORTED_LOCALES = new Locale[] {
             Locale.ROOT, Locale.JAPANESE };
 
     /** 診断の種類 */
     private final Kind kind;
 
     /** メッセージフォーマット */
     private final String[] messageFormats;
 
     /**
      * インスタンスを構築します.
      * 配列の要素は SUPPORTED_LOCALES 配列のロケールに対応するメッセージフォーマットです.
      * 
      * @param messageFormats
      *            メッセージフォーマットの配列
      */
     private TestMessageCode(final Kind kind, final String... messageFormats) {
         this.kind = kind;
         this.messageFormats = messageFormats;
     }
 
     /**
      * 診断の種類を返します.
      * 
      * @return 診断の種類
      */
     public Kind getKind() {
         return kind;
     }
 
     /**
      * 指定されたロケールのメッセージフォーマットを返します.
      * 
      * @param locale
      *            ロケール
      * @return 指定されたロケールのメッセージフォーマット
      */
     public String getMessageFormat(final int locale) {
         return messageFormats[locale];
     }
 }
 

列挙を指定して ResourceBundle を取得するには, EnumMessageResourceBundlestatic メソッドを使用します.

 ResourceBundle bundle = EnumMessageResourceBundle.getBundle(XxxMessageCode.class);
 

列挙の文字列表現をキーとしてメッセージを取得することができます.

 String message = bundle.getString(WARN.name());
 

列挙のメッセージとして Formatter のパターンを定義した場合は EnumMessageFormatter を使用することができます.

 public enum YyyMessageCode implements EnumMessageCode {
     E0000(Kind.ERROR, "Exception occurred : %1$s%n", "例外が発生しました : %1$s%n"),
     ...
 
 EnumMessageFormatter<YyyMessageCode> formatter = 
     new EnumMessageFormatter<TestMessageCode>(YyyMessageCode.class);
 String message = formatter.getMessage(E0000, e);
 

または, EnumMessageFormatter の出力先を指定してインスタンス化して使うこともできます.

 StringBuilder builder = new StringBuilder();
 EnumMessageFormatter<YyyMessageCode> formatter = 
     new EnumMessageFormatter<YyyMessageCode>(YyyMessageCode.class, builder);
 formatter.format(E0000, e); // builder にフォーマットされた文字列が追加される
 

列挙のメッセージとして MessageFormat のパターンを定義した場合は EnumMessageTextFormatter を使用することができます.

 public enum ZzzMessageCode implements EnumMessageCode {
     E0000(Kind.ERROR, "Exception occurred : {0}", "例外が発生しました : {0}"),
     ...
 
 EnumMessageTextFormatter<ZzzMessageCode> formatter = 
     new EnumMessageTextFormatter<ZzzMessageCode>(ZzzMessageCode.class);
 String message = formatter.getMessage(E0000, e);
 



Copyright © 2009-2010 The Seasar Foundation. All Rights Reserved.