package fr.lyrgard.hexScape.gui.desktop.view.room.users;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.AbstractListModel;
import fr.lyrgard.hexScape.model.player.User;
public class UserListModel extends AbstractListModel<User> {
private static final long serialVersionUID = -2989657265872205507L;
private static final UserNameComparator comparator = new UserNameComparator();
private List<User> users = new ArrayList<User>();
public int getSize() {
return users.size();
}
public User getElementAt(int index) {
return users.get(index);
}
public void setUsers(Collection<User> users) {
int oldSize = users.size();
this.users = new ArrayList<User>(users);
Collections.sort(this.users, comparator);
fireContentsChanged(this, 0, Math.max(oldSize, users.size()));
}
public void removeUser(User user) {
users.remove(user);
setUsers(users);
}
public void removeAllUsers() {
users.clear();
setUsers(users);
}
public void addUser(User user) {
users.add(user);
setUsers(users);
}
public void redraw() {
fireContentsChanged(this, 0, users.size());
}
private static class UserNameComparator implements Comparator<User> {
public int compare(User p1, User p2) {
if (p1 == null) {
if (p2 == null) {
return 0;
} else {
return -1;
}
} else {
// Integer p1GameStatus = getGameStatus(p1);
// Integer p2GameStatus = getGameStatus(p2);
Integer p1GameStatus = 1;
Integer p2GameStatus = 1;
if (p1GameStatus.equals(p2GameStatus)) {
return p1.getName().compareTo(p2.getName());
} else {
return p1GameStatus.compareTo(p2GameStatus);
}
}
}
// TODO
// private int getGameStatus(User user) {
// int status = 0; // 0 = no game, 1 = game joined but not started, 1 = game started
// Player player = Universe.getInstance().getPlayersByUserIds().get(user.getId());
// if (player != null && player.getGameId() != null) {
// Game game = Universe.getInstance().getGamesByGameIds().get(player.getGameId());
// if (game != null) {
// if (game.isStarted()) {
// status = 2;
// } else {
// status = 1;
// }
// }
// }
// return status;
// }
}
}