package com.buddycloud.model.dao; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.buddycloud.model.db.BuddycloudSQLiteOpenHelper; import com.buddycloud.model.db.SubscribedChannelsTableHelper; import com.buddycloud.preferences.Preferences; public class SubscribedChannelsDAO implements DAO<JSONObject, JSONObject> { private static SubscribedChannelsDAO instance; private SQLiteDatabase db; private BuddycloudSQLiteOpenHelper helper; private String myJid; private final String[] COLUMNS = new String[]{ SubscribedChannelsTableHelper.COLUMN_SUBSCRIBED}; private SubscribedChannelsDAO(Context context) { this.helper = BuddycloudSQLiteOpenHelper.getInstance(context); this.db = helper.getWritableDatabase(); this.myJid = Preferences.getPreference(context, Preferences.MY_CHANNEL_JID); } public static SubscribedChannelsDAO getInstance(Context context) { if (instance == null) { instance = new SubscribedChannelsDAO(context); } return instance; } private ContentValues buildValues(JSONObject json) { ContentValues values = new ContentValues(); values.put(SubscribedChannelsTableHelper.COLUMN_USER, myJid); values.put(SubscribedChannelsTableHelper.COLUMN_SUBSCRIBED, json.toString()); return values; } public boolean insert(String key, JSONObject json) { ContentValues values = buildValues(json); if (values != null) { long rowId = db.insert(SubscribedChannelsTableHelper.TABLE_NAME, null, values); return rowId != -1; } return false; } public boolean update(String key, JSONObject json) { ContentValues values = buildValues(json); if (values != null) { String filter = SubscribedChannelsTableHelper.COLUMN_USER + "=\"" + myJid + "\""; int rowsAffected = db.update(SubscribedChannelsTableHelper.TABLE_NAME, values, filter, null); return rowsAffected == 1; } return false; } public JSONObject get(String key) { String filter = SubscribedChannelsTableHelper.COLUMN_USER + "=\"" + myJid + "\""; JSONObject response = DAOHelper.queryUniqueOnSameThread(db, false, SubscribedChannelsTableHelper.TABLE_NAME, COLUMNS, filter, null, null, null, null, null, cursorParser()); if (response == null) { return null; } try { return new JSONObject(response.optString(SubscribedChannelsTableHelper.COLUMN_SUBSCRIBED)); } catch (JSONException e) { return null; } } private DAOCursorParser cursorParser() { DAOCursorParser cursorParser = new DAOCursorParser() { @Override public JSONObject parse(Cursor c) { return cursorToJSON(c); } }; return cursorParser; } public Map<String, JSONObject> getAll() { return null; } private JSONObject cursorToJSON(Cursor cursor) { JSONObject json = new JSONObject(); try { json.put(SubscribedChannelsTableHelper.COLUMN_SUBSCRIBED, getString(cursor, SubscribedChannelsTableHelper.COLUMN_SUBSCRIBED)); } catch (JSONException e) { return null; } return json; } private String getString(Cursor cursor, String columnName) { return cursor.getString(cursor.getColumnIndex(columnName)); } }