org.opengion.hayabusa.resource

## クラス ResourceManager

- java.lang.Object
- - org.opengion.hayabusa.resource.ResourceManager

-     public final class ResourceManager
      extends Object

       java.util.ResourceBundle クラスを複数管理するリソースクラスです。

       ResourceManager は、
            LabelResource.properties   ラベルリソース(テーブル定義やカラム名などの画面に表示するリソース)
            CodeResource.properties    コードリソース(選択データなどプルダウンメニューで選択するリソース)
            MessageResource.properties メッセージリソース(エラーコードやメッセージなどを表示するリソース)

       の３つのプロパティーファイルを内部に持っており,それぞれのメソッドにより，
       リソースの返す値を決めています。

       ResourceManagerは,単独でも生成できますが，各ユーザー毎に作成するよりも
       ResourceFactory#newInstance( lang )メソッドより生成した方が,プーリングされるので
       効率的です。

       リソース作成時に指定するロケールは,ISO 言語コード(ISO-639 で定義される 2 桁の小文字)

       http://www.ics.uci.edu/pub/ietf/http/related/iso639.txtを使用して下さい。
       ただし，内部的に Locale を構築していますが,その正しさは,チェックされていませんので,
       指定するロケールに応じた properties ファイルを用意しておいて下さい。

       日本語の場合は, 言語コードは "jp" なので，
            LabelResource_jp.properties   ラベルリソース(日本語)
            CodeResource_jp.properties    コードリソース(日本語)
            MessageResource_jp.properties メッセージリソース(日本語)

       を用意して下さい。

       CodeResource については、リソースファイルから CodeSelectionオブジェクトを
       作成して利用します。この、CodeSelectionオブジェクトの作成方法として、
       ３通り考えられます。
       １つ目は、毎回 要求が発生する毎に CodeSelection を作成し、プールしていきます。こうすることで、
       初めて使用されたときだけオブジェクト化されますので、メモリの節約が可能です。ただし、
       プールにヒットしなかった場合は、やはりリソースから検索しますので、元々ヒットしない
       キーに対しては、毎回リソースを検索するため、非効率です。
       ２つめは、元々ヒットしないキーに対して、NullCodeSelectionオブジェクトを登録しておくことで、
       プールにため込んで行くと言う方法です。この場合は、シングルトーンにしてメモリを節約しますが、
       それでもプール自体の容量は、確保しておく必要があります。
       ３つめは、この ResourceManager がインスタンス化されるときに、すべての CodeSelectionオブジェクトを
       あらかじめ プールしておく方法です。使わない CodeSelection もインスタンス化する変わりに、
       キャッシュにヒットしない場合は、即 CodeSelection が存在しないと判断できるため、
       もっともパフォーマンスが高くなります。
       本 ResourceManager の実装は、３つめの、あらかじめ、すべてをキャッシュしておく方法を
       採用しています。

  機能分類
    リソース管理
  バージョン
    4.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK5.0,

