package com.example.wordbook.common; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * データ管理クラス */ public class DataManager implements Serializable { /** SerialVersionUID */ private static final long serialVersionUID = 1L; /** 試験データ先頭 */ private int mBase; /** 試験データ位置 */ private int mPos; /** 試験データリスト(試験単位分) */ private List mData; /** 一時保存試験データリスト(試験単位分) */ private List mTemp; /** 解答 */ private int mResult; /** ランダム試験データリスト */ private List mRand; /** * 初期化 *

* 最初に呼び出すこと *

* * @param base * 試験データ先頭 */ public void init(int base) { mBase = base; mPos = 0; mData = new ArrayList(); mTemp = new ArrayList(); mResult = -1; mRand = new ArrayList(); } /** * 位置更新(次へ) *

* 試験単位内の次に移動する
* OKデータを飛ばす。試験単位終端なら試験終了。 *

* * @return true:試験継続/false:試験終了 */ public boolean setNextPos() { // 再試験情報がOKの場合は次へ do { // 試験終了確認 if (mPos >= mData.size() - 1) { return false; } mPos++; } while ((mData.get(mPos).stat & Data.STAT_OK) == Data.STAT_OK); return true; } /** * 位置更新(再試験) *

* 試験単位内の先頭に移動する
* OKデータを飛ばす。全OK時は全NGに再設定。 *

*/ public void setZeroPos() { // 再試験開始位置となるNGを検索 mPos = -1; for (int i = 0; i < mData.size(); i++) { if ((mData.get(i).stat & Data.STAT_NG) == Data.STAT_NG) { mPos = i; break; } } // 全OK時は再試験情報をNGに設定 if (mPos == -1) { for (int i = 0; i < mData.size(); i++) { mData.get(i).stat &= ~Data.STAT_RESULT; mData.get(i).stat |= Data.STAT_NG; } mPos = 0; } } /** * 試験データ位置取得 *

* 試験単位内のデータ位置を取得する *

* * @return 試験データ位置 */ public int getDataPos() { return mPos; } /** * ページ更新 *

* 試験単位分の試験データリストを更新する
* 一時保存試験データリストが準備済みであること *

* * @see #addTempList() */ public void setNextPage() { mPos = 0; mData.clear(); mData.addAll(mTemp); mTemp.clear(); } /** * 一時保存データリスト追加 *

* 一時保存データリストはページ更新後にクリアされる *

* * @see #setNextPage() * @param list * 追加データリスト(null時は未処理) */ public void addTempList(List list) { if (list == null) { return; } mTemp.addAll(list); } /** * 一時保存データリスト取得 *

* 設定済みの一時保存データリストを返す *

* * @return 一時保存データリスト */ public List getTempList() { return mTemp; } /** * 試験データ先頭設定 *

* 単語帳DBデータからの読み込み開始位置を設定する *

* * @param base * 試験データ先頭 */ public void setBasePos(int base) { mBase = base; } /** * 試験データ先頭取得 *

* 単語帳DBデータからの読み込み開始位置を取得する *

* * @return 試験データ先頭 */ public int getBasePos() { return mBase; } /** * Stat設定 *

* 試験中のデータ(stat)を更新 *

* * @param stat * Stat */ public void setStat(int stat) { getData().stat = stat; } /** * Flag設定 *

* 試験中のデータ(flag)を更新 *

* * @param flag * Flag */ public void setFlag(int flag) { getData().flag = flag; } /** * Data1設定 *

* 試験中のデータ(data1)を更新 *

* * @param data * Data1 */ public void setData1(String data) { getData().data1 = data; } /** * Data2設定 *

* 試験中のデータ(data2)を更新 *

* * @param data * Data2 */ public void setData2(String data) { getData().data2 = data; } /** * NG+1更新 *

* 試験中のデータ(stat=NG/ng++)を更新 *

*/ public void addNG() { Data data = getData(); data.stat &= ~Data.STAT_RESULT; data.stat |= Data.STAT_NG; data.ng++; } /** * OK+1更新 *

* 試験中のデータ(stat=OK/ok++)を更新 *

*/ public void addOK() { Data data = getData(); data.stat &= ~Data.STAT_RESULT; data.stat |= Data.STAT_OK; data.ok++; } /** * NGデータ項目数取得 *

* 試験単位分のデータリストから集計 *

* * @return NGデータ項目数 */ public int getNGCount() { int ng = 0; for (Data data : mData) { if ((data.stat & Data.STAT_NG) == Data.STAT_NG) { ng++; } } return ng; } /** * OKデータ項目数取得 *

* 試験単位分のデータリストから集計 *

* * @return OKデータ項目数 */ public int getOKCount() { int ok = 0; for (Data data : mData) { if ((data.stat & Data.STAT_OK) == Data.STAT_OK) { ok++; } } return ok; } /** * データ取得 *

* 試験中のデータを返す
* 試験単位外の場合は num=0 のダミーデータを返す *

* * @return データ */ public Data getData() { if (mPos < 0 || mPos >= mData.size()) { return new Data(0, 0, 0, 0, 0, 0, "", "", "", ""); } return mData.get(mPos); } /** * データリスト取得 *

* 試験単位分のデータリストを返す *

* * @return データリスト */ public List getDataList() { return mData; } /** * 解答位置設定 *

* (四択画面用) *

* * @param result * 解答位置 */ public void setResult(int result) { mResult = result; } /** * 解答位置取得 *

* (四択画面用) *

* * @return 解答位置 */ public int getResult() { return mResult; } /** * ランダム試験データリスト設定 *

* (四択画面用) *

* * @param rand * ランダム試験データリスト(null時は未処理) */ public void setRandList(List rand) { if (rand == null) { return; } mRand.clear(); mRand.addAll(rand); } /** * ランダム試験データリスト取得 *

* (四択画面用) *

* * @return ランダム試験データリスト(未初期化時のみnull) */ public List getRandList() { return mRand; } }