package com.ericliudeveloper.sharedbillhelper.model;
import android.content.AsyncQueryHandler;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import com.ericliudeveloper.sharedbillhelper.database.DatabaseConstants;
import com.ericliudeveloper.sharedbillhelper.provider.BillContract;
/**
* Created by liu on 8/06/15.
*/
public class MemberDAO implements Dao {
// static ContentResolver mContentResolver = MyApplication.getAppContentResolver();
static String[] projection = BillContract.Members.PROJECTION;
static Uri membersUri = BillContract.Members.CONTENT_URI;
public MemberDAO() {
}
/**
* Create a Member instance from a cursor, assumed the cursor is retrieved from DB thus id field is not null.
* Be careful: you must position the cursor before calling this method or it will throw CursorIndexOutOfBoundsException
* @param cursor
* @return
*/
public static Member getMemberFromCursor(Cursor cursor) {
if (cursor != null) {
long membrId = cursor.getLong(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_ROWID));
Member member = new Member(membrId);
member.setFirstName(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_FIRSTNAME)));
member.setLastName(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_LASTNAME)));
member.setPhone(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_PHONE)));
member.setEmail(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_EMAIL)));
member.setMoveInDate(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_MOVE_IN_DATE)));
member.setMoveOutDate(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_MOVE_OUT_DATE)));
member.setDeleted(cursor.getInt(cursor.getColumnIndexOrThrow(DatabaseConstants.MemberColumns.COL_DELETED)));
return member;
}
return null;
}
/**
* generate ContentValues from a Member instance, the id field is ignored.
*
* @param member
* @return
*/
public static ContentValues getContentValuesFromMemberInstance(Member member) {
if (member == null) {
return null;
}
ContentValues values = new ContentValues();
values.put(DatabaseConstants.MemberColumns.COL_FIRSTNAME, member.getFirstName());
values.put(DatabaseConstants.MemberColumns.COL_LASTNAME, member.getLastName());
values.put(DatabaseConstants.MemberColumns.COL_PHONE, member.getPhone());
values.put(DatabaseConstants.MemberColumns.COL_EMAIL, member.getEmail());
values.put(DatabaseConstants.MemberColumns.COL_MOVE_IN_DATE, member.getMoveInDate());
values.put(DatabaseConstants.MemberColumns.COL_MOVE_OUT_DATE, member.getMoveOutDate());
values.put(DatabaseConstants.MemberColumns.COL_DELETED, member.getDeleted());
return values;
}
public static void saveMember(Member member, final Handler handler) {
long id = member.getId();
final ContentValues values = getContentValuesFromMemberInstance(member);
if (id >= 0) {
// This is an update
final Uri memberUriWithId = BillContract.Members.buildMemberUri(String.valueOf(id));
new AsyncQueryHandler(mContentResolver) {
}.startUpdate(0, null, memberUriWithId, values, null, null);
return;
}
AsyncQueryHandler insertMemberHandler = new AsyncQueryHandler(mContentResolver) {
@Override
protected void onInsertComplete(int token, Object cookie, Uri uri) {
if (handler != null) {
Message message = Message.obtain();
message.what = MESSAGE_WHAT_SAVED_MEMBER_URL;
message.obj = uri;
handler.sendMessage(message);
}
}
};
insertMemberHandler.startInsert(0, null, membersUri, values);
}
}