package com.netease.nim.uikit.contact.core.provider;
import com.netease.nim.uikit.contact.core.item.ItemTypes;
import com.netease.nim.uikit.contact.core.model.ContactGroupStrategy;
import com.netease.nim.uikit.contact.core.item.AbsContactItem;
import com.netease.nim.uikit.contact.core.item.ContactItem;
import com.netease.nim.uikit.contact.core.model.TeamContact;
import com.netease.nim.uikit.contact.core.query.TextComparator;
import com.netease.nim.uikit.contact.core.query.TextQuery;
import com.netease.nim.uikit.cache.TeamDataCache;
import com.netease.nimlib.sdk.team.model.Team;
import java.util.ArrayList;
import java.util.List;
/**
* 群数据源提供者
* <p/>
* Created by huangjun on 2015/3/1.
*/
public class TeamDataProvider {
public static final List<AbsContactItem> provide(TextQuery query, int itemType) {
List<TeamContact> sources = query(query, itemType);
List<AbsContactItem> items = new ArrayList<>(sources.size());
for (TeamContact t : sources) {
items.add(createTeamItem(t));
}
return items;
}
private static AbsContactItem createTeamItem(TeamContact team) {
return new ContactItem(team, ItemTypes.TEAM) {
@Override
public int compareTo(ContactItem item) {
return compareTeam((TeamContact) getContact(), (TeamContact) (item.getContact()));
}
@Override
public String belongsGroup() {
return ContactGroupStrategy.GROUP_TEAM;
}
};
}
private static int compareTeam(TeamContact lhs, TeamContact rhs) {
return TextComparator.compareIgnoreCase(lhs.getDisplayName(), rhs.getDisplayName());
}
/**
* * 数据查询
*/
private static final List<TeamContact> query(TextQuery query, int itemType) {
List<Team> teams;
if (itemType == ItemTypes.TEAMS.ADVANCED_TEAM) {
teams = TeamDataCache.getInstance().getAllAdvancedTeams();
} else if (itemType == ItemTypes.TEAMS.NORMAL_TEAM) {
teams = TeamDataCache.getInstance().getAllNormalTeams();
} else {
teams = TeamDataCache.getInstance().getAllTeams();
}
List<TeamContact> contacts = new ArrayList<>();
for (Team t : teams) {
if (query == null || ContactSearch.hitTeam(t, query)) {
contacts.add(new TeamContact(t));
}
}
return contacts;
}
}