package com.buddycloud.model.dao; import java.util.HashMap; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; public class DAOHelper { static void insert(final SQLiteDatabase db, final String table, final String nullColumnHack, final ContentValues values, final DAOCallback<Boolean> callback) { new AsyncTask<Void, Void, Long>() { @Override protected Long doInBackground(Void... params) { if (values == null) { return -1L; } return db.insert(table, nullColumnHack, values); } @Override protected void onPostExecute(Long result) { callback.onResponse(result != -1); } }.execute(); } static void update(final SQLiteDatabase db, final String table, final ContentValues values, final String whereClause, final String[] whereArgs, final DAOCallback<Boolean> callback) { new AsyncTask<Void, Void, Integer>() { @Override protected Integer doInBackground(Void... params) { if (values == null) { return -1; } return db.update(table, values, whereClause, whereArgs); } @Override protected void onPostExecute(Integer result) { callback.onResponse(result > 0); } }.execute(); } static void query(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser, final DAOCallback<JSONArray> callback) { new AsyncTask<Void, Void, JSONArray>() { @Override protected JSONArray doInBackground(Void... params) { return queryOnSameThread(db, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cursorParser); } @Override protected void onPostExecute(JSONArray result) { callback.onResponse(result); } }.execute(); } static JSONObject queryUniqueOnSameThread(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser) { JSONArray response = queryOnSameThread(db, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cursorParser); if (response.length() == 0) { return null; } return response.optJSONObject(0); } static int deleteOnSameThread(final SQLiteDatabase db, final String table, final String selection, final String[] selectionArgs) { return db.delete(table, selection, selectionArgs); } static Map<String, JSONObject> queryMapOnSameThread(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser, final String keyColumn) { JSONArray response = queryOnSameThread(db, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cursorParser); Map<String, JSONObject> map = new HashMap<String, JSONObject>(); for (int i = 0; i < response.length(); i++) { JSONObject json = response.optJSONObject(i); map.put(json.optString(keyColumn), json); } return map; } static Map<String, JSONArray> queryCollectionMapOnSameThread(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser, final String keyColumn) { JSONArray response = queryOnSameThread(db, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cursorParser); Map<String, JSONArray> map = new HashMap<String, JSONArray>(); for (int i = 0; i < response.length(); i++) { JSONObject json = response.optJSONObject(i); String key = json.optString(keyColumn); JSONArray jsonArray = map.get(key); if (jsonArray == null) { jsonArray = new JSONArray(); map.put(key, jsonArray); } jsonArray.put(json); } return map; } static JSONArray queryOnSameThread(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser) { Cursor cursor = db.query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); cursor.moveToFirst(); JSONArray responseArray = new JSONArray(); while (!cursor.isAfterLast()) { JSONObject json = cursorParser.parse(cursor); if (json != null) { responseArray.put(json); } cursor.moveToNext(); } cursor.close(); return responseArray; } static JSONArray rawQueryOnSameThread(SQLiteDatabase db, DAOCursorParser cursorParser, String rawSQL, String[] args) { Cursor cursor = db.rawQuery(rawSQL, args); cursor.moveToFirst(); JSONArray responseArray = new JSONArray(); while (!cursor.isAfterLast()) { JSONObject json = cursorParser.parse(cursor); if (json != null) { responseArray.put(json); } cursor.moveToNext(); } cursor.close(); return responseArray; } static void queryUnique(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser, final DAOCallback<JSONObject> callback) { query(db, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cursorParser, new DAOCallback<JSONArray>() { public void onResponse(JSONArray t) { callback.onResponse(t.optJSONObject(0)); } }); } static void queryMap(final SQLiteDatabase db, final boolean distinct, final String table, final String[] columns, final String selection, final String[] selectionArgs, final String groupBy, final String having, final String orderBy, final String limit, final DAOCursorParser cursorParser, final String keyColumn, final DAOCallback<Map<String, JSONObject>> callback) { query(db, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cursorParser, new DAOCallback<JSONArray>() { public void onResponse(JSONArray t) { Map<String, JSONObject> map = new HashMap<String, JSONObject>(); for (int i = 0; i < t.length(); i++) { JSONObject json = t.optJSONObject(i); map.put(json.optString(keyColumn), json); } callback.onResponse(map); } }); } }