package net.dev123.yibo.db;
import java.util.Date;
import java.util.List;
import net.dev123.commons.Paging;
import net.dev123.commons.ServiceProvider;
import net.dev123.commons.util.ListUtil;
import net.dev123.mblog.entity.DirectMessage;
import net.dev123.mblog.entity.User;
import net.dev123.yibo.R;
import net.dev123.yibo.common.Constants;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
public class DirectMessageDao extends BaseDao<DirectMessage> {
private static final String TABLE = "Direct_Message";
private Context context;
private UserDao userDao;
public DirectMessageDao(Context context) {
super(context);
this.context = context;
userDao = new UserDao(context);
}
public void save(DirectMessage msg, LocalAccount account) {
if (isNull(msg) || isNull(account)) {
return;
}
SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
sqLiteDatabase.beginTransaction();
try {
save(sqLiteDatabase,msg,account);
sqLiteDatabase.setTransactionSuccessful();
} finally{
sqLiteDatabase.endTransaction();
}
}
public void batchSave(List<DirectMessage> msgs, LocalAccount account) {
if (isNull(msgs) || isNull(account)) {
return;
}
SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
sqLiteDatabase.beginTransaction();
try {
for (DirectMessage msg : msgs) {
save(sqLiteDatabase,msg,account);
}
sqLiteDatabase.setTransactionSuccessful();
} finally {
sqLiteDatabase.endTransaction();
}
}
void save(SQLiteDatabase sqLiteDatabase,DirectMessage msg, LocalAccount account) {
if (isNull(msg) || isNull(account)) {
return;
}
if(Constants.DEBUG){
Log.d("Save DirectMessage:", msg.toString());
}
ContentValues values = new ContentValues();
values.put("Msg_ID", msg.getId());
values.put("Created_At", msg.getCreatedAt() == null ? 0L : msg.getCreatedAt().getTime());
values.put("Msg_Text", msg.getText());
values.put("Sender_ID", msg.getSenderId());
values.put("Recipient_ID", msg.getRecipientId());
values.put("Sender_Screen_Name", msg.getSenderScreenName());
values.put("Recipient_Screen_Name", msg.getRecipientScreenName());
values.put("Service_Provider", msg.getServiceProvider().getServiceProviderNo());
values.put("Account_ID", account.getAccountId());
if (msg instanceof LocalDirectMessage) {
values.put("Is_Divider", ((LocalDirectMessage)msg).isDivider() ? 1 : 0);
} else {
values.put("Is_Divider", 0);
}
sqLiteDatabase.replace(TABLE, null, values);
userDao.save(sqLiteDatabase,msg.getRecipient());
userDao.save(sqLiteDatabase,msg.getSender());
}
public int delete(DirectMessage msg, LocalAccount account) {
if (isNull(msg) || isNull(account)) {
return -1;
}
SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
int rowsAffected = sqLiteDatabase.delete(TABLE, "Msg_ID = '" + msg.getId() + "' and Account_ID = "
+ account.getAccountId(), null);
return rowsAffected;
}
public int delete(LocalAccount account) {
if (isNull(account)) {
return -1;
}
SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
int rowsAffected = sqLiteDatabase.delete(TABLE, "Account_ID = " + account.getAccountId(), null);
return rowsAffected;
}
public List<DirectMessage> getConversations(User conversationUser, LocalAccount account, Paging<DirectMessage> page) {
if (conversationUser == null ||
account == null ||
page == null
) {
return null;
}
Resources res = context.getResources();
String[] querySqls = res.getStringArray(R.array.db_query_direct_message_sql);
String sql = String.format(
querySqls[3], conversationUser.getId(), conversationUser.getId(),
account.getAccountId(), "");
List<DirectMessage> listTemp = find(sql, page.getPageIndex(), page.getPageSize());
if (ListUtil.isEmpty(listTemp)) {
page.setLastPage(true);
}
return listTemp;
}
@Override
public DirectMessage extractData(SQLiteDatabase sqLiteDatabase, Cursor cursor) {
LocalDirectMessage msg = new LocalDirectMessage();
msg.setCreatedAt(new Date(cursor.getLong(cursor.getColumnIndex("Created_At"))));
msg.setId(cursor.getString(cursor.getColumnIndex("Msg_ID")));
msg.setText(cursor.getString(cursor.getColumnIndex("Msg_Text")));
msg.setRecipientId(cursor.getString(cursor.getColumnIndex("Recipient_ID")));
msg.setSenderId(cursor.getString(cursor.getColumnIndex("Sender_ID")));
msg.setRecipientScreenName(cursor.getString(cursor.getColumnIndex("Recipient_Screen_Name")));
msg.setSenderScreenName(cursor.getString(cursor.getColumnIndex("Sender_Screen_Name")));
msg.setDivider(1 == cursor.getInt(cursor.getColumnIndex("Is_Divider")));
int sp = cursor.getInt(cursor.getColumnIndex("Service_Provider"));
msg.setServiceProvider(ServiceProvider.getServiceProvider(sp));
User sender = (User) userDao.findById(sqLiteDatabase, msg.getSenderId(), msg.getServiceProvider());
msg.setSender(sender);
User recipient = (User) userDao.findById(sqLiteDatabase, msg.getRecipientId(), msg.getServiceProvider());
msg.setRecipient(recipient);
return msg;
}
}