package com.example.wordbook.common;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.provider.BaseColumns;
import android.util.TimingLogger;
import com.example.wordbook.provider.WBData;
import com.example.wordbook.provider.WBHelper;
import com.example.wordbook.provider.WBProvider;
/**
* DB利用クラス
*/
public final class DBAccess {
/**
* コンストラクタ(ユーティリティクラス)
*/
private DBAccess() {
}
/**
* フィルタパラメータ取得
*
* @param context
* コンテキスト
* @return フィルタパラメータ
*/
private static String getFilterParam(Context context) {
StringBuilder filter = new StringBuilder();
// getDBStat()と一致させること
// 追加Where句
boolean[] record = Common.getRecordList(context);
if (record.length == 6) {
if (!record[0]) {
filter.append(" AND NOT(");
filter.append(WBData.InfoColumns.INFO_OK + "=0");
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_NG + "=0");
filter.append(")");
}
if (!record[1]) {
filter.append(" AND NOT(");
filter.append(WBData.InfoColumns.INFO_OK + "+"
+ WBData.InfoColumns.INFO_NG + ">0");
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_OK + "*4<="
+ WBData.InfoColumns.INFO_NG);
filter.append(")");
}
if (!record[2]) {
filter.append(" AND NOT(");
filter.append(WBData.InfoColumns.INFO_OK + "*4>"
+ WBData.InfoColumns.INFO_NG);
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_OK + "*3<="
+ WBData.InfoColumns.INFO_NG + "*2");
filter.append(")");
}
if (!record[3]) {
filter.append(" AND NOT(");
filter.append(WBData.InfoColumns.INFO_OK + "*3>"
+ WBData.InfoColumns.INFO_NG + "*2");
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_OK + "*2<="
+ WBData.InfoColumns.INFO_NG + "*3");
filter.append(")");
}
if (!record[4]) {
filter.append(" AND NOT(");
filter.append(WBData.InfoColumns.INFO_OK + "*2>"
+ WBData.InfoColumns.INFO_NG + "*3");
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_OK + "<="
+ WBData.InfoColumns.INFO_NG + "*4");
filter.append(")");
}
if (!record[5]) {
filter.append(" AND NOT(");
filter.append(WBData.InfoColumns.INFO_OK + ">"
+ WBData.InfoColumns.INFO_NG + "*4");
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_OK + "+"
+ WBData.InfoColumns.INFO_NG + ">0");
filter.append(")");
}
}
boolean[] flag = Common.getFlagList(context);
for (int i = 0; i < flag.length; i++) {
if (!flag[i]) {
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_FLAG + "!=" + i);
}
}
boolean[] level = Common.getLevelList(context);
for (int i = 0; i < level.length; i++) {
if (!level[i]) {
filter.append(" AND ");
filter.append(WBData.InfoColumns.INFO_LEVEL + "!=" + i);
}
}
return filter.toString();
}
/**
* SortOrderパラメータ取得
*
* @param sort
* 出題順序
* @return SortOrderパラメータ
*/
private static String getSortOrderParam(int sort) {
String sortOrder = null;
// OrderBy句
switch (sort) {
case 0:
sortOrder = "RANDOM()";
break;
case 1:
// NG数->解答数の優先度で取得(≠NG割合)
sortOrder = WBData.InfoColumns.INFO_NG + " DESC,("
+ WBData.InfoColumns.INFO_OK + "+"
+ WBData.InfoColumns.INFO_NG + ") ASC";
break;
case 2:
// OK数->解答数の優先度で取得(≠OK割合)
sortOrder = WBData.InfoColumns.INFO_OK + " DESC,("
+ WBData.InfoColumns.INFO_OK + "+"
+ WBData.InfoColumns.INFO_NG + ") ASC";
break;
case 3:
sortOrder = WBData.InfoColumns.INFO_FLAG + " ASC";
break;
case 4:
sortOrder = WBData.InfoColumns.INFO_FLAG + " DESC";
break;
case 5:
sortOrder = WBData.InfoColumns.INFO_LEVEL + " ASC";
break;
case 6:
sortOrder = WBData.InfoColumns.INFO_LEVEL + " DESC";
break;
case 7:
sortOrder = WBData.InfoColumns.INFO_NUM + " ASC";
break;
case 8:
sortOrder = WBData.InfoColumns.INFO_NUM + " DESC";
break;
default:
break;
}
return sortOrder;
}
/**
* 単語帳DB検索結果データリスト取得
*
* 全単語帳から検索結果データリストを取得する
* - data1="検索欄の値"/data2="":検索欄の値が質問か解答に含まれるデータを検索
* - data1="質問"/data2="解答":質問か解答が一致するデータを検索
*
*
* @param context
* コンテキスト
* @param data1
* 質問/検索欄の値
* @param data2
* 解答
* @return 単語帳DB検索結果データリスト(未取得時はsize=0)
*/
public static synchronized List getDBSearchResultList(
Context context, String data1, String data2) {
List list = new ArrayList();
// 設定ファイル情報
List