package net.dev123.yibo.db; import java.util.Date; import java.util.List; import net.dev123.commons.ServiceProvider; import net.dev123.commons.util.ListUtil; import net.dev123.commons.util.StringUtil; import net.dev123.entity.BaseUser; import net.dev123.entity.Gender; import net.dev123.yibo.common.Constants; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; public class UserDao extends BaseDao<BaseUser> { private static final String TABLE = "User"; public UserDao(Context context) { super(context); } public void save(BaseUser user) { if (isNull(user)) { return; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); save(sqLiteDatabase,user); } public void batchSave(List<? extends BaseUser> users) { if (ListUtil.isEmpty(users)) { return; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { for (BaseUser user : users) { save(sqLiteDatabase,user); } sqLiteDatabase.setTransactionSuccessful(); } finally{ sqLiteDatabase.endTransaction(); } } void save(SQLiteDatabase sqLiteDatabase, BaseUser user) { if (isNull(user)) { return; } if(Constants.DEBUG){ Log.d("Save User:", user.toString()); } ContentValues values = new ContentValues(); values.put("Service_Provider", user.getServiceProvider().getServiceProviderNo()); values.put("User_Id", user.getId()); values.put("Screen_Name", user.getScreenName()); values.put("Name", user.getName()); values.put("Gender", user.getGender() == null ? Gender.UNKNOW.getGenderNo() : user.getGender().getGenderNo()); values.put("Location", user.getLocation()); values.put("Description", user.getDescription()); values.put("Verified", user.isVerified()); values.put("Profile_Image_Url", user.getProfileImageUrl()); values.put("Created_At", user.getCreatedAt() == null ? 0 : user.getCreatedAt().getTime()); sqLiteDatabase.replace(TABLE, null, values); } public int delete(BaseUser user, ServiceProvider sp) { if (isNull(user) || isNull(sp)) { return -1; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); int rowsAffected = sqLiteDatabase.delete(TABLE, "User_ID = '" + user.getId() + "' and Service_Provider = " + sp.getServiceProviderNo(), null); return rowsAffected; } public int delete(ServiceProvider sp) { if (isNull(sp)) { return -1; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); int rowsAffected = sqLiteDatabase.delete(TABLE, "Service_Provider = " + sp.getServiceProviderNo(), null); return rowsAffected; } public BaseUser findById(String userId, ServiceProvider sp) { if (isNull(sp) || StringUtil.isEmpty(userId)) { return null; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); return findById(sqLiteDatabase, userId, sp); } BaseUser findById(SQLiteDatabase sqLiteDatabase, String userId, ServiceProvider sp) { String sql = "select * from User where User_ID = '" + userId + "' and Service_Provider = " + sp.getServiceProviderNo(); return this.query(sqLiteDatabase, sql); } public List<BaseUser> findUsers(ServiceProvider sp, String filterName) { List<BaseUser> listUser = null; if (sp == null || StringUtil.isEmpty(filterName)) { return listUser; } StringBuilder sql = new StringBuilder(); int providerNo = sp.getServiceProviderNo(); sql.append( "select " + " * " + "from " + " User " + "where " + " Service_Provider = " + providerNo + " and " + " ( Screen_Name like '%" + filterName + "%' or " + " Name like '%" + filterName + "%')" ); return find(sql.toString()); } @Override public BaseUser extractData(SQLiteDatabase sqLiteDatabase, Cursor cursor) { int spNo = cursor.getInt(cursor.getColumnIndex("Service_Provider")); ServiceProvider serviceProvider = ServiceProvider.getServiceProvider(spNo); BaseUser user = null; if (serviceProvider.isSns()) { user = new net.dev123.sns.entity.User(); } else { user = new net.dev123.mblog.entity.User(); } user.setServiceProvider(serviceProvider); user.setId(cursor.getString(cursor.getColumnIndex("User_ID"))); user.setScreenName(cursor.getString(cursor.getColumnIndex("Screen_Name"))); user.setName(cursor.getString(cursor.getColumnIndex("Name"))); user.setProfileImageUrl(cursor.getString(cursor.getColumnIndex("Profile_Image_Url"))); int nGender = cursor.getInt(cursor.getColumnIndex("Gender")); Gender gender = Gender.UNKNOW; if (nGender == Gender.MALE.getGenderNo()) { gender = Gender.MALE; } else if (nGender == Gender.FEMALE.getGenderNo()) { gender = Gender.FEMALE; } user.setGender(gender); user.setLocation(cursor.getString(cursor.getColumnIndex("Location"))); user.setDescription(cursor.getString(cursor.getColumnIndex("Description"))); user.setVerified(1 == cursor.getInt(cursor.getColumnIndex("Verified"))); long time = cursor.getLong(cursor.getColumnIndex("Created_At")); if (time > 0) { user.setCreatedAt(new Date(time)); } return user; } }