- - ### コンストラクタのサマリー

    コンストラクタ
    コンストラクタと説明
    `ResourceManager(String systemId, String lg, boolean initLoad)` コンストラクター システムＩＤと言語コードを指定して,生成します。

  - ### メソッドのサマリー

    すべてのメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッドと説明
    --- | ---
    `void` | `clear()` リソースマネージャーをクリア(初期化)します。
    `void` | `clear(String key)` リソースマネージャーをキーに基づいて部分クリアします。
    `CodeData` | `getCodeData(String key)` コードキーに対応する、CodeDataオブジェクトを返します。
    `CodeData` | `getCodeData(String key, String query)` コードリソースから,コード文字列を返します。
    `DBColumn` | `getDBColumn(String key)` DBColumn オブジェクトを取得します。
    `String` | `getDescription(ErrMsg errMsgObj)` ErrMsgオブジェクトの内容を元に、ラベルリソースから,概要説明を返します。
    `String` | `getDescription(String key)` ラベルリソースから,概要説明を返します。
    `String` | `getDescription(String key, String[] args)` ラベルリソースから,概要説明を返します。
    `String` | `getLabel(ErrMsg errMsgObj)` メッセージリソースから,ErrMsgオブジェクトで指定されたメッセージを返します。
    `String` | `getLabel(String key)` ラベルリソースから,ラベルを返します。
    `String` | `getLabel(String key, String[] args)` メッセージリソースから,キーで指定されたメッセージに, 引数で指定された変数値をセットしたメッセージを返します。
    `LabelData` | `getLabelData(String key)` ラベルキーに対応する、LabelDataオブジェクトを返します。
    `Map` | `getLabelMap(String query, String dbid)` 指定されたクエリを発行し、ラベルマップを作成します。
    `String` | `getLang()` 設定されている言語を返します。
    `String` | `getLongLabel(String key)` ラベルリソースから,ラベル(長)を返します。
    `String` | `getRawShortLabel(String key)` ラベルオブジェクトの名称(短)をspanタグを付けない状態で返します。
    `String` | `getShortLabel(String key)` ラベルリソースから,ラベル(短)を返します。
    `void` | `guiClear()` GUI情報をクリアします。
    `DBColumn` | `makeDBColumn(String key)` DBColumn オブジェクトを作成します。
    `void` | `makeGUIInfos(UserInfo user)` ログインユーザーで使用する画面オブジェクトを、UserInfoにセットします。
    `void` | `setDBColumn(String key, DBColumn dbColumn)` DBColumn オブジェクトをプールに登録します。

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### コンストラクタの詳細

    - #### ResourceManager

          public ResourceManager(String systemId,
                                 String lg,
                                 boolean initLoad)

      コンストラクター システムＩＤと言語コードを指定して,生成します。
      パラメータ:
        `systemId` - システムＩＤ
        `lg` - 言語コード
        `initLoad` - リソースデータの先読み可否(true:先読みする)

  - ### メソッドの詳細

    - #### getLang

          public String getLang()

      設定されている言語を返します。
      戻り値:
        言語

    - #### getDBColumn

          public DBColumn getDBColumn(String key)

      DBColumn オブジェクトを取得します。 作成したDBColumnオブジェクトは，内部にプールしておき，同じオブジェクト要求が あったときは，プールのオブジェクトを利用して,DBColumnを返します。
      パラメータ:
        `key` - カラムID(not null)
      戻り値:
        DBColumnオブジェクト
      変更履歴:

        3.4.0.0 (2003/09/01) ラベルカラム、コードカラム、表示パラメータ、編集パラメータ、文字パラメータの追加。
        3.5.6.4 (2004/07/16) 追加パラメータ取り込み時に、"_" は、null 扱いとする。
        3.6.0.7 (2004/11/06) DBColumn の official属性追加
        6.4.3.3 (2016/03/04) ConcurrentHashMap の not null制限のチェック追加

    - #### makeDBColumn

          public DBColumn makeDBColumn(String key)

      DBColumn オブジェクトを作成します。 内部にプールに存在すればそれを、なければ新規に作成します。 それでも存在しない場合は、DBColumnConfig より、ラベルと言語を指定して 新規に作成します。
      パラメータ:
        `key` - カラムID(not null)
      戻り値:
        DBColumnオブジェクト
      関連項目:
        `getDBColumn( String )`

    - #### setDBColumn

          public void setDBColumn(String key,
                                  DBColumn dbColumn)

      DBColumn オブジェクトをプールに登録します。 DBColumn を動的に作成する機能で、作成したカラムオブジェクトを プールに登録することで、通常のリソースと同じように利用できるように します。
      パラメータ:
        `key` - カラムID
        `dbColumn` - DBColumnオブジェクト
      変更履歴:

        5.4.2.2 (2011/12/14) 新規追加

    - #### getLabel

          public String getLabel(String key)

      ラベルリソースから,ラベルを返します。 引数の言語コードに応じたリソースが登録されていない場合は, 引数のラベルキーそのまま返します。
      パラメータ:
        `key` - ラベルキー
      戻り値:
        リソースに応じたラベル文字列(無ければ ラベルキー)
      変更履歴:

        4.0.0.0 (2005/01/31) オラクルとWindowsとの間の "～"の文字化け対策中止
        4.0.0.0 (2007/10/18) メッセージリソースとの統合化
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

    - #### getLabel

          public String getLabel(String key,
                                 String[] args)

      メッセージリソースから,キーで指定されたメッセージに, 引数で指定された変数値をセットしたメッセージを返します。 このメッセージは,リソースで選ばれたロケール毎のメッセージに， MessageFormat#format でフォーマットする事により,作成されます。 メッセージがリソースに存在しない場合は,キーを返します。
      パラメータ:
        `key` - キー
        `args` - メッセージの配列
      戻り値:
        メッセージ(無ければ キー)
      変更履歴:

        4.0.0.0 (2005/01/31) オラクルとWindowsとの間の "～"の文字化け対策
        4.0.0.0 (2007/10/17) メッセージリソース統合に伴いラベルローダーを使用する
        4.0.0.0 (2007/10/18) 名称変更 getMessage ⇒ getLabel
        5.1.1.0 (2009/12/01) #XXXXの変換で、カラム名が複数指定されている場合の対応
        6.1.0.0 (2014/12/26) LabelData が存在しなかった場合の処理
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。
        6.6.0.0 (2016/12/01) 引数の配列を可変長配列に変更します。

    - #### getLabel

          public String getLabel(ErrMsg errMsgObj)

      メッセージリソースから,ErrMsgオブジェクトで指定されたメッセージを返します。 このエラーメッセージは,リソースで選ばれたロケール毎のメッセージに， MessageFormat#format でフォーマットする事により,作成されます。 エラーメッセージがリソースに存在しない場合は,エラーコードを返します。
      パラメータ:
        `errMsgObj` - ErrMsgオブジェクト
      戻り値:
        エラーメッセージ(無ければ ErrMsgオブジェクトの toString() )
      変更履歴:

        4.0.0.0 (2004/12/31) 新規追加
        4.0.0.0 (2007/10/18) メッセージリソースとの統合化

    - #### getShortLabel

          public String getShortLabel(String key)

      ラベルリソースから,ラベル(短)を返します。 引数の言語コードに応じたリソースが登録されていない場合は, 引数のラベルキーそのまま返します。
      パラメータ:
        `key` - ラベルキー
      戻り値:
        リソースに応じたラベル文字列(無ければ ラベルキー)
      変更履歴:

        4.3.3.0 (2008/10/01) 新規作成
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

    - #### getLongLabel

          public String getLongLabel(String key)

      ラベルリソースから,ラベル(長)を返します。 概要説明が存在する場合は、ツールチップに概要説明が 表示されます。 引数の言語コードに応じたリソースが登録されていない場合は, 引数のラベルキーそのまま返します。
      パラメータ:
        `key` - ラベルキー
      戻り値:
        リソースに応じたラベル(長)文字列(無ければ ラベルキー)
      変更履歴:

        6.3.8.4 (2015/10/09) #XXXX %S などの対応。getLabel(String) は汎用過ぎるので、少し分ける。
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

    - #### getRawShortLabel

          public String getRawShortLabel(String key)

      ラベルオブジェクトの名称(短)をspanタグを付けない状態で返します。 SNAMEが未設定の場合は、LNAME が返されます。 引数の言語コードに応じたリソースが登録されていない場合は, 引数のラベルキーそのまま返します。
      パラメータ:
        `key` - ラベルキー
      戻り値:
        リソースに応じたラベル(長)文字列(無ければ ラベルキー)
      変更履歴:

        6.3.8.4 (2015/10/09) #XXXX %S などの対応。getLabel(String) は汎用過ぎるので、少し分ける。
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

    - #### getDescription

          public String getDescription(String key)

      ラベルリソースから,概要説明を返します。 キーのデータが存在しない場合はnullを返します。
      パラメータ:
        `key` - ラベルキー
      戻り値:
        リソースに応じた概要説明(無ければ null)
      変更履歴:

        4.3.4.5 (2009/01/08) 新規作成
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

    - #### getDescription

          public String getDescription(String key,
                                       String[] args)

      ラベルリソースから,概要説明を返します。 {0},{1}...の置換えを行います。 キーのデータが存在しない場合はnullを返します。 ただし、パラメータのデータがあれば、それを返します。
      パラメータ:
        `key` - ラベルキー
        `args` - パラメータ配列(可変長引数)
      戻り値:
        リソースに応じた概要説明(無ければ null)
      変更履歴:

        4.3.7.6 (2009/07/15) 新規作成
        6.1.0.0 (2014/12/26) #XXXXの変換で、カラム名が複数指定されている場合の対応
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

    - #### getDescription

          public String getDescription(ErrMsg errMsgObj)

      ErrMsgオブジェクトの内容を元に、ラベルリソースから,概要説明を返します。 キーのデータが存在しない場合はnullを返します。
      パラメータ:
        `errMsgObj` - ErrMsgオブジェクト
      戻り値:
        エラーメッセージ(キーが無ければnull)
      変更履歴:

        4.3.7.6 (2009/07/15) 新規作成

    - #### getLabelData

          public LabelData getLabelData(String key)

      ラベルキーに対応する、LabelDataオブジェクトを返します。
      パラメータ:
        `key` - ラベルキー // * @return LabelDataオブジェクト(無ければ null)
      戻り値:
        LabelDataオブジェクト
      変更履歴:

        4.0.0.0 (2005/01/31) 新規作成
        6.3.9.0 (2015/11/06) labelLoader.getLabelDataは、nullを返しません。

      このメソッドは、nullを返しません

    - #### getCodeData

          public CodeData getCodeData(String key)

      コードキーに対応する、CodeDataオブジェクトを返します。
      パラメータ:
        `key` - コードキー
      戻り値:
        CodeDataオブジェクト(無ければ null)

    - #### getCodeData

          public CodeData getCodeData(String key,
                                      String query)

      コードリソースから,コード文字列を返します。 引数にQUERYを渡すことで、DBから、動的にコードリソースを作成できます。
      パラメータ:
        `key` - コードキー
        `query` - 検索SQL(引数に、? を一つ持つ)
      戻り値:
        コードデータオブジェクト(無ければ null)
      変更履歴:

        5.4.2.2 (2011/12/14) 新規追加。

    - #### makeGUIInfos

          public void makeGUIInfos(UserInfo user)

      ログインユーザーで使用する画面オブジェクトを、UserInfoにセットします。 各、UserInfo は、自分自身が使用する 画面オブジェクトのみを管理することで、 画面アクセス有無を、すばやく検索することが可能になります。
      パラメータ:
        `user` - 指定のユーザーロールに対応する画面だけをMapにセットする。
      変更履歴:

        3.1.0.1 (2003/03/26) GUIInfo のキー順サポートの為に、引数追加。
        4.0.0.0 (2005/01/31) 使用画面のMap を UserInfo にセットします。
        4.3.0.0 (2008/07/04) ロールモードマルチ対応
        5.2.0.0 (2010/09/01) アクセス禁止アドレスによる不正アクセス防止機能追加
        6.4.3.4 (2016/03/11) forループを、removeAll メソッドに置き換えます。
        6.4.4.2 (2016/04/01) guiMap.values() では、GUIInfo だが、remove するのは、gui.getAddress() の値。

    - #### getLabelMap

          public Map getLabelMap(String query,
                                 String dbid)

      指定されたクエリを発行し、ラベルマップを作成します。
      パラメータ:
        `query` - ラベルマップを作成するクエリ
        `dbid` - 接続先ID
      戻り値:
        ラベルマップ
      関連項目:
        `LabelDataLoader.getLabelMap( String,String )`
      変更履歴:

        4.3.4.0 (2008/12/01) 新規作成
        6.4.0.5 (2016/01/09) useLabelMap="true" 時のSQL文の実行は、dbid を使用して行う。

    - #### clear

          public void clear(String key)

      リソースマネージャーをキーに基づいて部分クリアします。 ここでは、部分クリアなため、GUIData に関しては、処理されません。 また、存在しないキーを指定されたリソースは、何も処理されません。
      パラメータ:
        `key` - カラムのキー
      変更履歴:

        5.4.3.4 (2012/01/12) labelPool の削除追加
        6.4.3.3 (2016/03/04) ConcurrentHashMap の not null制限のチェック追加

    - #### guiClear

          public void guiClear()

      GUI情報をクリアします。 ここでは、関連するラベル、コードリソースの部分クリアも行います。 GUI情報は、シーケンスに管理しているため、この処理１回ごとに、 GUIData を全件再読み込みを行いますので、ご注意ください。

    - #### clear

          public void clear()

      リソースマネージャーをクリア(初期化)します。
      変更履歴:

        5.4.3.4 (2012/01/12) labelPool の削除追加

Webアプリケーションフレームワーク openGion
Copyright (c) 2009 The openGion Project.