package com.shejiaomao.weibo.db; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.cattong.commons.Logger; import com.cattong.commons.Paging; import com.cattong.commons.ServiceProvider; import com.cattong.commons.util.ListUtil; import com.cattong.commons.util.StringUtil; import com.cattong.entity.BaseUser; import com.cattong.weibo.entity.Group; public class UserGroupDao extends BaseDao<UserGroup> { private static final String TABLE = "User_Group"; private UserDao userDao; public UserGroupDao(Context context) { super(context); userDao = new UserDao(context); } public void save(UserGroup userGroup) { if (isNull(userGroup)) { return; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); save(sqLiteDatabase, userGroup); } public void batchSave(List<UserGroup> userGroups) { if (isNull(userGroups)) { return; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { for (UserGroup userGroup : userGroups) { save(sqLiteDatabase, userGroup); } sqLiteDatabase.setTransactionSuccessful(); } finally { sqLiteDatabase.endTransaction(); } } public void batchSave(LocalAccount account, LocalGroup group, List<? extends BaseUser> userList) { if (account == null || group == null || ListUtil.isEmpty(userList)) { return; } userDao.batchSave(userList); List<UserGroup> userGroupList = new ArrayList<UserGroup>(); UserGroup userGroup = null; for (BaseUser user : userList) { userGroup = new UserGroup(); userGroup.setGroupId(group.getGroupId()); userGroup.setServiceProvider(account.getServiceProvider()); userGroup.setState(UserGroup.STATE_ADDED); userGroup.setUserId(user.getUserId()); userGroupList.add(userGroup); } batchSave(userGroupList); } void save(SQLiteDatabase sqLiteDatabase, UserGroup userGroup) { if (isNull(userGroup)) { return; } if(Logger.isDebug()){ Log.d("Save UserGroup:", userGroup.toString()); } ContentValues values = new ContentValues(); values.put("Service_Provider", userGroup.getServiceProvider().getSpNo()); values.put("User_ID", userGroup.getUserId()); values.put("Group_ID", userGroup.getGroupId()); values.put("State", userGroup.getState()); sqLiteDatabase.replace(TABLE, null, values); } public int delete(UserGroup userGroup) { if (isNull(userGroup)) { return -1; } return delete(userGroup.getGroupId(), userGroup.getServiceProvider(), userGroup.getUserId()); } public int delete(long groupId, ServiceProvider sp, String userId) { StringBuilder whereClause = new StringBuilder(); if (groupId > 0L) { whereClause.append("Group_ID = ").append(groupId); } if (sp != null) { if (whereClause.length() > 0) { whereClause.append(" and "); } whereClause.append(" Service_Provider = ").append(sp.getSpNo()); } if (StringUtil.isNotEmpty(userId)) { if (whereClause.length() > 0) { whereClause.append(" and "); } whereClause.append(" User_ID = '").append(userId).append("'"); } if (whereClause.length() > 0) { SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); return sqLiteDatabase.delete(TABLE, whereClause.toString(), null); } return -1; } public List<UserGroup> findUserGroups(long groupId, ServiceProvider sp) { List<UserGroup> userGroups = null; if (groupId <= 0) { return userGroups; } StringBuilder sql = new StringBuilder(); sql.append("select * from User_Group where Group_ID = ").append(groupId); if (sp != null) { sql.append(" and Service_Privider = ").append(sp.getSpNo()); } return find(sql.toString()); } public List<BaseUser> getMembers(LocalGroup group, ServiceProvider serviceProvider, Paging<? extends BaseUser> paging) { List<BaseUser> listUser = null; if (group == null || paging == null || serviceProvider == null) { return listUser; } String sql = "select " + " b.* " + "from " + " User_Group a, User b " + "where " + " a.User_ID = b.User_ID and " + " a.Group_ID = " + group.getGroupId() + " and " + " a.Service_Provider = " + serviceProvider.getSpNo() + " " + "order by b.Screen_Name desc"; UserDao dao = new UserDao(context); listUser = dao.find(sql, paging.getPageIndex(), paging.getPageSize()); if (ListUtil.isEmpty(listUser) || listUser.size() < paging.getPageSize() / 2) { paging.setLastPage(true); } return listUser; } public boolean isExist(Group group, BaseUser target) { boolean isExist = false; if (group == null || target == null) { return isExist; } String sql = "select " + " a.* " + "from " + " User_Group a, Group_Info b " + "where " + " a.Group_ID = b.Group_ID and " + " b.SP_Group_ID = '" + group.getId() + "' and " + " a.User_ID = '" + target.getUserId() + "' and " + " a.Service_Provider = " + target.getServiceProvider().getSpNo(); UserGroup ug = query(sql); if (ug != null) { isExist = true; } return isExist; } @Override public UserGroup extractData(SQLiteDatabase sqLiteDatabase, Cursor cursor) { UserGroup userGroup = new UserGroup(); userGroup.setGroupId(cursor.getLong(cursor.getColumnIndex("Group_ID"))); userGroup.setServiceProviderNo(cursor.getInt(cursor.getColumnIndex("Service_Provider"))); userGroup.setState(cursor.getInt(cursor.getColumnIndex("State"))); userGroup.setUserId(cursor.getString(cursor.getColumnIndex("User_ID"))); return userGroup; } }