パッケージ com.lmt.lib.bldt

クラス ContentDatabase


  • public class ContentDatabase
    extends Object
    難易度表データベースを表すクラスです。

    難易度表データベースは複数の難易度表情報ファイルの集合体であり、1個のディレクトリ内で集約・管理されます。 通常、難易度表データベースはLDTライブラリ既定のディレクトリ(DifficultyTables.DEFAULT_LOCATION) に記録されますが、アプリケーション指定の固有のディレクトリを指定することも可能です。

    難易度表情報は更新処理によって各難易度表を保管するサーバーからインターネット経由でダウンロードされ、 当ライブラリ提唱の統一データ形式でローカルマシン内に保存されます。通常、保存された難易度表情報は当ライブラリを 経由して読み込まれ、当クラスを含む各APIによって情報にアクセスすることができます。 当ライブラリを経由せずに難易度表情報にアクセスする場合は統一データ形式に準拠する形で情報を読み込み、 各情報項目を適切な用途で使用する必要があります。

    導入されたバージョン:
    0.1.0
    • フィールドの詳細

      • VERSION

        public static final int VERSION
        難易度表データベースのバージョン
        関連項目:
        定数フィールド値
    • コンストラクタの詳細

      • ContentDatabase

        public ContentDatabase()
                        throws IOException
        新しい難易度表データベースオブジェクトを構築します。

        当コンストラクタを使用すると、格納先パスを DifficultyTables.DEFAULT_LOCATION と解釈し、 このパスにディレクトリが存在しない場合は新しく作成します。

        コンストラクタの詳しい動作については ContentDatabase(Path, boolean) を参照してください。

        例外:
        IOException - ファイル・ディレクトリ入出力エラーが発生した
        導入されたバージョン:
        0.1.0
      • ContentDatabase

        public ContentDatabase​(Path location,
                               boolean createIfNeeded)
                        throws IOException
        新しい難易度表データベースオブジェクトを構築します。

        オブジェクトが構築される時、指定された格納先パスから各難易度表情報を読み込み、メモリ上にロードします。 難易度表情報ファイルが存在しない場合は空の難易度表情報としてロードされます。

        格納先パスに指定のディレクトリは必ず存在していなければなりません。存在しない場合は例外をスローします。 2番目の引数に true を指定するとディレクトリが存在しない場合にディレクトリが新しく作成されます。 この場合、全ての難易度表情報が空となります。

        DifficultyTables.add(TableDescription) で難易度表定義を追加している場合、 その難易度表情報も読み込もうとします。

        難易度表情報の読み込み中にファイル破損を検出したり入出力エラーが発生した場合は例外をスローします。 その場合、読み込み途中のデータは全て破棄されます。

        難易度表情報の読み込み中は難易度表データベースの書き込みはロックされ、同データベースに対しての更新処理は 全て失敗します。その点の詳細については update(HttpClient, Duration, UpdateProgress) を参照してください。

        パラメータ:
        location - 難易度表データベースの格納先パス
        createIfNeeded - location に指定のディレクトリが存在しない場合に新しく作成するかどうか
        例外:
        NullPointerException - location が null
        NoSuchFileException - 難易度表データベース格納先パスが存在しない
        NoSuchFileException - 難易度表データベース格納先パスがファイル
        IOException - 入出力エラーが発生した
        IOException - 難易度表データベース読み込み中にファイル破損、データ改ざんを検出した
        IllegalStateException - 難易度表データベースの書き込みがロックされている(データベース更新中)
        導入されたバージョン:
        0.1.0
    • メソッドの詳細

      • getLocation

        public Path getLocation()
        難易度表データベース格納先パスを取得します。
        戻り値:
        難易度表データベース格納先パス
        導入されたバージョン:
        0.1.0
      • all

        public Stream<ContentCollection> all()
        全ての難易度表情報を走査するストリームを返します。
        戻り値:
        全ての難易度表情報を走査するストリーム
        導入されたバージョン:
        0.1.0
      • get

        public ContentCollection get​(String id)
        指定したIDに該当する難易度表情報を取得します。
        パラメータ:
        id - ID
        戻り値:
        難易度表情報、該当する難易度表情報が存在しない場合は null
        例外:
        NullPointerException - id が null
        導入されたバージョン:
        0.1.0
      • update

        public void update​(HttpClient client,
                           Duration timeout,
                           UpdateProgress progress)
                    throws IOException,
                           InterruptedException
        難易度表データベースの更新を行います。

        当メソッドを実行すると、DifficultyTables.all() で取得できる全ての難易度表定義を使用し、 楽曲情報のダウンロード~難易度表情報ファイルの更新を行います。

        更新処理が開始されると難易度表データベースは読み書きの両方がロックされ、同データベースの読み込みと更新の 両方が排他状態となります。その間、同データベースでの難易度表データベースオブジェクト構築、 および当メソッドの他プロセス・スレッドからの呼び出しは全て失敗します。

        当メソッドではインターネット経由でHTTP通信を行い、楽曲情報のダウンロードを行います。 通信設定は引数のHTTPクライアントオブジェクトを通して予め実施しておいてください。 (例えば、プロキシの仕様有無やリダイレクトフォローなど)

        楽曲情報のダウンロードでは、最初にダウンロード対象データの更新日時を検証します。 データが更新されておらず更新日時に変化がない場合は前回の更新からデータ差分がないと見なしダウンロードを中止します。 データをダウンロード後、前回更新時のデータとの比較を行い、同じデータと判定された場合は更新処理を中止します。

        ダウンロードされたデータは難易度表定義に登録されたパーサ(Parser)を使用して楽曲情報が解析され、 その結果が難易度表情報ファイルに記録され、メモリ上の楽曲情報も同様の内容に更新されます。

        当メソッドは登録済みの全ての難易度表を更新しようとするため、処理完了までに非常に時間がかかります。 更新処理は別スレッドを使用した並列処理とすることを推奨します。当メソッド実行中はスレッドの割り込みを監視し、 割り込みを検出した時に処理を中止し InterruptedException をスローします。その場合、処理中だった難易度表は 難易度表情報ファイルには保存されず、割り込み検出以前の更新結果が更新前に戻ることはありません。

        難易度表ごとに個別に更新を行いたい場合は update(HttpClient, String, Duration, UpdateProgress) を使用してください。

        パラメータ:
        client - HTTP通信に使用するクライアントオブジェクト
        timeout - 楽曲情報データダウンロード時のサーバー応答タイムアウト。null の場合タイムアウトなし。
        progress - 更新処理の進捗情報を報告するハンドラオブジェクト
        例外:
        NullPointerException - client が null
        NullPointerException - progress が null
        HttpTimeoutException - HTTP通信で接続・応答タイムアウトが発生した
        IOException - HTTP通信で送受信エラーが発生した
        InterruptedException - スレッド割り込みによる更新処理の中止が発生した
        IllegalStateException - 読み書き排他処理エラーが発生した
        導入されたバージョン:
        0.1.0