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.ChannelMetadataTableHelper;
public class ChannelMetadataDAO implements DAO<JSONObject, JSONObject> {
private static ChannelMetadataDAO instance;
private SQLiteDatabase db;
private BuddycloudSQLiteOpenHelper helper;
private final String[] COLUMNS = new String[]{
ChannelMetadataTableHelper.COLUMN_ID,
ChannelMetadataTableHelper.COLUMN_TITLE,
ChannelMetadataTableHelper.COLUMN_DESCRIPTION,
ChannelMetadataTableHelper.COLUMN_CHANNEL_TYPE,
ChannelMetadataTableHelper.COLUMN_ACCESS_MODEL,
ChannelMetadataTableHelper.COLUMN_CREATION_DATE,
ChannelMetadataTableHelper.COLUMN_DEFAULT_AFFILIATION};
private ChannelMetadataDAO(Context context) {
this.helper = BuddycloudSQLiteOpenHelper.getInstance(context);
this.db = helper.getWritableDatabase();
}
public static ChannelMetadataDAO getInstance(Context context) {
if (instance == null) {
instance = new ChannelMetadataDAO(context);
}
return instance;
}
private ContentValues buildValues(String channel, String title, String description, String channelType,
String accessModel, String creationDate, String defaultAffiliation) {
ContentValues values = new ContentValues();
values.put(ChannelMetadataTableHelper.COLUMN_ID, channel);
values.put(ChannelMetadataTableHelper.COLUMN_TITLE, title);
values.put(ChannelMetadataTableHelper.COLUMN_DESCRIPTION, description);
values.put(ChannelMetadataTableHelper.COLUMN_CHANNEL_TYPE, channelType);
values.put(ChannelMetadataTableHelper.COLUMN_ACCESS_MODEL, accessModel);
values.put(ChannelMetadataTableHelper.COLUMN_CREATION_DATE, creationDate);
values.put(ChannelMetadataTableHelper.COLUMN_DEFAULT_AFFILIATION, defaultAffiliation);
return values;
}
private ContentValues buildValues(String channel, JSONObject json) {
String title = json.optString("title");
String description = json.optString("description");
String channelType = json.optString("channel_type");
String accessModel = json.optString("access_model");
String creationDate = json.optString("creation_date");
String defaultAffiliation = json.optString("default_affiliation");
return buildValues(channel, title, description, channelType, accessModel, creationDate, defaultAffiliation);
}
public boolean insert(String channel, JSONObject json) {
ContentValues values = buildValues(channel, json);
if (values != null) {
long rowId = db.insert(ChannelMetadataTableHelper.TABLE_NAME, null, values);
return rowId != -1;
}
return false;
}
public boolean update(String channel, JSONObject json) {
ContentValues values = buildValues(channel, json);
if (values != null) {
String filter = ChannelMetadataTableHelper.COLUMN_ID + "=\"" + channel + "\"";
int rowsAffected = db.update(ChannelMetadataTableHelper.TABLE_NAME,
values, filter, null);
return rowsAffected == 1;
}
return false;
}
public JSONObject get(String channel) {
String filter = ChannelMetadataTableHelper.COLUMN_ID + "=\"" + channel + "\"";
return DAOHelper.queryUniqueOnSameThread(db, false, ChannelMetadataTableHelper.TABLE_NAME, COLUMNS, filter,
null, null, null, null, null, cursorParser());
}
private DAOCursorParser cursorParser() {
DAOCursorParser cursorParser = new DAOCursorParser() {
@Override
public JSONObject parse(Cursor c) {
return cursorToJSON(c);
}
};
return cursorParser;
}
public Map<String, JSONObject> getAll() {
return DAOHelper.queryMapOnSameThread(db, false, ChannelMetadataTableHelper.TABLE_NAME,
COLUMNS, null, null, null, null, null, null, cursorParser(),
ChannelMetadataTableHelper.COLUMN_ID);
}
private JSONObject cursorToJSON(Cursor cursor) {
JSONObject json = new JSONObject();
try {
json.put(ChannelMetadataTableHelper.COLUMN_ID,
getString(cursor, ChannelMetadataTableHelper.COLUMN_ID));
json.put(ChannelMetadataTableHelper.COLUMN_TITLE,
getString(cursor, ChannelMetadataTableHelper.COLUMN_TITLE));
json.put(ChannelMetadataTableHelper.COLUMN_DESCRIPTION,
getString(cursor, ChannelMetadataTableHelper.COLUMN_DESCRIPTION));
json.put(ChannelMetadataTableHelper.COLUMN_CHANNEL_TYPE,
getString(cursor, ChannelMetadataTableHelper.COLUMN_CHANNEL_TYPE));
json.put(ChannelMetadataTableHelper.COLUMN_ACCESS_MODEL,
getString(cursor, ChannelMetadataTableHelper.COLUMN_ACCESS_MODEL));
json.put(ChannelMetadataTableHelper.COLUMN_CREATION_DATE,
getString(cursor, ChannelMetadataTableHelper.COLUMN_CREATION_DATE));
json.put(ChannelMetadataTableHelper.COLUMN_DEFAULT_AFFILIATION,
getString(cursor, ChannelMetadataTableHelper.COLUMN_DEFAULT_AFFILIATION));
} catch (JSONException e) {
return null;
}
return json;
}
private String getString(Cursor cursor, String columnName) {
return cursor.getString(cursor.getColumnIndex(columnName));
}
}